错误插入SQLite数据库

问题描述:

我得到错误插入的sqlite DATABSE我不知道WATS了怎么把其他表具有相同的configuratio,他们似乎除了这一个是工作的罚款:错误插入SQLite数据库

package com.messageHider; 

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

public class dbConnection extends SQLiteOpenHelper{ 
    private static final int DB_VERSION=1; 
    private static final String DB_NAME="smshider"; 
    //sms table 
    public static final String TABLE_SMS="sms"; 
    public static final String S_ID=BaseColumns._ID; 
    public static final String MESSAGE="messages"; 
    public static final String SENDER="sender"; 
    public static final String TYPE="type"; 
    public static final String DATE="date"; 
    //This table is used to hide SMS's using the smsReceiver 
    public static final String TABLE_CONTACTS="contacts"; 
    public static final String C_ID=BaseColumns._ID; 
    public static final String CONTACT="contact_number"; 
    public static final String CONTACT_NAME="contact_name"; 
    //Hidden Videos table 
    public static final String TABLE_VIDEOS="videos"; 
    public static final String V_ID=BaseColumns._ID; 
    public static final String VIDEO_TITLE="video_title"; 
    //Hidden Images table 
    public static final String TABLE_IMAGES="images"; 
    public static final String I_ID=BaseColumns._ID; 
    public static final String IMAGE_NAME="image_name"; 
    //Call Log table 
    public static final String TABLE_CALLOG="mycallog"; 
    public static final String CALL_ID=BaseColumns._ID; 
    public static final String CALL_NAME="call_name"; 
    public static final String CALL_NUMBER="call_number"; 
    public static final String CALL_TIME="call_time"; 
    public static final String CALL_TYPE="call_type"; 
    public dbConnection(Context context) { 
     super(context, DB_NAME,null, DB_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String sql=String.format("create table %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT,%s TEXT,%s TEXT,%s TEXT)",TABLE_SMS,S_ID,MESSAGE,SENDER,TYPE,DATE); 
     String sql2=String.format("create table %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT,%s TEXT)",TABLE_CONTACTS,C_ID,CONTACT,CONTACT_NAME); 
     String sql3=String.format("create table %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT)",TABLE_VIDEOS,V_ID,VIDEO_TITLE); 
     String sql4=String.format("create table %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT)",TABLE_IMAGES,I_ID,IMAGE_NAME); 
     String sql5=String.format("create table %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT,%s TEXT,%s TEXT,%s TEXT)",TABLE_CALLOG,CALL_ID,CALL_NAME,CALL_NUMBER,CALL_TYPE,CALL_TIME); 
     db.execSQL(sql); 
     db.execSQL(sql2); 
     db.execSQL(sql3); 
     db.execSQL(sql4); 
     db.execSQL(sql5); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

} 

的问题是插入到第5 tablei.e mycallog 这里是插入代码:

String time=cursorCallLog.getString(cursorCallLog.getColumnIndex(CallLog.Calls.DATE)); 
       String name=cursorCallLog.getString(cursorCallLog.getColumnIndex(CallLog.Calls.CACHED_NAME)); 
       String type=cursorCallLog.getString(cursorCallLog.getColumnIndex(CallLog.Calls.TYPE)); 
       Log.d("COUNT", number+" "+type+" "+time+" "+name); 
       SQLiteDatabase write_db=connection.getWritableDatabase(); 
       ContentValues values=new ContentValues(); 
       Date date=new Date(Long.parseLong(time)); 
       java.text.DateFormat format=android.text.format.DateFormat.getDateFormat(getApplicationContext()); 
       String date_sent=format.format(date); 
       values.put(number, dbConnection.CALL_NUMBER); 
       values.put(name, dbConnection.CALL_NAME); 
       values.put(date_sent, dbConnection.CALL_TIME); 
       values.put(type, dbConnection.CALL_TYPE); 
       write_db.insert(dbConnection.TABLE_CALLOG, null, values); 

这里是logcat的:

07-05 09:12:10.765: ERROR/Database(4754): Error inserting 3=call_type 7/5/2011=call_time John Kulova=call_name 0704678505=call_number 
07-05 09:12:10.765: ERROR/Database(4754): android.database.sqlite.SQLiteException: near "3": syntax error: , while compiling: INSERT INTO mycallog(3, 7/5/2011, John Kulova, 0704678505) VALUES(?, ?, ?, ?); 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410) 
07-05 09:12:10.765: ERROR/Database(4754):  at com.messageHider.CallMonitorService$callLogObserver.onChange(CallMonitorService.java:72) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.ContentObserver.dispatchChange(ContentObserver.java:133) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.ContentObserver$Transport.onChange(ContentObserver.java:65) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.database.IContentObserver$Stub.onTransact(IContentObserver.java:53) 
07-05 09:12:10.765: ERROR/Database(4754):  at android.os.Binder.execTransact(Binder.java:288) 
07-05 09:12:10.765: ERROR/Database(4754):  at dalvik.system.NativeStart.run(Native Method) 

看来你values.put()是向后(即值/键而不是键/值)。

+1

Thanx我觉得我需要一些睡眠! – John

更改如下行:

values.put(number, dbConnection.CALL_NUMBER); 
values.put(name, dbConnection.CALL_NAME); 
values.put(date_sent, dbConnection.CALL_TIME); 
values.put(type, dbConnection.CALL_TYPE); 

像这样:

values.put(dbConnection.CALL_NUMBER, number); 
values.put(dbConnection.CALL_NAME, name); 
values.put(dbConnection.CALL_TIME, date_sent); 
values.put(dbConnection.CALL_TYPE, type);