Java 方法不生成JTable
我在当地遗嘱认证法庭工作,我们提供的一项服务是电子邮件提醒。他们填写一张表格,并将其输入到系统中,然后在到期时通知他们。我被允许创建一个程序,允许我从表格中输入信息,以跟踪已注册的律师Java 方法不生成JTable,java,sqlite,Java,Sqlite,我在当地遗嘱认证法庭工作,我们提供的一项服务是电子邮件提醒。他们填写一张表格,并将其输入到系统中,然后在到期时通知他们。我被允许创建一个程序,允许我从表格中输入信息,以跟踪已注册的律师 import java.sql.*; import java.util.*; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class Attempt1 { public static void setConn
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class Attempt1 {
public static void setConnection() throws SQLException {
Connection conn = null;
Statement state = null;
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:dummy3.db");
} catch (Exception e) {
e.printStackTrace();
}
setStatement(conn, state);
setInsert(conn, state);
setQuery(conn, state);
}
// Test method
public static void setStatement(Connection conn, Statement state)
throws SQLException {
state = conn.createStatement();
String sql = "CREATE TABLE IF NOT EXISTS ATTORNEY "
+ "(ID INT PRIMARY KEY NOT NULL,"
+ " NAME TEXT NOT NULL, "
+ " EMAIL CHAR(50), " + " DATE TEXT NOT NULL)";
state.executeUpdate(sql);
}
public static void setInsert(Connection conn, Statement state)
throws SQLException {
int entries;
int i = 0;
String input;
String sql = "";
state = conn.createStatement();
Scanner keyboard = new Scanner(System.in);
System.out.print("How many entries will you insert?");
entries = keyboard.nextInt();
keyboard.nextLine();
while (i < entries) {
System.out
.println("Enter the values for ID, NAME, EMAIL, and DATE");
input = keyboard.nextLine();
sql = "INSERT INTO ATTORNEY (ID, NAME, EMAIL, DATE) " + "VALUES ("
+ input + ");";
state.executeUpdate(sql);
i++;
}
}
// Test method
public static void setQuery(Connection conn, Statement state)
throws SQLException {
state = conn.createStatement();
String sql = "SELECT * FROM ATTORNEY";
ResultSet result = state.executeQuery(sql);
/*
* while (result.next()) {
*
* String name = result.getString("NAME"); long age =
* result.getLong("ID");
*
* System.out.println(name); System.out.println(age); }
*/
JTable table = new JTable(buildTableModel(result));
JOptionPane.showMessageDialog(null, new JScrollPane(table));
result.close();
state.close();
}
public static DefaultTableModel buildTableModel(ResultSet rs)
throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
}
public static void main(String[] args) throws SQLException {
setConnection();
}
}
在setInsert方法之前添加setQuery方法并保留第二个setQuery,它将在条目之前和之后显示表。它并没有解决我的问题,有趣的是它确实显示了表,并在setInsert方法之后正确地终止了程序
第二次更新:
昨晚我关掉电脑时注意到了一些东西。当我的程序关闭时,我注意到背景中有一个Jtable。在今天闲逛之后,我意识到它实际上是在桌面上显示Jtable。我必须将Eclipse最小化到桌面才能看到这一点。我以前从未见过这种情况,不幸的是,我无法用在谷歌上产生结果的方式来表达它 为了解决这样的问题,您可以使用IDE的调试器@Synesso我一直在努力理解如何正确使用IDE的调试器。我将对它做更多的阅读,利用它来避免将来通过调试可以解决的问题。问@DanceRandyDance这个问题没有坏处。不过我想让你知道调试器。现在我回家了,我可以试试了。在我离开工作之前,有人给了我一个答案,我相信这是一个解释,但它似乎被删除了。
setStatement(conn, state);
setQuery(conn, state);
setInsert(conn, state);
setQuery(conn, state);