0
我困在一個非常奇怪的錯誤。我有一個桌面追隨者,當我插入數據時,除了我第一次輸入外,它是有效的。Sqlite插入行錯誤
我第一次調用該函數時,什麼也沒有引發,插入函數按預期返回1.但是,當我調用select all函數時,表是空的。
但是,當我用不同的參數調用函數時,數據確實被插入,表中顯示了一個條目(這一個),但是以2作爲id。
我正在使用Sqldelight。
public long insertFollower(String name, String wca_id, long created_at) {
try {
SQLiteDatabase db = openDatabase();
return db.insert(Follower.TABLE_NAME, null, Follower.FACTORY.marshal()
.name(name)
.wca_id(wca_id)
.created_at(created_at)
.asContentValues());
}
catch (Exception e) {
e.printStackTrace();
}
finally {
closeDatabase();
}
return 0;
}
private static AtomicInteger openCount = new AtomicInteger();
private static SQLiteDatabase database;
public static final String DATABASE_NAME = "database.db";
public static final int DATABASE_VERSION = 12;
private static DatabaseHelper instance;
public static synchronized DatabaseHelper getInstance(Context context) {
if(instance == null) {
instance = new DatabaseHelper(context);
}
return instance;
}
public synchronized SQLiteDatabase openDatabase() {
if(openCount.incrementAndGet() == 1) {
database = getWritableDatabase();
}
return database;
}
public synchronized void closeDatabase() {
if(openCount.decrementAndGet() == 0) {
database.close();
}
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(Follower.CREATE_TABLE);
db.execSQL(Record.CREATE_TABLE);
}
而誰是sqldelight產生Follower.CREATE_TABLE
String CREATE_TABLE = ""
+ "CREATE TABLE follower (\r\n"
+ " _id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\r\n"
+ " name TEXT NOT NULL,\r\n"
+ " wca_id TEXT NOT NULL\r\n"
+ ")";
編輯:
我發現了一些奇怪的是,可能會有幫助:
這只是工作,如果表是空的
我插入一個追隨者,這是行不通的。但是,當我插入其他跟隨者與第一個相同的ID(有一個主鍵自動增量)。我得到一個UNIQUE異常,但表仍然是空的。
不要猶豫,要了解更多信息。
謝謝。
你可以像使用SQLiteDebugger工具來驗證該表是空的(而不是你的編碼選擇語句) –
嗨Al Lelopath,感謝您的快速回答。我想我將無法使用SqliteDebugger,因爲我的手機沒有植根,而且我的電腦無法模擬手機。 :/ –
參數是否重要?例如。如果你切換第一個和第二個插入的參數,你是否仍然得到相同的錯誤?那麼第三次插入呢,它有什麼作用?可能是第二次插入覆蓋第一次。 –