[英]Insert in sqlite doesn't work
我试图进行插入调用以在sqlite代码中将行添加到我的表中,每次插入返回1,并且在我插入行之后,我还要检查该行是否已插入并且找不到。
这是我的代码:
创建表:
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
// create table artists
String createTableStatement1 = "CREATE TABLE " + TABLE_ARTISTS +" ("+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "
+ KEY_ARTIST_NAME + " TEXT UNIQUE , " + KEY_ARTIST_IMAGE + " BLOB, " + KEY_ARTIST_JSON + " TEXT, "
+ KEY_ARTIST_DATE + " DATETIME DEFAULT (datetime('now')), " + KEY_ARTIST_FLAG + " INTEGER NOT NULL DEFAULT 1);";
db.execSQL(createTableStatement1);
//creat table users
String createTableStatement2 = "CREATE TABLE "+ TABLE_USERS + " ("+ KEY_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, "
+ KEY_PROFILE_ID + " TEXT UNIQUE, " + KEY_PROFILE_JSON + " TEXT, "+ KEY_PROFILE_IMAGE + " BLOB, " + KEY_PROFILE_FLAG
+ " INTEGER NOT NULL);";
db.execSQL(createTableStatement2);
}
升级表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ARTISTS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
// Create tables again
onCreate(db);
}
插入用户行
public void insertUserToDB(User user)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_PROFILE_FLAG, user.getProfile_flag());
values.put(KEY_PROFILE_IMAGE, user.getProfileImageByteArray());
values.put(KEY_PROFILE_JSON, user.getProfile_json());
values.put(KEY_PROFILE_ID, user.getProfile_id());
db.beginTransaction();
long result = db.insertOrThrow(TABLE_USERS, null, values);
db.endTransaction();
db.close();
}
检查数据库中的用户
public boolean isUserInDB(String profileID)
{
SQLiteDatabase db = this.getReadableDatabase();
db.beginTransaction();
String sqlStatement = "SELECT * FROM "+ TABLE_USERS +" WHERE " + TABLE_USERS + "."+ KEY_PROFILE_ID +
"=" + "\""+ profileID + "\"";
Cursor cursor = db.rawQuery(sqlStatement, null);
boolean exists = ((cursor.getCount())!=0);
cursor.close();
db.endTransaction();
db.close();
return exists;
}
有任何想法吗?
您需要调用setTransactionSuccessful()
以使endTransaction()
应用您的更改。
db.beginTransaction();
try {
...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
db.setTransactionSuccessful();
方法是最重要的部分,因为它可以确认整个交易的保存。 没有此调用,您的数据库将不会更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.