Java 在JTable中简单显示数据库数据
我有一个结构简单的Java 在JTable中简单显示数据库数据,java,database,swing,jdbc,Java,Database,Swing,Jdbc,我有一个结构简单的JTable,我想用数据库数据填充它 我写了这段代码,但现在不知道如何继续 任何愚蠢到包含一个空的捕捉块的人肯定会挣扎: } catch (SQLException ex) { } 这是一个非常糟糕的主意。您应该至少记录或打印堆栈跟踪,或者向方法签名添加一个throws子句,并在其他地方处理它 你的代码风格也很差。可读性很重要。形成一种连贯的风格并坚持下去 在JTable中简单显示数据库数据 无需创建自定义TableModel 有关将数据加载到DefaultTable
JTable
,我想用数据库数据填充它
我写了这段代码,但现在不知道如何继续 任何愚蠢到包含一个空的捕捉块的人肯定会挣扎:
} catch (SQLException ex) {
}
这是一个非常糟糕的主意。您应该至少记录或打印堆栈跟踪,或者向方法签名添加一个throws子句,并在其他地方处理它
你的代码风格也很差。可读性很重要。形成一种连贯的风格并坚持下去
在JTable中简单显示数据库数据
无需创建自定义TableModel
有关将数据加载到DefaultTableModel并在JTable中显示模型的简单方法,请参见数据库示例中的
表。此异常是因为cols变量未在任何地方初始化
所以您应该初始化TableModels构造函数或out of TableModel中的所有字段
那么,您不应该在TableModels的主要方法中使用元数据或任何类型的数据库
仅在构造函数中或表模型的外侧
像这样。尝试:
class d9tableModel extends AbstractTableModel {
Connection con;
Statement statement;
ResultSetMetaData metadata;
ResultSet resultSet;
String dbName = "mydb";
String bdUser = "root";
String dbPassword = "2323";
String dbUrl = "jdbc:mysql://localhost/mydb";
String query = "select * from mytable";
ArrayList<String> cols = new ArrayList<>();
ArrayList<ArrayList<String>> data = new ArrayList<>();
public d9tableModel() {
try {
con = DriverManager.getConnection(dbUrl, bdUser, dbPassword);
System.out.println("Connected to database successfully!");
statement = con.createStatement();
resultSet = statement.executeQuery(query);
int c = resultSet.getMetaData().getColumnCount();
for (int i = 0; i < c; i++) {
cols.add(resultSet.getMetaData().getColumnName(i));
}
while (resultSet.next()) {
ArrayList<String> row = new ArrayList<>();
for (int i = 0; i < c; i++) {
row.add(resultSet.getString(i));
}
data.add(row);
}
} catch (SQLException ex) {
System.out.println("Could not connect to database");
} finally {
try {
if (statement != null) {
statement.close();
}
if (con != null) {
con.close();
}
} catch (SQLException ex) {
Logger.getLogger(d9tableModel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public int getColumnCount() {
return cols.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
ArrayList<String> row = data.get(rowIndex);
return row.get(columnIndex);
}
@Override
public String getColumnName(int column) {
return cols.get(column);
}}
类d9tableModel扩展了AbstractTableModel{
连接con;
声明;
结果元数据;
结果集结果集;
字符串dbName=“mydb”;
字符串bdUser=“root”;
字符串dbPassword=“2323”;
String dbUrl=“jdbc:mysql://localhost/mydb";
String query=“从mytable中选择*”;
ArrayList cols=新的ArrayList();
ArrayList数据=新的ArrayList();
公共d9tableModel(){
试一试{
con=DriverManager.getConnection(dbUrl、bdUser、dbPassword);
System.out.println(“成功连接到数据库!”);
statement=con.createStatement();
resultSet=语句.executeQuery(查询);
int c=resultSet.getMetaData().getColumnCount();
对于(int i=0;i
这个表模型精确地映射了JTable中的数据库表
对不起,我的英语很差
祝你好运。到目前为止你面临的问题是什么?正如我所看到的,您从不修改数据[]和cols[]数组,它们是空的,因此您可能会遇到一些异常,或者您的表是空的。您是否有任何具体问题,或者您只是想学习如何使用JTable?如果后一种说法是正确的,那么网上有很多教程,你可以参考。你可能想看看我认为你在一节课上做的太多了。将问题分解为可以单独测试的部分。在您担心Swing或UI之前,先让数据库工作起来。这是一个坏主意。您如何知道预期的行数?可能是阵列溢出了。同样,您可能会使数组下溢,留下大量空行。使用一种类型的
列表
。如果我可以避免的话,它也不愿意在表中混合我的数据库逻辑……但那只是我;)我需要创建一个自定义的TableMode,如下所示。我认为我的主要问题是将数据发送到数组或向量,然后创建表模型。camickr是Swing专家。当他告诉你一个DefaultTableModel已经足够时,你应该仔细听并尝试一下。@kleopatra我运行了这段代码,只显示了第一列!将i<=c
添加到循环后,问题解决了@Sajjad,您正确地发现了错误,基本问题是您没有完全修复它:只调整上限,而不是下限:-)Omid,结果集中的索引是基于1的,而不是基于0的,您需要适当地编辑和修复循环。