我认为我已经在Android上创建了一个sqllite数据库,但每次我尝试插入数据时,它都会提示某个列不存在。 我该如何查看数据库架构,并且onCreate方法会在创建对象时被调用吗?
你可以通过编写代码来完成这个任务。Sqlite 有一张名为 "sqlite_master" 的表,保存了数据库架构信息。
/**
* Get all table Details from the sqlite_master table in Db.
*
* @return An ArrayList of table details.
*/
public ArrayList<String[]> getDbTableDetails() {
Cursor c = db.rawQuery(
"SELECT name FROM sqlite_master WHERE type='table'", null);
ArrayList<String[]> result = new ArrayList<String[]>();
int i = 0;
result.add(c.getColumnNames());
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
String[] temp = new String[c.getColumnCount()];
for (i = 0; i < temp.length; i++) {
temp[i] = c.getString(i);
}
result.add(temp);
}
return result;
}
一种更简单的方法是在模拟器上运行它。
打开
adb shell
进入设备(或模拟器)。使用以下命令启动 sqlite 的命令行:sqlite3 <path to your database>
,然后在命令提示符处键入 .schema
。 /**
* Get all table Details from the sqlite_master table in Db.
*
* SQlite has a table called "sqlite_master " which holds schema information.
*
* @return An ArrayList of table names.
*/
public ArrayList<String> getDbTableNames(SQLiteDatabase db) {
ArrayList<String> result = new ArrayList<String>();
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
if (c.moveToFirst()) {
while ( !c.isAfterLast() ) {
result.add( c.getString(c.getColumnIndex("name")) );
c.moveToNext();
}
}
return result;
}