java- mysql数据检索问题

时间:2010-11-24 09:43:15

标签: java mysql jdbc

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?

3 个答案:

答案 0 :(得分: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"});

答案 1 :(得分:1)

您正在遍历ResultSet并且不存储ResultSet返回的所有值。

因此,您的s1 .. s7包含结果集中的最后一个值。您可以s1[] .. s7[]来保存结果集中每列的所有值,也可以拥有集合中所有值的列表。

最好的方法是创建一个POJO对象,将您的实体(POJO)映射到SQL表。

答案 2 :(得分: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,因为你已经解决了持久性问题。