2011-04-25 162 views
0
public static void main(String[] args) { 
    try { 
     Class.forName("org.sqlite.JDBC"); 
     connection = DriverManager.getConnection("jdbc:sqlite:C:\\users\\tim\\airline\\flightschedule.db"); 
     PreparedStatement statement = connection.prepareStatement("INSERT INTO flights (flightID,departure,arrival)VALUES(?,?,?)"); 
      statement.setInt(1,5); 
      statement.setString(2,"David"); 
      statement.setString(3,"Ortiz"); 
      statement.executeUpdate(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      resultSet.close(); 
      statement.close(); 
      connection.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

你能粘貼你看到的異常跟蹤嗎? – lobster1234 2011-04-25 02:40:27

+0

我沒有看到任何 – tim 2011-04-25 02:45:45

回答

10

您應該調用其他方法。

首先第一件事情,但:

錯誤代碼(全方位開放的SQL注入攻擊):

 statement = connection.createStatement(); 
     resultSet = statement.executeQuery(
      "INSERT INTO flights 
       ('flightID','departure','arrival') 
       VALUES('"+flightID+"','"+departure+"','"+arrival+"')"); 

好的代碼:

 PreparedStatement statement = connection.prepareStatement(
      "INSERT INTO flights (flightID,departure,arrival) 
       VALUES(?,?,?)"); 
     statement.setString(1,flightID); 
     statement.setString(2,departure); 
     statement.setString(3,arrival); 
     statement.executeUpdate(); 

     // thanks to @lobster1234 for reminder! 
     connection.commit(); 

你有沒有注意到我做的executeUpdate()代替executeQuery()?因爲這是你麻煩的原因。

P.S.我還注意到,您將flightID作爲int傳入方法,但將其作爲字符串插入到數據庫中。通常不是一個好習慣。堅持一種數據類型。如果ID實際上是一個數字,則將其作爲數據庫中的一個數字,然後調用setInt(1,flightID);或者,也可以像String一樣傳遞它。

+0

我沒有看到任何異常,但數據未被添加到數據庫中。 – tim 2011-04-25 02:53:58

+0

這是因爲查詢只掃描數據庫。坦白地說,我希望SQLite在將INSERT傳遞給查詢方法時拋出一個異常,但我認爲lite是意味着你可以偷工減料。 – 2011-04-25 02:58:55

+0

謝謝,我將它更改爲executeUpdate()並使用了準備好的語句。它仍然沒有成功地將其添加到數據庫。 – tim 2011-04-25 03:03:21

4

嘗試在executeUpdate()之後致電connection.commit()。您還可以獲得executeUpdate()返回的值,並確保得到1而不是0,因爲此調用返回受該語句影響的行數。

+0

hehe ...現在我想知道在將commit()添加到...之後,將INSERT傳遞給query()的原始版本是否也能與SQLite一起工作... – 2011-04-25 03:30:29

+0

我聽到你!我被Spring-JDBC寵壞了,你不必處理樣板代碼太多:) – lobster1234 2011-04-25 03:33:09

相關問題