SQLite錯誤訊息整理

最近在寫app有用到sqlite的東西還遇到了蠻多的錯誤,這些訊息我覺得還蠻有紀錄價值的慢慢的在整理貼上來。


2020/1/22
錯誤訊息:android.database.sqlite.SQLiteException: no such table

在新增資料時,找不要插入資料的table,因為table還未被建立,才會發生的錯誤。





解決方法:
1.更改資料庫版本。
2.onUpgrage若資料庫的結構有改變時必須變更資料庫版本,像是建立table、新增欄位等,就會觸發進行建立。

補充:
onCreate在載入資料庫找不到table就會觸發onCreate執行SQL

-----------------------------------------------------------------------------------------------------------------------------

前不久在忙其他的事情,最近終於有空了!!想到還有這些資料沒有整理,趕快上來把後續的其他錯誤訊息整理好~

2020/9/6

錯誤訊息:E/SQLiteLog: (1) unrecognized token

檢查SQL語法是否有違反基本原則造成語法無法辨識,像是漏掉單字或是符號多打都有可能,我遇到的情況為語法內沒有空格,改掉後就不會有這樣的錯誤訊息產生。

 

SQL語法內WHEREORDER BY之間沒有空格

錯誤:SELECT * FROM TABLE WHERE A='B'ORDER BY ID DESC

正確:SELECT * FROM TABLE WHERE A='B'  ORDER BY ID DESC

 

參考連結:https://blog.csdn.net/pbm863521/article/details/78582267



錯誤訊息:Couldn't read row 0, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

 

錯誤原因為讀取不到資料,可能的原因為讀取到沒有定義的欄位。

檢查後發現,因為我要算出有多少筆資料所以用count的方式撈資料然後又把欄位名稱用AS重新命名,所以就會出現以上的錯誤訊息。

 

沒有重新定義欄位的取出方法

SQL語法:select * from table

Android程式:

cursor = mSQLiteDB.GetData("參數1","參數2");

cnt = cursor.getInt(1);

 

SQL語法:select count(*) as cnt from table

Android程式:

cursor = mSQLiteDB. GetData ("參數1","參數2");

cnt = cursor.getInt(cursor.getColumnIndex("cnt"));

 

參考連結:http://wangshifuola.blogspot.com/2011/11/androidcouldnt-read-row-0-col-1-from.html



錯誤訊息:Caused by: java.lang.IllegalStateException: getDatabase called recursively

 

錯誤原因為取得資料庫的資料錯誤。

我的狀況為在新增和更新時本來有5個欄位要寫入,但是執行時少一個值寫入,補上後執行就正常了

 

例:

public long insert(int 參數1,int 參數2,String 參數3,String 參數4,String 參數5)
{
    SQLiteDatabase db =
this.getWritableDatabase();
    ContentValues cv =
new ContentValues();
    cv.put(
"欄位1", 參數1);
    cv.put(
"欄位2", 參數2);
    cv.put(
"欄位3", 參數3);
    cv.put(
"欄位4", 參數4);
    cv.put(
"欄位5", 參數5); //少掉一個造成讀取的錯誤
   
long row = db.insert("table", null, cv);
   
return row;
}

 

 

參考連結:https://stackoverflow.com/questions/15955799/getdatabase-called-recursively




留言

這個網誌中的熱門文章

Fatal error: Call to a member function bindValue() on null

IIS-Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'

ORA-12899: value too large for column