2012-10-29 68 views
0

嗨,大家好,我正在构建一个应用程序,可以在接到呼叫时保存位置。不幸的是,我有一个SQL错误,但我不明白我的错误在哪里。代码是这样的:Android SQLITE语句

文件storybookdynamicimport.java

public void CaptureCall() { 

    // Declare a telephony manager 
    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
    // Declare a phoneStateListener 
    PhoneStateListener mPhoneListener; 
    // Switching trough various cases 
    mPhoneListener = new PhoneStateListener() { 
     public void onCallStateChanged(int state, String incomingNumber) { 
      String phonenumber=null; 
      String currentDate; 
      String Loc; 
      ContentValues cv = new ContentValues(); 
      try { 
       switch (state) { 
       case TelephonyManager.CALL_STATE_RINGING: 
        Log.v(StorybookContentProvider.TAG_LOG, 
          "sei in chiamata"); 

        phonenumber= findNameByAddress(StorybookDynamicImport.this, incomingNumber); 
        currentDate = formatDate(System.currentTimeMillis()); 

        // Sending a statusbar Notification 
        CallNotification = notificationBuilder("StoryBook", 
          "Ho salvato l'evento chiamata!", null); 
        NotificationManager.notify(1, CallNotification); 

        // Getting the position 
        LocationManager.requestSingleUpdate(criteria, 
          locationListener, looper); 
        Location location = LocationManager 
          .getLastKnownLocation(provider); 
        Loc=GetAddressLocation(location); 

        cv.put(StorybookContentProvider.CONTACT, phonenumber); 
        Log.v(StorybookContentProvider.TAG_LOG, "Salvando" + phonenumber); 
        cv.put(StorybookContentProvider.DATE, currentDate); 
        Log.v(StorybookContentProvider.TAG_LOG, "Data" + currentDate); 
        cv.put(StorybookContentProvider.EVENT_TYPE, "Chiamata"); 


        cv.put(StorybookContentProvider.WHERE, "cazzi miei!"); 
        Log.v(StorybookContentProvider.TAG_LOG, "DOVE" + Loc); 
        getContentResolver().insert(StorybookContentProvider.CONTENT_URI, cv); 



        break; 
       } 
      } catch (Exception e) { 
       // TODO: handle exception 
      } 
     } 
    }; 

    // Setting listener 
    tm.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
} 



private String formatDate(long date) { 

    Date realdate = new Date(date); 
    DateFormat df = new DateFormat(); 
    String format = (String) df.format("dd/MM/yyyy", realdate); 
    //Log.v(StorybookContentProvider.TAG_LOG, "data della chiamata" + format); 

    return format; 
} 

private String findNameByAddress(Context ct, String addr) { 
    Uri myPerson = Uri.withAppendedPath(
      ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, 
      Uri.encode(addr)); 
    String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME }; 
    Cursor cursor = ct.getContentResolver().query(myPerson, projection, 
      null, null, null); 

    if (cursor.moveToFirst()) { 
     String name = cursor 
       .getString(cursor 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     Log.e("", "Found contact name"); 
     cursor.close(); 

     return name; 
    } 

    cursor.close(); 
    Log.e("", "Not Found contact name"); 

    return addr; 
} 

文件storybookcontentprovider.java

public class MySQLiteOpenHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "Storybook.db"; 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_TABLE_CONTACT = "contact_data"; 


    public MySQLiteOpenHelper(Context context, String name, 
      CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    // SQL statement to create a new database. 
    /* 
    * private static final String DATABASE_CREATE = "create table " + 
    * DATABASE_TABLE + " (" + KEY_ID + 
    * " integer primary key autoincrement, " + CONTACT + " text not null, " 
    * + CONTACT_ID + "text" + EVENT_TYPE + "text);"; 
    */ 

    // Called when no database exists in disk and the helper class needs 
    // to create a new one. 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     StringBuilder createQuery = new StringBuilder(); 
     createQuery.append("CREATE TABLE \"" + DATABASE_TABLE_CONTACT + "\" ("); 
     createQuery.append("  \"" + KEY_ID + "\" INTEGER PRIMARY KEY AUTOINCREMENT,"); 
     createQuery.append("  \"" + CONTACT + "\" TEXT,"); 
     createQuery.append("  \"" + EVENT_TYPE + "\" TEXT,"); 
     createQuery.append("  \"" + URI + "\" TEXT,"); 
     createQuery.append("  \"" + DATE + "\" DATE,"); 
     createQuery.append("  \"" + WHERE + "\" TEXT"); 
     createQuery.append(")"); 

     db.execSQL(createQuery.toString()); 

     Log.v(TAG_LOG, "database succesfully created"); 
    } 


@Override 
public Uri insert(Uri uri, ContentValues values) { 
    // Open a read/write database to support the transaction. 
    SQLiteDatabase db = myOpenHelper.getWritableDatabase(); 

    // To add empty rows to your database by passing in an empty Content 
    // Values 
    // object, you must use the null column hack parameter to specify the 
    // name of 
    // the column that can be set to null. 
    String nullColumnHack = null; 

    // Insert the values into the table 
    long id = db.insert(MySQLiteOpenHelper.DATABASE_TABLE_CONTACT, nullColumnHack, 
      values); 

    if (id > -1) { 
     // Construct and return the URI of the newly inserted row. 
     Uri insertedId = ContentUris.withAppendedId(CONTENT_URI, id); 

     // Notify any observers of the change in the data set. 
     getContext().getContentResolver().notifyChange(insertedId, null); 

     return insertedId; 
    } else 
     return null; 
} 

我有这样的错误:

10-29 10:51:00.128: I/SqliteDatabaseCpp(896): sqlite returned: error code = 1, msg = near "where": syntax error, db=/data/data/com.paki.storybook/databases/Storybook.db 
10-29 10:51:02.658: E/SQLiteDatabase(896): Error inserting where=cazzi miei! date=29/10/2012 contact=Pasquale Lodise event_type=Chiamata 
10-29 10:51:02.658: E/SQLiteDatabase(896): android.database.sqlite.SQLiteException: near "where": syntax error: , while compiling: INSERT INTO contact_data(where,date,contact,event_type) VALUES (?,?,?,?) 
10-29 10:51:02.658: E/SQLiteDatabase(896): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 

回答

4

where是一个SQL保留字。打电话给你的领域别的。

+0

感谢它帮助:) – user1377034