2010-11-24 39 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,因爲您已經清除了持久性。