2010-11-24 48 views
0
import java.sql.*; 
import java.io.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import javax.swing.*; 
import java.awt.*; 
import javax.swing.table.*; 
import java.util.Vector; 

public class SimpleTable extends JFrame { 
public SimpleTable() { 
super("Simple JTable Test"); 
setSize(350, 200); 
//setLocation(250,300); 
int ColCount; 
int i; 


try 
{ 

Class.forName("com.mysql.jdbc.Driver"); 
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost/employ_details","root",""); 
    java.sql.Statement stmt= con.createStatement(); 
    ResultSet rs= stmt.executeQuery("select * from employe_details "); 
ResultSetMetaData meta =rs.getMetaData(); 
ColCount=meta.getColumnCount(); 
String s1 = null; 
String s2 = null; 
String s3 = null; 
String s4 = null; 
String s5 = null; 
String s6 = null; 
String s7 = null; 
while (rs.next()) 
{ 

String [] record= new 
String[ColCount]; 




for (i=0; i<ColCount; i++) 
{ 

record[i]=rs.getString(i+1); 
s1= rs.getString("Employee_ID"); 
s2= rs.getString("Employee_Name"); 
s3= rs.getString("Contact_Number"); 
s4 = rs.getString("Address"); 
s5 = rs.getString("Email"); 
s6 = rs.getString("dob"); 
s7 = rs.getString("Sex"); 
} 
JTable jt = new JTable(new String[][]{{s1,s2,s3,s4,s5,s6,s7}}, new String[]{"Employee_ID","Employee_Name","Contact_Number","Address","Email","dob","Sex"}); 
JScrollPane jsp = new JScrollPane(jt); 
getContentPane().add(jsp,BorderLayout.CENTER); 
}} 
catch (Exception e) 
{ 
System.out.println("failure to connect " + e); 
return; //(exit(1)); 
} 
} 
public static void main(String args[]) { 
SimpleTable st = new SimpleTable(); 
st.setVisible(true); 
} 
} 

它的唯一功能是在数据库中的最后一行。 我如何获得数据库中的所有行到JTable?java-mysql数据检索问题

回答

1

您的代码正在读取所有数据,但不会全部存储,它仅保存上次循环执行的数据。

并从最后一行创建表,所以它只会显示最后一行。

尝试像

List<String> data = new ArrayList<String>(); 

while (rs.next()) 
{ 

String [] record= new 
String[ColCount]; 




for (i=0; i<ColCount; i++) 
{ 

record[i]=rs.getString(i+1); 
data.add(rs.getString("Employee_ID")); 
data.add(rs.getString("Employee_Name")); 
. 
. 
. 
data.add(rs.getString("Sex")); 
} 
JTable jt = new JTable(new String[][]{data.toArray()}, new String[]{"Employee_ID","Employee_Name","Contact_Number","Address","Email","dob","Sex"}); 
+0

所以我如何存储所有的数据? – Rince 2010-11-24 09:50:24

+0

@自检更新 – 2010-11-24 09:53:35

1

您通过ResultSet迭代并没有存储在ResultSet返回所有的值。

您的s1 .. s7因此保留结果集中的最后一个值。您可以使用s1[] .. s7[]来保存结果集中每列的所有值,或者拥有该组中所有值的列表。

最好的办法是创建一个POJO对象来映射你的实体(POJO)到你的SQL表中。

0

如果将其分解为更小的步骤,则这是一个更容易的问题。

而不是把所有的代码放在一个主要的方法,我建议把它们分成几个小类。专注于一个,让它工作,然后继续下一件事。

你的第一个问题是数据检索。

Java的一种面向对象的语言:从一个Employee类开始。

package model; 

public class Employee 
{ 
    private String id; 
    private String name; 
    private String phone; 
    private String address; 
    private String email; 
    private Date birthday; 
    private Gender gender; 

// Constructors, getters/setters, equals, hashCode, toString and behavior follow. 
} 

一旦你的编写和测试,写一个数据访问对象来处理数据库:

package persistence; 

public interface EmployeeDao 
{ 
    List<Employee> find(); 
    Employee find(String id); 
    List<Employee findByName(String name); 
    void save(Employee e); 
    void update(Employee e); 
    void delete(Employee e); 
} 

写这个的实现,并把它进行测试。

只有当你有这些工作时才担心JTable。您的问题在此时会被隔离到UI,因为您已经清除了持久性。