SQLite錯誤訊息整理
錯誤訊息:E/SQLiteLog: (1) unrecognized token
檢查SQL語法是否有違反基本原則造成語法無法辨識,像是漏掉單字或是符號多打都有可能,我遇到的情況為語法內沒有空格,改掉後就不會有這樣的錯誤訊息產生。
SQL語法內WHERE到ORDER 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
留言
張貼留言