我的JTable
数据库中有数据。我想从数据库动态地向每行添加复选框。我稍后将使用这些复选框删除从数据库中检查的行。我知道如何从数据库中删除,但如何从数据库中添加复选框?任何人在此之前完成此任务请帮助。我是一个尝试学习它的Java爱好者。示例代码可以帮助我了解如何执行此操作。
以下代码用于更新我的JTable
:
public void UpdateTable() {
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"
+ "employee_certificate", "root", "");
String sql = "SELECT certificate.Number, staff.Emp_Id, staff.Emp_Name, "
+ "staff.Department, certificate.Cert_Code, certificate.Cert_Name,\n"
+ "certificate.Vendor, certificate.Date_Taken, "
+ "certificate.Expiry_Date FROM staff LEFT JOIN certificate"
+ " ON staff.Emp_Id=certificate.Emp_Id ORDER BY staff.Emp_Name\n";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
答案 0 :(得分:2)
从这个完整的example开始,我进行了以下更改以获得以下结果。特别是,
Row
获得了一个属性Boolean checked
,取代了String name
。
默认renderer使用getColumnClass()
为Boolean.class
返回Row.checked
时的复选框。
在相应的JDBC和SQL中,checked
属性的类型为boolean
。
$ diff Original.java WorkerTest.java
48c48
< String name;
---
> Boolean checked;
91c91
< return row.name;
---
> return row.checked;
105a106,116
> @Override
> public Class<?> getColumnClass(int colIndex) {
> switch (colIndex) {
> case 0:
> return Integer.class;
> case 1:
> return Boolean.class;
> }
> return null;
> }
>
114c125
< r.name = rs.getString(2);
---
> r.checked = rs.getBoolean(2);
138c149
< st.execute("create table city(id integer, name varchar2)");
---
> st.execute("create table city(id integer, checked boolean)");
143,144c154
< ps.setString(2, (char) ('A' + r.nextInt(26))
< + String.valueOf(r.nextInt(1_000_000)));
---
> ps.setBoolean(2, Boolean.valueOf(r.nextBoolean()));
答案 1 :(得分:1)
问题是DBUtils
会返回完整的TableModel
。
最简单的方法是不使用DBUtils
并自行将ResultSet
中的数据加载到TableModel
。
代码并不困难,您可以使用Table From Database中的Table From Database Example
作为起点。
代码只是将ResultSet中的数据加载到Vectors中,因此您可以手动添加另一列以包含布尔数据。
代码的(两个)更改类似于:
// Get column names
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( md.getColumnName(i) );
}
columnName.addElement( "Check Mark" ); // added
// Get row data
while (rs.next())
{
Vector<Object> row = new Vector<Object>(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement( rs.getObject(i) );
}
row.addElement( Boolean.FALSE ); // added
data.addElement( row );
}