2013-05-04 42 views
1

我爲Android Phone創建了一個電子郵件客戶端,現在我想將電子郵件保存在SQLite數據庫中。但是,如果我想用測試數據僅填充數據庫,我這個錯誤:Android SQL databse創建時出錯

E/SQLiteLog(21212): (1) near "TO": syntax error

E/SQLiteDatabase(21212): Error inserting SUBJECT=test subject TO=emailadress2 FROM=emailadress1 CONTENT=test content

android.database.sqlite.SQLiteException: near "TO": syntax error (code 1): , while compiling: INSERT INTO MAIL(SUBJECT,TO,FROM,CONTENT) VALUES (?,?,?,?)

(...)

(1) near "FROM": syntax error

E/Error(21212): android.database.sqlite.SQLiteException: near "FROM": syntax error (code 1): , while compiling: SELECT ID, FROM, TO, SUBJECT, CONTENT FROM MAIL WHERE ID = -1

我用下面的代碼數據庫:

MAINACTIVITY.java

public void dbCreate(View view){ 
    String from = "emailadress1"; 
    String to = "emailadress2"; 
    String subject = "test subject"; 
    String content = "test content"; 

    try { 
     datasource.open(); 
     datasource.createEntry(from, to, subject, content); 
     datasource.close(); 
     } 
     catch (Exception ex) { 
      Toast.makeText(this,"Error", Toast.LENGTH_LONG).show(); 
      Log.e("Error", ex.toString()); 
      } 
} 

MYSQLiteHelper.java

private static final String DATABASE_NAME = "mail.db"; 
private static final int DATABASE_VERSION = 1; 


private static final String TABLE_CREATE_MAIL = "CREATE TABLE MAILS ( ID integer PRIMARY KEY AUTOINCREMENT, FROM TEXT, TO TEXT, SUBJECT TEXT, CONTENT TEXT);"; 



public MySQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase database) { 
    Log.i("Info", "OnCreate aufgerufen"); 
    database.execSQL(TABLE_CREATE_MAIL); 

} 

DATASOURCE.java

private SQLiteDatabase database; 
private MySQLiteHelper dbHelper; 
private String[] allColumns = { "ID", "FROM", 
     "TO", "SUBJECT", "CONTENT"}; 
public Entry createEntry(String from, String to, String subject, String content) { 
    ContentValues values = new ContentValues(); 
    values.put("FROM", from); 
    values.put("TO", to); 
    values.put("SUBJECT", subject); 
    values.put("CONTENT", content); 

    long insertId = database.insert("MAIL", null, 
      values); 


    Cursor cursor = database.query("MAIL",allColumns, "ID = " + insertId, null, null, null, null, null); 
    cursor.moveToFirst(); 

    return cursorToEntry(cursor); 
} 
+0

你的表名是MAILS插入數據時,但你插入MAIL也可能是一個問題 – vinoth 2013-05-04 11:31:27

回答

2

TOFROMreserved word for SQLLite

請嘗試:

INSERT INTO MAIL(SUBJECT,`TO`,`FROM`,CONTENT) VALUES (?,?,?,?) 

如果您不想執行任意的SQL命令,則可以將列重命名爲TO_FROM_

你可以試着說出來了,如:

... 
private String[] allColumns = { "ID", "`FROM`", "`TO`", "SUBJECT", "CONTENT"}; 
... 
cv.put("`FROM`", from); 
cv.put("`TO`", to); 
... 

此外:由vinoth評論,你的表名必須糾正(MAIL或MAILS)

0

FROMTOkeywordsSQL,所以你應該改變你的列名。

SQL標準指定了可以不使用如表,索引,列,數據庫,用戶定義的函數,歸類,虛擬表的模塊,或任何其他命名對象

的名稱的關鍵字的數量龐大

See this

0

沒有創建數據庫時,自動增量.. 並嘗試將此代碼數據庫

public long creatEntry(Srting id, String from, 
    String to,String subject, String content) { 
// TODO Auto-generated method stub 
ContentValues cv = new ContentValues(); //ContentValues kima el bundle 
cv.put("ID", id); 
cv.put("FROM", from); 
    cv.put("TO", to); 
    cv.put("SUBJECT", subject); 
    cv.put("CONTENT", content); 

return ourDatabase.insert(DATABASE_TABLE, null, cv); 
}