2013-08-02 62 views
0

我正在寫一個java函數來刪除MySQL表中的所有數據,然後在其中寫入新數據。以下是我的功能。如何從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

首先,您要刪除您插入的每個項目的所有數據。因此,將'TRUNCATE'代碼移到* for'for循環的 – NoLifeKing

+0

之前。此SQL可以包含注入。 – NoLifeKing

+0

@NoLifeKing將您的第一條評論發佈爲答案,所以我可以接受它。 –

回答

1

首先,您要刪除要插入的每個項目的所有數據。

所以前for -loop

TRUNCATE代碼移到,看看你是否可以在SQL加入他們之前消毒小吃的名字,或者他們可能會導致以下SQL-注射

0

取決於您是否在autoCommit上設置了連接,您必須致電fCon.commit()來提交您的交易。 你也應該在你完成時總是關閉你的陳述。

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); 
    } 
0

try代碼..

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); 
     } 
} 
相關問題