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