【发布时间】:2017-12-01 11:50:58
【问题描述】:
我想在 sqlite 中获取最后插入的行的 id,但是在获取它时没有出现异常。我已经发布了我的 sqlite 表,我想要获取 id 的方法和异常。我尝试了很多堆栈中的答案但没有用。请帮助我
public int getLastId() {
int _id = 0;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query("calls", new String[] {BaseColumns._ID}, null, null, null, null, null);
if (cursor.moveToLast()) {
_id = cursor.getInt(0);
}
cursor.close();
db.close();
return _id;
}
异常
`E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.opentok.example.efflorescence.myaudiotranscription, PID: 20655
android.database.sqlite.SQLiteException: no such column: _id (code 1): , while compiling: SELECT _id FROM calls
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:898)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:509)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1346)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1193)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1064)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1232)
at com.opentok.example.efflorescence.myaudiotranscription.database.DBHelper.getLastId(DBHelper.java:79)
at com.opentok.example.efflorescence.myaudiotranscription.AudioCallActivity$3.run(AudioCallActivity.java:199)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)`
我的 sqlite 表
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName.db";
public static final String CALLS_TABLE_NAME = "calls";
public static final String CALLS_COLUMN_ID = "id";
public static final String CALLS_COLUMN_NAME = "name";
public static final String CALLS_COLUMN_TIME = "time";
public static final String CALLS_COLUMN_TYPE = "type";
public int numRows;
ArrayList<String> array_list = new ArrayList<String>();
private HashMap hp;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table calls " +
"(id integer primary key, name text,time text, type text,archiveId text)"
);
}
【问题讨论】:
-
id integer primary key- 您的id列名没有前导下划线。BaseColumns._ID确实如此。要么修复您的查询,要么修复CREATE TABLE语句。 -
@user7176550 这个问题不是针对最后一条记录,而是针对最后一个
id值。
标签: android sqlite android-sqlite