2012-04-25 93 views
1

我不确定使用我的简单程序学习如何使用SQLite数据库。我将我的程序从this site上找到的程序中删除。我决定删除使用变量的问题,并将所有内容写入我的Create table字符串中。我也试图用相应的KEY_CONTENT等来做到这一点无济于事。希望这是足够的代码让你看到什么是错的。另外,有没有我可以编写的任何代码(日志或吐司输出),这将有助于弄清楚什么是错误的?Android SQLite数据库:麻烦创建表格并插入

public class SQLiteAdapter { 

public static final String DB_NAME = "My_Database"; 
public static final String DB_TABLE = "My_Table"; 
public static final int DB_VERSION = 1; 
public static final String KEY_CONTENT = "My_Content"; 


String SCRIPT_CREATE_DATABASE = "CREATE TABLE My_Table (_id INTEGER PRIMARY KEY AUTOINCREMENT, My_Content TEXT);"; 

private SQLiteHelper sqLiteHelper; 
private SQLiteDatabase sqLiteDatabase; 

private Context context; 

public SQLiteAdapter(Context c){ 
    context = c; 
} 
public SQLiteAdapter openToRead() throws android.database.SQLException { 
     sqLiteHelper = new SQLiteHelper(context, DB_NAME, null, DB_VERSION); 
     sqLiteDatabase = sqLiteHelper.getReadableDatabase(); 
     return this; 
    } 
public SQLiteAdapter openToWrite() throws android.database.SQLException { 
     sqLiteHelper = new SQLiteHelper(context, DB_NAME, null, DB_VERSION); 
     sqLiteDatabase = sqLiteHelper.getWritableDatabase(); 
     return this; 
    } 

public void close(){ 
     sqLiteHelper.close(); 
    } 

public long insert(String content){ 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put("My_Content", content); 
     return sqLiteDatabase.insert("My_Table", null, contentValues); 
    } 
public int deleteAll(){ 
     return sqLiteDatabase.delete(DB_TABLE, null, null); 
    } 

    public String queueAll(){ 
     String[] columns = new String[]{KEY_CONTENT}; 
     Cursor cursor = sqLiteDatabase.query(DB_TABLE, columns, 
     null, null, null, null, null); 
     String result = ""; 

     int index_CONTENT = cursor.getColumnIndex(KEY_CONTENT); 
     for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){ 
     result = result + cursor.getString(index_CONTENT) + "\n"; 
     } 

     return result; 
    } 

    public class SQLiteHelper extends SQLiteOpenHelper { 

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

     @Override 
     public void onCreate(SQLiteDatabase db) { 

     db.execSQL(SCRIPT_CREATE_DATABASE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

     } 

    } 

}

我的主要活动开始处理SQLite的DB这样的:

mySQLiteAdapter = new SQLiteAdapter(this); 
     mySQLiteAdapter.openToWrite(); 
     mySQLiteAdapter.insert("First try"); 

这里是logcat的:

04-25 14:19:37.404: E/Database(217): Error inserting My_Content=First try 
04-25 14:19:37.404: E/Database(217): android.database.sqlite.SQLiteException: no such table: My_Table: , while compiling: INSERT INTO My_Table(My_Content) VALUES(?); 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteProgram.native_compile(Native Method) 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110) 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59) 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41) 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1027) 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1413) 
04-25 14:19:37.404: E/Database(217): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1286) 
04-25 14:19:37.404: E/Database(217): at com.willmer.trialsqlite.SQLiteAdapter.insert(SQLiteAdapter.java:53) 
04-25 14:19:37.404: E/Database(217): at com.willmer.trialsqlite.TrialSQLiteActivity.onCreate(TrialSQLiteActivity.java:25) 
04-25 14:19:37.404: E/Database(217): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-25 14:19:37.404: E/Database(217): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
04-25 14:19:37.404: E/Database(217): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
04-25 14:19:37.404: E/Database(217): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
04-25 14:19:37.404: E/Database(217): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
04-25 14:19:37.404: E/Database(217): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-25 14:19:37.404: E/Database(217): at android.os.Looper.loop(Looper.java:123) 
04-25 14:19:37.404: E/Database(217): at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-25 14:19:37.404: E/Database(217): at java.lang.reflect.Method.invokeNative(Native Method) 
04-25 14:19:37.404: E/Database(217): at java.lang.reflect.Method.invoke(Method.java:521) 
04-25 14:19:37.404: E/Database(217): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-25 14:19:37.404: E/Database(217): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-25 14:19:37.404: E/Database(217): at dalvik.system.NativeStart.main(Native Method) 
+1

我建议你不要调用任何数据库表'表' - 这是一个保留字。 – GregHNZ 2012-04-25 05:04:21

回答

1

将您的代码替换为以下代码。 因为Table本身是一个关键字。

String SCRIPT_CREATE_DATABASE = "CREATE TABLE My_Table (_id INTEGER PRIMARY KEY AUTOINCREMENT, My_Content TEXT);"; 
0

你必须给间距“表格”,“(”和“值”,“(”。

like below

INSERT INTO Table (Content) VALUES (?); 
+0

我有点困惑。如何在使用sqLiteDatabase.insert(“Table”,null,contentValues)时添加空格;即使我将所有Table和Content的内容更改为My_Table和My_Content,也是如此。 – willmer 2012-04-25 05:17:22