我对Java是个新手(这不是什么新鲜事),我找不到一个好的教程。我使用jTable显示一个用来自MySQL数据库的数据填充的表。
到目前为止一切顺利,我得到了表:
您可以单击表格单元格,它会变成一个文本字段,其中可以填充新的内容。你们都知道,但是我如何使用它来更新我的数据库中的值呢?
我的代码:
import [...];
public class table extends JPanel {
public String table;
private Database db;
public table(String tablename, Database db){
try {
table = tablename;
this.db = db;
//Get table with and height
ResultSet res = db.query("SELECT COUNT( * ) FROM `"+table+"`");
ResultSet res2 = db.query("SELECT COUNT( * ) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '"+table+"'");
int rows = 0;
int collums = 0;
res.next();
res2.next();
rows = res.getInt(1);
collums = res2.getInt(1);
//Get table column names and set then in array
ResultSet clom = db.query("DESCRIBE `"+table+"`");
String[] columnNames = new String[collums];
int s = 0;
while(clom.next()){
columnNames[s] = clom.getString(1);
s++;
}
//get table data and put in array
Object[][] data = new Object[rows][collums];
ResultSet result = db.query("SELECT * FROM `"+table+"`");
int q = 0;
while(result.next()){
for(int a=0; a<= (collums - 1); a++){
data[q][a] = result.getString(a + 1);
//System.out.println(q + " - " + a);
}
q++;
}
//Make Jtable of the db result form the two array's
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
// do some event listening for cell change
JScrollPane scrollPane = new JScrollPane(table);
JFrame frame = new JFrame("table editor");
scrollPane.setOpaque(true);
frame.setContentPane(scrollPane);
frame.pack();
frame.setSize(600, 800);
frame.setVisible(true);
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
我想我需要绑定某种类型的表侦听器,当发生变化时,我会获取表的所有值,并使用查询来更新它们。
我该怎么做呢?
这是我的伪代码:
table.bindCellEventListner(callback(t){
Array row = t.getAllValuesAsArrayOfRow();
String data = "";
int f = 0
while(row.next()){
data .= "`"+clom[f]+"` = '"+row[f]+"',"
f++;
}
data.delLastChar();
db.query("UPDATE `"+table+"` SET "+data+" WHERE `id` ="+row[0]+";");
});
发布于 2018-06-12 08:55:15
here发现,一个被删除的答案抄袭了瑞秋·斯威尔斯14年前的答案。为了完整性,并且因为答案是正确和有用的,我在这里引用了相关文本:
第一步:如果你从现在开始让你的表扩展一个TableModel (如果你还没有这样做的话),整个事情就会变得简单得多。所以,如果你需要帮助的话,尽管开口。
第2步:在表格模型中,您需要使单元格可编辑。在您创建的TableModel类中,需要添加以下方法
public boolean isCellEditable(int row, int col) {
return true;
}
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
步骤3:在第二个方法中,您将看到我们触发了一个名为fireTableCellUpdated的方法。所以在这里我们可以捕捉到它的用途改变了什么。您需要向表中添加一个TableModelListener才能捕捉到这种情况。
mytable.getModel().addTableModelListener(yourClass);
,并且在您决定要实现TableModelListener的类中,您需要这样做
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
Object data = model.getValueAt(row, column);
...
}
现在您有了单元格中的数据和网格中
单元格,这样您就可以像使用一样使用数据。
https://stackoverflow.com/questions/17232118
复制相似问题