Java 如何从MySQL表中删除所有数据并用新数据填充表
我正在编写一个java函数来删除MySQL表中的所有数据,然后在其中写入新数据。以下是我的功能Java 如何从MySQL表中删除所有数据并用新数据填充表,java,mysql,Java,Mysql,我正在编写一个java函数来删除MySQL表中的所有数据,然后在其中写入新数据。以下是我的功能 public void editsnack(ArrayList snames) { System.out.println("Snack Names "+snames); Statement _snacksListStmt = null; Statement _deleteTableDtataStmt = null; try { _snacksListStmt = fCon.createStat
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);
}
}
正在打印正确的值,但表中未存储值
如何解决此问题?根据您的连接是否设置为自动提交,您必须调用
fCon.commit()
提交事务。
此外,在完成操作时,应该始终关闭语句。问题在于for循环中的delete查询,每次插入后都会截断数据。使用当前逻辑,只有最后一次插入才会在表中重新插入,所有其他数据都将被截断。将删除查询移到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);
}
String\u deleteTableData=“TRUNCATE TABLE snacklist”;
_DeleteTabledDataStmt.executeUpdate(\u deleteTableData);
对于(i=0;i首先,您要删除插入的每个项目的所有数据
因此,将TRUNCATE
代码移动到for
循环之前
并查看是否可以在将零食名称添加到SQL之前对其进行清理,或者它们可能导致SQL注入请尝试下面的代码
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);
}
}
public void editSnapshot(ArrayList snames)
{
System.out.println(“零食名称”+snames);
语句_snackslistmt=null;
语句_deleteTableDtataStmt=null;
尝试
{
_snackslistmt=fCon.createStatement();
_DeleteTabledDatastmt=fCon.createStatement();
字符串_deletetetabledata=“TRUNCATE TABLE snacklist”;
_DeleteTabledDataStmt.executeUpdate(\u deleteTableData);
int i=0;
对于(i=0;i首先,您正在删除插入的每个项目的所有数据。因此,请将截断代码移动到for
-loopals..该SQL可以包含注入。@NoLifeKing将您的第一条注释作为答案发布,以便我可以接受它。
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);
}
}