Android Phone 用のメール クライアントを作成しました。メールを SQLite データベースに保存したいと考えています。しかし、データベースにテスト データのみを入力したい場合は、次のエラーが発生します。
E/SQLiteLog(21212): (1) "TO" 付近: 構文エラー
E/SQLiteDatabase(21212): SUBJECT=test subject TO=emailadress2 FROM=emailadress1 CONTENT=test content の挿入中にエラーが発生しました
android.database.sqlite.SQLiteException: 「TO」付近: 構文エラー (コード 1): 、コンパイル中: INSERT INTO MAIL(SUBJECT,TO,FROM,CONTENT) VALUES (?,?,?,?)
(...)
(1) "FROM" 付近: 構文エラー
E/Error(21212): android.database.sqlite.SQLiteException: near "FROM": 構文エラー (コード 1): 、コンパイル中: 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);
}