我想我已经用android创建了一个sqllite数据库但是每次我去做一个插入它声称一个列不存在。如何查看模式,是在对象创建时调用的onCreate方法?
答案 0 :(得分:11)
您可以使用代码执行此操作。 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;
}
更简单的方法是在模拟器上运行它。
打开
答案 1 :(得分:1)
检查数据库架构的另一种方法是adb shell
进入设备(或模拟器)。使用以下命令启动sqlite的命令行:sqlite3 <path to your database>
并在命令提示符下键入.schema
。
答案 2 :(得分:0)
您可以按如下方式获取表名:
/**
* 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;
}