问题
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