2016-09-21 103 views
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異常,但表仍然是空的。

不要猶豫,要了解更多信息。

謝謝。

+0

你可以像使用SQLiteDebugger工具來驗證該表是空的(而不是你的編碼選擇語句) –

+0

嗨Al Lelopath,感謝您的快速回答。我想我將無法使用SqliteDebugger,因爲我的手機沒有植根,而且我的電腦無法模擬手機。 :/ –

+0

參數是否重要?例如。如果你切換第一個和第二個插入的參數,你是否仍然得到相同的錯誤?那麼第三次插入呢,它有什麼作用?可能是第二次插入覆蓋第一次。 –

回答

0

我終於找到了答案感謝@anstrong:選擇我用cursor.moveToFirst()跟隨和while(cursor.moveToNext())被稱爲剛過