繁体   English   中英

java- mysql数据重现问题

[英]java- mysql data retriving problem

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?

您的代码正在读取所有数据,但它并不存储所有数据,它仅保存最后一个循环执行的数据。

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

尝试类似的东西

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"});

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

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

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

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

建议不要将所有代码放入一个主要方法中,而是将它们分成几个较小的类。 专注于一个,让它工作,然后进入下一个事情。

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

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,因为您已经解决了持久性问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM