0

我正在编写一个 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);

正在打印正确的值,但是值没有存储在表中。

我怎么解决这个问题?

4

4 回答 4

1

首先,您要删除要插入的每个项目的所有数据。

所以将TRUNCATE代码移到for-loop之前

并查看是否可以在将零食名称添加到 SQL 之前对其进行清理,否则它们可能会导致 sql 注入

于 2013-08-02T09:49:10.653 回答
0

根据您的连接是否设置为自动提交,您是否必须调用fCon.commit()以提交您的事务。此外,您应该始终在完成后关闭您的陈述。

于 2013-08-02T09:44:42.690 回答
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);
    }
于 2013-08-02T09:48:00.440 回答
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);
        }
}
于 2013-08-02T09:50:22.903 回答