Android Studio Sqlite don';如果值已存在,则不能在数据库中插入
也许这个问题是重复的,但我找不到与我的代码类似的答案 我想在插入之前检查数据库值 如果值为exist,我想跳过并继续下一次插入 这是我的插页Android Studio Sqlite don';如果值已存在,则不能在数据库中插入,android,sqlite,Android,Sqlite,也许这个问题是重复的,但我找不到与我的代码类似的答案 我想在插入之前检查数据库值 如果值为exist,我想跳过并继续下一次插入 这是我的插页 public void insertPlayer1Songlist() { createPlayer1("Song Title 1", "Artist 1", "Vol 1","","0","12341"); createPlayer1("Song Title 2", "Artist 2", "Vol 2","","0",
public void insertPlayer1Songlist() {
createPlayer1("Song Title 1", "Artist 1", "Vol 1","","0","12341");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","","0","12342");
createPlayer1("Song Title 3", "Artist 3", "Vol 3","","0","12343");
createPlayer1("Song Title 4", "Artist 4", "Vol 4","","0","12344");
createPlayer1("Song Title 5", "Artist 5", "Vol 5","","0","12345");
createPlayer1("Song Title 6", "Artist 6", "Vol 6","","0","12346");
createPlayer1("Song Title 7", "Artist 7", "Vol 7","","0","12347");
createPlayer1("Song Title 8", "Artist 8", "Vol 8","","0","12348");
createPlayer1("Song Title 9", "Artist 9", "Vol 9","","0","12349");
createPlayer1("Song Title 10", "Artist 10", "Vol 10","","0","12310");
createPlayer1("Song Title 11", "Artist 11", "Vol 11","","0","12311");
createPlayer1("Song Title 12", "Artist 12", "Vol 12","","0","12312");
}
在这里,我想检查这个值是否已经存在于数据库中
public long createPlayer1(String title,
String artist, String volume,
String type, String favorite, String number) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_ARTIST, artist);
initialValues.put(KEY_VOLUME, volume);
initialValues.put(KEY_TYPE, type);
initialValues.put(KEY_FAVORITE, favorite);
initialValues.put(KEY_NUMBER, number);
return mDb.insert(SQLITE_TABLE, null, initialValues);
}
我想检查数据库中是否已经有这个号码
如果是,我想跳过并继续此代码
return mDb.insert(SQLITE_TABLE, null, initialValues);
完整代码
package com.magicstarme.virtualsongbook;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
/**
* Created by Joe on 7/7/2016.
*/
public class FragmentOne_DbAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_TITLE = "title";
public static final String KEY_ARTIST = "artist";
public static final String KEY_VOLUME = "volume";
public static final String KEY_TYPE = "type";
public static final String KEY_FAVORITE = "favorite";
public static final String KEY_NUMBER = "number";
private static final String TAG = "FragmentOne_DbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_NAME = "Virtualsongbook";
private static final String SQLITE_TABLE = "Player1";
private static final int DATABASE_VERSION = 1;
private final Context mCtx;
private static final String DATABASE_CREATE =
"CREATE TABLE if not exists " + SQLITE_TABLE + " (" +
KEY_ROWID + " integer PRIMARY KEY autoincrement," +
KEY_TITLE + "," +
KEY_ARTIST + "," +
KEY_VOLUME + "," +
KEY_TYPE + "," +
KEY_FAVORITE + "," +
KEY_NUMBER + ")";
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.w(TAG, DATABASE_CREATE);
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE);
onCreate(db);
}
}
public FragmentOne_DbAdapter(Context ctx) {
this.mCtx = ctx;
}
public FragmentOne_DbAdapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
if (mDbHelper != null) {
mDbHelper.close();
}
}
private boolean isRecordExistInDatabase(String tableName, String field, String value) {
Cursor c = mDb.rawQuery("SELECT * FROM " + tableName + " WHERE " + field + "=" + value, null);
if (c.moveToFirst()) {
//Record exist
c.close();
return true;
}
//Record available
c.close();
return false;
}
public long createPlayer1(String title,
String artist, String volume,
String type, String favorite, String number) {
if(isRecordExistInDatabase(SQLITE_TABLE, KEY_NUMBER, number)){
return 0;
}
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_ARTIST, artist);
initialValues.put(KEY_VOLUME, volume);
initialValues.put(KEY_TYPE, type);
initialValues.put(KEY_FAVORITE, favorite);
initialValues.put(KEY_NUMBER, number);
return mDb.insert(SQLITE_TABLE, null, initialValues);
}
public boolean deleteAllPlayer1() {
int doneDelete = 0;
doneDelete = mDb.delete(SQLITE_TABLE, null , null);
Log.w(TAG, Integer.toString(doneDelete));
return doneDelete > 0;
}
public Cursor fetchPlayer1ByTitle(String titleText) throws SQLException {
Log.w(TAG, titleText);
Cursor mCursor = null;
if (titleText == null || titleText.length () == 0) {
mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_ARTIST, KEY_VOLUME, KEY_TYPE, KEY_FAVORITE, KEY_NUMBER},
null, null, null, null, null);
}
else {
mCursor = mDb.query(true, SQLITE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_ARTIST, KEY_VOLUME, KEY_TYPE, KEY_FAVORITE, KEY_NUMBER},
KEY_TITLE + " like '%" + titleText + "%'", null,
null, null, null, null);
}
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public Cursor fetchAllPlayer1() {
Cursor mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_ARTIST, KEY_VOLUME, KEY_TYPE, KEY_FAVORITE, KEY_NUMBER},
null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateItemFavorite(long rowId, String favorite) {
int doneUpdate = 0;
ContentValues values = new ContentValues();
values.put(KEY_FAVORITE, favorite);
//doneUpdate = mDb.update(SQLITE_TABLE, values, KEY_ROWID + " = ?", new String[] { String.valueOf(rowId) });
doneUpdate = mDb.update(SQLITE_TABLE, values, KEY_ROWID + "=" + rowId,null);
Log.w(TAG, Integer.toString(doneUpdate));
return doneUpdate > 0;
//return mDb.update(SQLITE_TABLE, values, KEY_ROWID+"="+rowId,null);
}
public void insertPlayer1Songlist() {
//TYPE
//0 - NONE
//1 - NEW
createPlayer1("Song Title 1", "Artist 1", "Vol 1","0","0","12341");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","0","0","12342");
createPlayer1("Song Title 3", "Artist 3", "Vol 3","0","0","12343");
createPlayer1("Song Title 4", "Artist 4", "Vol 4","0","0","12344");
createPlayer1("Song Title 5", "Artist 5", "Vol 5","0","0","12345");
createPlayer1("Song Title 6", "Artist 6", "Vol 6","0","0","12346");
createPlayer1("Song Title 7", "Artist 7", "Vol 7","0","0","12347");
createPlayer1("Song Title 8", "Artist 8", "Vol 8","0","0","12348");
createPlayer1("Song Title 9", "Artist 9", "Vol 9","0","0","12349");
createPlayer1("Song Title 10", "Artist 10", "Vol 10","0","0","12310");
createPlayer1("Song Title 11", "Artist 11", "Vol 11","0","0","12311");
createPlayer1("Song Title 12", "Artist 12", "Vol 12","0","0","12312");
/*createPlayer1("Song Title 1", "Artist 1", "Vol 1","0","0","12341");
createPlayer1("Song Title 1", "Artist 1", "Vol 1","0","0","12341");
createPlayer1("Song Title 1", "Artist 1", "Vol 1","0","0","12341");
createPlayer1("Song Title 1", "Artist 1", "Vol 1","0","0","12341");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","0","0","12342");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","0","0","12342");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","0","0","12342");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","0","0","12342");
createPlayer1("Song Title 2", "Artist 2", "Vol 2","0","0","12342");
createPlayer1("Song Title 12", "Artist 12", "Vol 12","0","0","12312");
createPlayer1("Song Title 12", "Artist 12", "Vol 12","0","0","12312");
createPlayer1("Song Title 12", "Artist 12", "Vol 12","0","0","12312");
createPlayer1("Song Title 12", "Artist 12", "Vol 12","0","0","10000");*/
}
}
请帮帮我
谢谢。您可以检查数据库中是否存在该编号,如下所示:
private boolean isRecordExistInDatabase(String tableName, String field, String value) {
String query = "SELECT * FROM " + tableName + " WHERE " + field + " = '" + value + "'";
Cursor c = db.rawQuery(query, null);
if (c.moveToFirst()) {
//Record exist
c.close();
return true;
}
//Record available
c.close();
return false;
}
public long createPlayer1(...){
// check if record exist in database by title number
if(isRecordExistInDatabase(SQLITE_TABLE, KEY_NUMBER, number)){
return 0;
}
// create record and insert to database normally
ContentValues initialValues = new ContentValues();
...
return mDb.insert(SQLITE_TABLE, null, initialValues);
}
public long createPlayer1(String title,
String artist, String volume,
String type, String favorite, String number) {
String query = "SELECT * FROM " + SQLITE_TABLE;
Cursor cursor = mDb.rawQuery(query, null);
int ColumeNumber = cursor.getColumnIndex("Number"); // your column title in the table
while (cursor.moveToNext()) {
String num = cursor.getString(ColumeNumber);
if(num.equals(number)) return -1; // has existed, so not insert and return now
}
cursor.close();
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_ARTIST, artist);
initialValues.put(KEY_VOLUME, volume);
initialValues.put(KEY_TYPE, type);
initialValues.put(KEY_FAVORITE, favorite);
initialValues.put(KEY_NUMBER, number);
return mDb.insert(SQLITE_TABLE, null, initialValues);
}
您只需打开数据库,并与数据库中已存在的每个值进行比较,以检查其是否存在。我理解逻辑,甚至尝试自己进行操作,但我没有找到正确的方法。谢谢..哪个值还在插入?我尝试创建Player1(“歌曲标题1”,“艺术家1”,“第一卷”,“0”,“12341”);请使用我的代码并尝试测试
createPlayer1(“歌曲标题1”、“艺术家1”、“第一卷”、“0”、“12341”);createPlayer1(“歌曲标题1”、“艺术家1”、“第一卷”、“0”、“12341”);createPlayer1(“歌曲标题1”、“艺术家1”、“第一卷”、“0”、“12341”);createPlayer1(“歌曲标题1”、“艺术家1”、“第一卷”、“0”、“12341”)代码>然后告诉我您的数据库中有多少条记录?让我们看看。它是否抛出错误?如果是,请在此处张贴您的StackTrace。但这段代码对我来说很有用,它可以读取表中的所有行。
public long createPlayer1(String title,
String artist, String volume,
String type, String favorite, String number) {
String query = "SELECT * FROM " + SQLITE_TABLE;
Cursor cursor = mDb.rawQuery(query, null);
int ColumeNumber = cursor.getColumnIndex("Number"); // your column title in the table
while (cursor.moveToNext()) {
String num = cursor.getString(ColumeNumber);
if(num.equals(number)) return -1; // has existed, so not insert and return now
}
cursor.close();
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_ARTIST, artist);
initialValues.put(KEY_VOLUME, volume);
initialValues.put(KEY_TYPE, type);
initialValues.put(KEY_FAVORITE, favorite);
initialValues.put(KEY_NUMBER, number);
return mDb.insert(SQLITE_TABLE, null, initialValues);
}