【发布时间】:2013-12-29 06:04:11
【问题描述】:
我编写了这个简单的 Activity 来测试 Android 上的 SQLite 数据库的写入和读取。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DatabaseHelper db = new DatabaseHelper(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context) {
super(context, "TestDatabase", null, 3);
getWritableDatabase().rawQuery("INSERT INTO TestTable VALUES ('Apple')", null);
Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM TestTable", null);
Log.d("trace", String.valueOf(cursor.moveToFirst()));
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE TestTable (value text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS TestTable");
onCreate(db);
}
}
}
它的核心是在 DatabaseHelper 构造函数中,我在其中向 TestTable 写入一个值,尝试在游标中取回它,然后记录 cursor.moveToFirst() 的值(如果只有 false光标为空)。这是false。怎么回事?
【问题讨论】:
-
不要在构造函数中做这样的事情。声明一种写入数据的方法和另一种读取数据的方法。
-
@ramaral 这只是一个测试程序。还是有其他原因?
-
我可以通过使用 .insert 而不是 .rawQuery 来编写它,但我不知道为什么 .rawQuery 不起作用。
-
“但我不知道为什么 .rawQuery 不起作用。” 因为它是一种执行查询而不是执行其他 SQL 操作(例如插入、删除等)的方法等) - 名称有点泄露它。
-
可以使用
execSQL()执行非查询语句。
标签: android sqlite android-sqlite