Android SQLite选择所有表描述
我找到了在SQLite中获取所有表的解决方案。 但是,当我改变时:Android SQLite选择所有表描述,android,sqlite,Android,Sqlite,我找到了在SQLite中获取所有表的解决方案。 但是,当我改变时: SELECT name FROM sqlite_master WHERE type='table'; 进入: SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC; 输出完全奇怪。 第一个问题给了我: tbl201306-->到目前为止,2013年6月只有一个表。 第二个问题给了我: android_metadata-->名称未更改,但返回此
SELECT name FROM sqlite_master WHERE type='table';
进入:
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC;
输出完全奇怪。
第一个问题给了我:
tbl201306-->到目前为止,2013年6月只有一个表。
第二个问题给了我:
android_metadata-->名称未更改,但返回此名称
我希望这些表按降序排列,因为在将来,最新的表将位于顶部
我的完整代码:
public ArrayList<String> getDBTables() {
ArrayList<String> toReturn = new ArrayList<String>();
try {
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC", null);
c.moveToFirst();
while (c.moveToNext()) {
toReturn.add(c.getString(c.getColumnIndex("name")));
}
c.close();
}
catch(SQLiteException e) {
e.printStackTrace();
}
return toReturn;
}
public ArrayList getDBTables(){
ArrayList toReturn=新的ArrayList();
试一试{
游标c=db.rawQuery(“从sqlite_master中选择名称,其中type='table'按名称排序DESC”,null);
c、 moveToFirst();
while(c.moveToNext()){
添加(c.getString(c.getColumnIndex(“name”));
}
c、 close();
}
catch(sqlitee异常){
e、 printStackTrace();
}
回归回归;
}
您的代码跳过第一条返回的记录
你也可以
- 保持对
的调用,并将循环更改为moveToFirst()
do{…}while()代码>循环,或
- 只需删除对
的调用moveToFirst()
- 保持对
的调用,并将循环更改为moveToFirst()
do{…}while()代码>循环,或
- 只需删除对
的调用moveToFirst()
- 这是我使用的最终解决方案:
public ArrayList<String> getDBTables() {
ArrayList<String> toReturn = new ArrayList<String>();
try {
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'tbl%' ORDER BY name DESC", null);
while(c.moveToNext()) {
toReturn.add(c.getString(c.getColumnIndex("name")));
}
c.close();
}
catch(SQLiteException e) {
e.printStackTrace();
}
return toReturn;
}
public ArrayList getDBTables(){
ArrayList toReturn=新的ArrayList();
试一试{
游标c=db.rawQuery(“从sqlite_master中选择名称,其中type='table'和类似'tbl%'的名称按名称DESC排序”,null);
while(c.moveToNext()){
添加(c.getString(c.getColumnIndex(“name”));
}
c、 close();
}
catch(sqlitee异常){
e、 printStackTrace();
}
回归回归;
}
这是我使用的最终解决方案:
public ArrayList<String> getDBTables() {
ArrayList<String> toReturn = new ArrayList<String>();
try {
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'tbl%' ORDER BY name DESC", null);
while(c.moveToNext()) {
toReturn.add(c.getString(c.getColumnIndex("name")));
}
c.close();
}
catch(SQLiteException e) {
e.printStackTrace();
}
return toReturn;
}
public ArrayList getDBTables(){
ArrayList toReturn=新的ArrayList();
试一试{
游标c=db.rawQuery(“从sqlite_master中选择名称,其中type='table'和类似'tbl%'的名称按名称DESC排序”,null);
while(c.moveToNext()){
添加(c.getString(c.getColumnIndex(“name”));
}
c、 close();
}
catch(sqlitee异常){
e、 printStackTrace();
}
回归回归;
}
哇,这没什么意义。这看起来像是有效的代码。你的sql行在我的数据库上运行得很好。当我遇到这种奇怪的事情时,我会尝试“现实检查”。如果你换回第一行,它还能用吗?你的数据库可能会搞砸。其他“不顾一切”的措施包括删除当前字符串,重新键入它,并对项目进行完全干净的重建,包括首先将其从设备中删除。您的问题是什么?查询返回两条记录。名称按降序排列。你期待什么?数据库中有更多的表吗?当我使用第一个SQL时,我会再次获得原始名称(tbl201306)。我不知道为什么。我运行它来填充微调器。稍后我可以在ArrayList中反转顺序,但效率不高。现在在我的数据库中只有一条记录。哇,这没有多大意义。这看起来像是有效的代码。你的sql行在我的数据库上运行得很好。当我遇到这种奇怪的事情时,我会尝试“现实检查”。如果你换回第一行,它还能用吗?你的数据库可能会搞砸。其他“不顾一切”的措施包括删除当前字符串,重新键入它,并对项目进行完全干净的重建,包括首先将其从设备中删除。您的问题是什么?查询返回两条记录。名称按降序排列。你期待什么?数据库中有更多的表吗?当我使用第一个SQL时,我会再次获得原始名称(tbl201306)。我不知道为什么。我运行它来填充微调器。稍后我可以在ArrayList中反转顺序,但效率不高。现在在我的数据库中只有一条记录。顺便说一句,你是绝对正确的!显然,android_元数据表是自动生成的。所以有两张桌子,我跳过了第一张桌子。你说得绝对正确!显然,android_元数据表是自动生成的。有两张桌子,我跳过了第一张桌子。