Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio Sqlite don';如果值已存在,则不能在数据库中插入_Android_Sqlite - Fatal编程技术网

Android Studio Sqlite don';如果值已存在,则不能在数据库中插入

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",

也许这个问题是重复的,但我找不到与我的代码类似的答案

我想在插入之前检查数据库值

如果值为exist,我想跳过并继续下一次插入

这是我的插页

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);
    }