2010-11-24 7 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

あなたのコードはすべてのデータを読み込んでいますが、すべてを格納しているわけではありません。最後のループ実行のデータしか保持していません。

最後の行からテーブルを作成するので、最後の行のみが表示されます。

はあなたがResultSetを反復処理しないと何もResultSetによって返されたすべての値を格納している

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

+0

@Rince check update –

+0

すべてのデータを保存する方法 – Rince

1

より

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

のようなものを試してみてください。

s1 .. s7は結果セットの最後の値を保持します。 s1[] .. s7[]のいずれかを使用して、結果セットから列ごとにすべての値を保持するか、セット内のすべての値のリストを持つことができます。

最も良い方法は、エンティティ(POJO)をSQLテーブルにマップするPOJOオブジェクトを作成することです。

+0

POJOの作成方法 – Rince

+0

POJO(Plain Old Java Object)は単なるJavaクラスです。あなたの場合、SQLテーブルの列を表すgetters/setterを持つ属性を持つクラス。 –

0

これは小さなステップに分割すると簡単に問題になります。

すべてのコードを1つのメインメソッドに入れるのではなく、複数の小さなクラスに分割することをお勧めします。 1つに集中し、それを働かせて、次のものに移動してください。

最初の問題はデータの取得です。

Javaはオブジェクト指向言語です.Appleクラスから始まります。

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に分離されます。これは、永続性がソートされているためです。

関連する問題