2013-06-18 31 views
1

需要從sqlite數據庫中刪除記錄。一次一個記錄行和/或具有特定字符串值的所有記錄。 我看了很多帖子,大部分似乎都是針對Android的,而且與普通Java非常不同 - 沒有找到我需要的東西。如何刪除sqlite中的行/行(java,不是Android java)

下面的代碼片段,我想(delString從一個文本框進來),我沒有設置記錄的ID:

Class.forName("org.sqlite.JDBC"); 
    Connection conn = DriverManager.getConnection("jdbc:sqlite:dufuss.db"); 

    delIt = Dialog_RecToDelete.delString; 
    String sql = "DELETE * FROM " + TABLE_NAME + " WHERE docName = ?"; 
    PreparedStatement preparedStatement = conn.prepareStatement(sql); 
    preparedStatement.setString(1, delIt); 
    ResultSet rs = preparedStatement.executeQuery(); 

    while (rs.next()) { 
     // iterate through results 
    } 
    rs.close(); 
    conn.close(); 
+1

使用['PreparedStatement#executeUpdate'](http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#executeUpdate%28%29) – DannyMo

+0

沒有工作 - 嘗試它發佈之前。獲取消息:靠近「*」:語法錯誤 – headscratch

回答

4

按照documentation,它應該只是DELETE FROM ...,因此將其刪除*DELETE * FROM ...

此外,你應該使用PreparedStatement#executeUpdate代替PreparedStatement#executeQuery

+1

Pefect! - 有用! (刪除第一列包含delString值的行 - 就像我需要的那樣)。 – headscratch

2

SQLite是光也對語法,他們不使用*因爲它是不必要的(誰只是刪除一列,而不是整行?)。

所以,下面的語法應該工作:

"DELETE FROM " + TABLE_NAME + " WHERE docName = ?" 

另外請注意,@damo評論,你需要使用executeUpdate()而不是executeQuery()和可能的提交是爲了如果它不是自動commiting。

有關DELETE語法的更多信息here