2012-04-29 90 views
1

我试图配置一个简单的DbHelper,并在执行时出错。SQLiteException接近“null”:语法错误:,编译时:,INSERT或REPLACE INTO

的错误是:

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

我想不出有什么问题?

的DbHelper类是:

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

的主类是:

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

}} 

回答

2

你需要把这些值你做的插入,不是前后,否则你不插入任何东西。更改此:

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

这样:

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

编辑

发现了另外一个问题:

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

上面的代码创建一个名为iderty_idinteger主键。它应该是这样的:

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

integer primary之前插入的空间...

+0

什么是logcat的说? – Barak 2012-04-29 13:00:39

+1

非常感谢! – Dori 2012-04-29 14:41:09

相关问题