Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Java 如何仅在值不存在时将数据插入SQLite数据库?_Java_Android_Database_Sqlite - Fatal编程技术网

Java 如何仅在值不存在时将数据插入SQLite数据库?

Java 如何仅在值不存在时将数据插入SQLite数据库?,java,android,database,sqlite,Java,Android,Database,Sqlite,仅当数据库为空时,我才想将vales插入数据库。如果为空,我想插入所有db.addQuestion。如果问题已经存在,我不想插入任何内容。 这是我将问题插入数据库的main活动中的代码: DBHandler db = new DBHandler(this); // Inserting Questions db.addQuestion(new Question("1. Question 1", 1)); db.addQuestion(new Question("2

仅当数据库为空时,我才想将vales插入数据库。如果为空,我想插入所有db.addQuestion。如果问题已经存在,我不想插入任何内容。 这是我将问题插入数据库的main活动中的代码:

    DBHandler db = new DBHandler(this);

    // Inserting Questions
    db.addQuestion(new Question("1. Question 1", 1));
    db.addQuestion(new Question("2. Question 2", 2));
    db.addQuestion(new Question("3. Question 3", 3));
    db.addQuestion(new Question("4. Question 4", 4));
    db.addQuestion(new Question("5. Question 5", 5));

    // Reading all Questions
    List<Question> questions = db.getAllQuestions();
这是DBHandler中的代码,我在其中创建表,添加新问题并获取所有问题

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTIONS + "("
            + KEY_QUESTION_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_QUESTION + " TEXT, "
            + KEY_ORDER_NO + " INTEGER " + ")";
    db.execSQL(CREATE_QUESTIONS_TABLE);
}

// Adding New Question
void addQuestion(Question question) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_QUESTION, question.getQuestion());
    values.put(KEY_ORDER_NO, question.getorderNo());

    db.insert(TABLE_QUESTIONS, null, values);
    db.close();
}

// Getting All Questions
public List<Question> getAllQuestions() {
    List<Question> questionList = new ArrayList<Question>();
    String selectQuery = "SELECT  * FROM " + TABLE_QUESTIONS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // Looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Question question = new Question();
            question.setID(Integer.parseInt(cursor.getString(0)));
            question.setQuestion(cursor.getString(1));
            question.setorderNo(Integer.parseInt(cursor.getString(2)));
            // Adding Questions to List
            questionList.add(question);
        } while (cursor.moveToNext());
    }
    return questionList;
}

如果我有两张或更多的桌子呢?谢谢

使值唯一,然后在插入过程中检查数据库值是否已存在。 像这样:

检查方法:

public boolean dataExists(int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        String Query = "SELECT * FROM " + TABLE_NAME + " WHERE " + KEY_QUESION_ID + "=" + id;
        Cursor cursor = db.rawQuery(Query, null);
        if (cursor.getCount() <= 0) {
            cursor.close();
            return false;
        }
        cursor.close();
        return true;
    }

这就是我想做的。非常感谢。但请向我解释一下,rate.getQuestionId中的速率是多少。我得到一个错误:无法解析符号“rate”哦,很抱歉,这是我的案例,它是模型类的对象。在你的例子中,问题类的dude应该是“问题”。现在看来getQuestionId没有被识别。你能用正确的行编辑答案吗?这是一个例子,伙计,你可以为问题类的每个元素做一个getter和setter。修正你唯一的领域,然后像这样做。我只是想举个例子,这就是我写这篇文章的原因。
void addQuestion(Question question) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_QUESTION, question.getQuestion());
    values.put(KEY_ORDER_NO, question.getorderNo());
  if (dataExists(question.getQuestionId())) {
            db.update(TABLE_QUESTION, values, KEY_QUESTION_ID + "=" + question.getQuestionId(), null);
        } else {
            db.insert(TABLE_QUESTOIN, null, values);
            db.close();
        }
}