2013-01-17 57 views
-3

我已經在安卓中創建應用程序,我執行CRUD操作。在應用程序數據庫文件已成功創建,但創建表時出錯,以下是Logcat錯誤和數據庫適配器類。安卓:SQLite中創建表中的錯誤?

logcat的錯誤

01-17 13:03:59.139: E/SQLiteLog(1036): (1) table timerecordsnew1 has no column named note 
01-17 13:03:59.309: E/SQLiteDatabase(1036): Error inserting note=asdfsdfadf 
01-17 13:03:59.309: E/SQLiteDatabase(1036): android.database.sqlite.SQLiteException: table timerecordsnew1 has no column named note (code 1): , while compiling: INSERT INTO timerecordsnew1(note) VALUES (?) 
01-17 13:03:59.309: E/SQLiteDatabase(1036):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 

以下是我數據庫適配器類

public class TimeTrackerAdapter { 

    private static final int DATABASE_VERSION = 4; 
    private static final String DATABASE_NAME = "timetrackernew1.db"; 
    //Table 
    private static final String TABLE_NAME = "timerecordsnew1"; 

    //Table Column Variable 
    public static final String TIMERECORDS_COLUMN_ID = "id"; 
    public static final String TIMERECORDS_COLUMN_TIME = "time"; 
    public static final String TIMERECORDS_COLUMN_NOTE = "note"; 

    private TimeTrackerOpenHelper openHelper; 
    private SQLiteDatabase sqlDb; 

    //Database creation sql statement 
    private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + 
      TABLE_NAME + "(" + TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      TIMERECORDS_COLUMN_TIME + " TEXT " + TIMERECORDS_COLUMN_NOTE + " TEXT);"; 

    public TimeTrackerAdapter(Context context) { 
     openHelper = new TimeTrackerOpenHelper(context); 
     sqlDb = openHelper.getWritableDatabase(); 
    } 

    //to insert data into database 
    public void saveRecords(String t, String n) { 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(TIMERECORDS_COLUMN_NOTE,t); 
     contentValues.put(TIMERECORDS_COLUMN_NOTE, n); 

     sqlDb.insert(TABLE_NAME, null, contentValues); 
    } 
    //get fetch the all data 
    public Cursor getAllRecords() { 

     return sqlDb.rawQuery("select * from " + TABLE_NAME, null); 

    } 

    // inner class 
    private class TimeTrackerOpenHelper extends SQLiteOpenHelper { 

     public TimeTrackerOpenHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 

     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      System.out.println("create statement"+SQL_CREATE_ENTRIES); 
      try 
      { 
       db.execSQL(SQL_CREATE_ENTRIES); 

      }catch(SQLiteException sql) 
      { 
       sql.printStackTrace(); 
      } 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
      onCreate(db); 
     } 
    } 

} 

請人幫我解決這個錯誤。

感謝你

回答

1

你錯過了兩列之間在SQL逗號:

private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + 
     TABLE_NAME + "(" + TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     TIMERECORDS_COLUMN_TIME + " TEXT **,%Comma goes here%** " + TIMERECORDS_COLUMN_NOTE + " TEXT);"; 
0

TIMERECORDS_COLUMN_TIME + " TEXT " == TIMERECORDS_COLUMN_TIME + " TEXT, "

你忘了 「」 字符。

下一次讀異常,並通過你的代碼更精確的樣子。

0

看起來像你錯過了在create table DDL逗號。 (上TIMERECORDS_COLUMN_TIME列..

來自:

private static final String SQL_CREATE_ENTRIES = 
     "CREATE TABLE " + TABLE_NAME + "(" + 
      TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      TIMERECORDS_COLUMN_TIME + " TEXT " + 
      TIMERECORDS_COLUMN_NOTE + " TEXT);"; 

private static final String SQL_CREATE_ENTRIES = 
     "CREATE TABLE " + TABLE_NAME + "(" + 
      TIMERECORDS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      TIMERECORDS_COLUMN_TIME + " TEXT, " + 
      TIMERECORDS_COLUMN_NOTE + " TEXT);"; 
0

這裏:

 TIMERECORDS_COLUMN_TIME + " TEXT " + TIMERECORDS_COLUMN_NOTE + " TEXT);"; 

你拿 「時間文本註釋文本」 沒有逗號將它們分開。

SQLite不檢測到它作爲一個語法錯誤:它開始作爲「無類型」的數據庫,然後添加型親和力支持,但繼續允許所有類型的垃圾列類型規範。