首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android SQLite 插入失敗排查:表名、列名帶方括號導致的匹配錯誤

     編輯:程式設計疑難解答

Android SQLite 插入失敗排查:表名、列名帶方括號導致的匹配錯誤

現象:db.insert("add", null, cv) 報錯 no such table: add,但建表語句明確寫了 CREATE TABLE [add] ...。

根本原因

SQLite 允許使用方括號 []、雙引號 ""、反引號 `` 包裹標識符。若建表時寫 [add],則表名實際為 [add](包含括號),而非 add。同理,列名 [time]、[sporttype] 等也帶有括號。

代碼中常量定義錯誤

// 錯誤:常量未包含括號
public static final String TABLE_NAME = "add";
public static final String TIME = "time";

修正方案

// 正確:常量與建表語句完全一致
public static final String TABLE_NAME = "[add]";
public static final String TIME = "[time]";
public static final String SPORT_TYPE = "[sporttype]";
// ... 其他列名同理

最佳實踐建議

  • 避免使用關鍵字/特殊字符作為表名列名:如 add、time、date 等均為 SQL 關鍵字,建議改為 t_add、t_time、t_date,則無需括號。
  • 統一常量管理:建表 SQL、插入/查詢常量全部從同一接口/類獲取,杜絕手寫不一致。
  • 調試技巧:在 onCreate 中打印 db.execSQL("SELECT name FROM sqlite_master WHERE type='table'") 確認實際表名。

修正常量後,db.insert(TABLE_NAME, null, cv) 即可正常工作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved