SQLiteException near “null”: syntax error: , while compiling: INSERT OR REPLACE INTO

独自空忆成欢 提交于 2020-01-25 03:46:06

问题


I am trying to configure a simple DbHelper, and getting an error while executing.

The error is:

 SQLiteException near "null": syntax error: , while compiling: INSERT OR REPLACE INTO

I cannot figure out what is the problem?

The DbHelper class is:

    package com.sqlite.test1;

    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;

    public class DbHelper extends SQLiteOpenHelper{


    public static final int DB_VERSION = 1;
    public static final String DB_NAME = "time_storage";
    public static final String DB_TABLE = "timer_data";

    public static final String C_ID = "iderty_id";
    public static final String C_DATE = "date";
      Context context;

    public DbHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table if not exists " + DB_TABLE + " (" + C_ID + "integer primary key autoincrement, " 
                    + C_DATE + " text not null );");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
        this.onCreate(db);      
    }}

The main class is:

package com.sqlite.test1;

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class SQlite_test1Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DbHelper dbHelper = new DbHelper(SQlite_test1Activity.this);
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    String variable1 = "this is the first text to database";
    ContentValues values = new ContentValues();
    db.insertWithOnConflict(DbHelper.DB_TABLE, null, values,
            SQLiteDatabase.CONFLICT_REPLACE);
    values.put(DbHelper.C_DATE, variable1);

    db.close();
    dbHelper.close();

}}

回答1:


You need to put in the values before you do the insert, not after, otherwise you're not inserting anything. Change this:

ContentValues values = new ContentValues();
db.insertWithOnConflict(DbHelper.DB_TABLE, null, values,
        SQLiteDatabase.CONFLICT_REPLACE);
values.put(DbHelper.C_DATE, variable1);

to this:

ContentValues values = new ContentValues();
values.put(DbHelper.C_DATE, variable1);
db.insertWithOnConflict(DbHelper.DB_TABLE, null, values,
        SQLiteDatabase.CONFLICT_REPLACE);

EDIT

Found another issue:

db.execSQL("create table if not exists " + DB_TABLE + " (" + C_ID + "integer primary key autoincrement, " + C_DATE + " text not null );");

The above code is creating a primary key called iderty_idinteger. It should be like this:

db.execSQL("create table if not exists " + DB_TABLE + " (" + C_ID + " integer primary key autoincrement, " + C_DATE + " text not null );");

Note the space inserted before integer primary...



来源:https://stackoverflow.com/questions/10369986/sqliteexception-near-null-syntax-error-while-compiling-insert-or-replace

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!