我希望能够将JTable中的数据转换为UPDATE语句,以便我可以获取表内容并使用现有的SQL连接转移到DB中。
例如
到
UPDATE Products SET ProductID="JUICE32", ProdName="Orange Juice", Stock=190, Price=8.00 WHERE ProductID="JUICE32";
UPDATE Products SET ProductID="SOAP123", ProdName="Deluxe Soap", Stock=500, Price=15.99 WHERE ProductID="SOAP123";
UPDATE Products SET ProductID="TOWEL12", ProdName="Towel", Stock=0, Price=25.50 WHERE ProductID="TOWEL12";
请注意,我不允许编辑主键。这是故意的
答案 0 :(得分:2)
您可以使用PreparedStatment
使代码更易于理解和维护。
我不是SQL专家,但代码类似于:
String sql = "UPDATE Products SET ProductID = ?, ProdName = ?, Stock = ?, Price = ? WHERE ProductID = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString( 1, table.getValueAt(row, 0) );
stmt.setString( 2, table.getVAlueAt(row, 1) );
stmt.setInteger( 3, table.getVAlueAt(row, 2) );
stmt.setDouble( 4, table.getVAlueAt(row, 3) );
stmt.setString( 5, table.getValueAt(row, 0) );
stmt.executeUpdate();
stmt.close();
希望你能得到这个想法。使用"?"构建SQL语句。对于可变数据。然后你只需设置每个"?"的值。 PreparedStatement
会担心格式正确等等。更不容易出错。
另外,我不确定您的代码为什么设置产品ID。我原以为你只需要设置3个值就可以了。
编辑:
为了使上述更加通用,您可以执行以下操作:
public void updateTable(JTable table)
{
String sql = createSql(table);
for (int i = 0; i < table.getRowCount(); i++)
{
updateRow(sql, table, i);
}
}
public String createSql(JTable table)
{
StringBuilder sql = new StringBuilder();
sql.append("UPDATE " + tableName + " SET ");
for (int i = 0; i < table.getColumnCount(); i++)
{
sql.append(table.getColumnName(i) + " = ?";
sql.append(i + 1 == table.getColumnCount() ? " " : ", ");
}
return sql.toString();
}
public void updateRow(String sql, JTable table int row)
{
PreparedStatement stmt = connection.prepareStatement(sql.toString());
for (int i = 0; i <table.getColumnCount(); i++)
{
stmt.setObject( i + 1, table.getValueAt(row, i) );
}
stmt.setObject(table.getColumnCount, table.getValueAt(row, i));
stmt.executeUpdate();
stmt.close();
}
答案 1 :(得分:1)
到目前为止,我的代码只支持BigDecimal,String,Integer和Boolean类型,但添加更多内容应该相对容易(查看switch语句内部)
public String getUpdateStmt(JTable JTable1, String tableName)
{
String update = "";
for (int i = 0; i < JTable1.getRowCount(); i++)
{
update += "UPDATE " + tableName + " SET";
for (int j = 0; j < JTable1.getColumnCount(); j++)
{
update += " " + JTable1.getColumnName(j) + "=";
switch (JTable1.getValueAt(i, j).getClass().getTypeName())
{
case "java.lang.String":
update += "\"" + JTable1.getValueAt(i, j) + "\"";
break;
case "java.math.BigDecimal": //all these don't need quotes etc
case "java.lang.Integer":
case "java.lang.Boolean":
update += JTable1.getValueAt(i, j);
break;
default:
System.err.println(JTable1.getValueAt(i, j).getClass().getTypeName());
}
if (!(j + 1 == JTable1.getColumnCount()))//stops insertion of comma on last value
{
update += ",";
}
}
update += " WHERE " + JTable1.getColumnName(0) + "=\"" + JTable1.getValueAt(i, 0) + "\"";//Where clause using primary key
update += ";\n";//ends SQL statement
}
System.err.println(update); //debugging
return update;
}
在executeSQL(String stmt);
方法中正常使用
我只想在做项目时发布我的发现。我已经在互联网上搜索了这个,并且找不到将jtable更改为SQL的方法。
请告诉我可以添加的任何改进,因为我打算帮助很多人