我正在编写一个java函数来删除MySQL表中的所有数据,然后在其中写入新数据。以下是我的功能。
public void editsnack(ArrayList snames)
{
System.out.println("Snack Names "+snames);
Statement _snacksListStmt = null;
Statement _deleteTableDtataStmt = null;
try
{
_snacksListStmt = fCon.createStatement();
_deleteTableDtataStmt = fCon.createStatement();
int i=0;
for(i=0;i<snames.size();i++)
{
String _name = snames.get(i).toString();
String _deleteTableData ="TRUNCATE TABLE snacklist";
_deleteTableDtataStmt.executeUpdate(_deleteTableData);
String _snackListQuery ="insert into snacklist(snackName)values('"+_name+"')";
System.out.println("Query ");
System.out.println(_snackListQuery);
_snacksListStmt.executeUpdate(_snackListQuery);
}
}
请注意,成功删除数据后,这些行
System.out.println("Query ");
System.out.println(_snackListQuery);
正在打印正确的值,但值不会存储在表格中。
我该如何解决这个问题?
答案 0 :(得分:1)
首先,您要删除要插入的每个项目的所有数据。
所以将TRUNCATE
代码移到for
- 循环
看看你是否可以在将它们添加到SQL中之前清理小吃名称,否则它们会导致sql-injections
答案 1 :(得分:0)
根据您是否在autoCommit上设置了连接,您必须致电fCon.commit()
来提交您的交易。
你也应该在完成后关闭你的陈述。
答案 2 :(得分:0)
问题是for循环中的删除查询,您在每次插入后截断数据。使用当前逻辑,只有最后一个插入将在表中重新生成,所有其他数据将被截断。将删除查询移到for循环之外,然后尝试:
String _deleteTableData ="TRUNCATE TABLE snacklist";
_deleteTableDtataStmt.executeUpdate(_deleteTableData);
for(i=0;i<snames.size();i++)
{
String _name = snames.get(i).toString();
String _snackListQuery ="insert into snacklist(snackName)values('"+_name+"')";
System.out.println("Query ");
System.out.println(_snackListQuery);
_snacksListStmt.executeUpdate(_snackListQuery);
}
答案 3 :(得分:0)
尝试以下代码..
public void editsnack(ArrayList snames)
{
System.out.println("Snack Names "+snames);
Statement _snacksListStmt = null;
Statement _deleteTableDtataStmt = null;
try
{
_snacksListStmt = fCon.createStatement();
_deleteTableDtataStmt = fCon.createStatement();
String _deleteTableData ="TRUNCATE TABLE snacklist";
_deleteTableDtataStmt.executeUpdate(_deleteTableData);
int i=0;
for(i=0;i<snames.size();i++)
{
String _name = snames.get(i).toString();
String _snackListQuery ="insert into snacklist (snackName) values ('"+_name+"')";
System.out.println("Query ");
System.out.println(_snackListQuery);
_snacksListStmt.executeUpdate(_snackListQuery);
}
}