Sqlite 插入行错误
Sqlite insert lines bug
我遇到了一个非常奇怪的错误。我有 table 个关注者,当我插入数据时,除了我的第一个条目外,它都有效。
我第一次调用该函数时,没有抛出任何内容,插入函数 return 符合预期 1。但是当我调用 select all 函数时,table 为空.
然而,当我另一次使用不同的参数调用该函数时,数据确实被插入并且 table 显示一个条目(这个)但 ID 为 2。
我正在使用 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"
+ ")";
编辑:
我注意到一些奇怪的事情可能会有所帮助:
这仅在 table 为空时有效
我插入了一个随从,但没有用。但是当我插入另一个与第一个 ID 相同的关注者时(有一个主键自动增量)。我得到一个 UNIQUE 异常,但 table 仍然是空的。
请随时询问更多信息。
谢谢。
感谢@anstrong,我终于找到了答案:select 我使用 cursor.moveToFirst()
的随从, while(cursor.moveToNext())
在
之后被调用
我遇到了一个非常奇怪的错误。我有 table 个关注者,当我插入数据时,除了我的第一个条目外,它都有效。
我第一次调用该函数时,没有抛出任何内容,插入函数 return 符合预期 1。但是当我调用 select all 函数时,table 为空.
然而,当我另一次使用不同的参数调用该函数时,数据确实被插入并且 table 显示一个条目(这个)但 ID 为 2。
我正在使用 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"
+ ")";
编辑:
我注意到一些奇怪的事情可能会有所帮助:
这仅在 table 为空时有效
我插入了一个随从,但没有用。但是当我插入另一个与第一个 ID 相同的关注者时(有一个主键自动增量)。我得到一个 UNIQUE 异常,但 table 仍然是空的。
请随时询问更多信息。
谢谢。
感谢@anstrong,我终于找到了答案:select 我使用 cursor.moveToFirst()
的随从, while(cursor.moveToNext())
在