Java Android Studio-无法从预安装的sqlite数据库检索数据
编辑:我仍然找不到这个问题的解决方案。出于某种原因,被查询的数据库是空的,尽管它已满并且位于正确的位置。如果您发现我的数据库助手有任何问题或我可以尝试的任何其他问题,我将非常感激 我正在开发一个应用程序,它可以从SQLite数据库返回有关鸟类物种的信息。当我查询此数据库时,会收到错误消息:“SQLiteLog:(1)没有这样的列:“size”等 我已经验证了我的rawQuery()查询的格式是否正确,并且应该通过在SQLite浏览器中运行查询并咨询Stackoverflow的建议来返回我期望的信息。我曾尝试使用替代数据库资产类SQLiteAssetHelper,但遇到了与SQLiteOpenHelper相同的问题 我认为这可能与: 测试手机-Moto g6 play-此手机没有根目录。在测试过程中,将数据库迁移到手机供应用程序使用是否会出现问题? 数据库的形成——这是由我编写的python脚本填充的。某些元数据等是否存在格式错误或不兼容Java Android Studio-无法从预安装的sqlite数据库检索数据,java,android,sqlite,android-studio,Java,Android,Sqlite,Android Studio,编辑:我仍然找不到这个问题的解决方案。出于某种原因,被查询的数据库是空的,尽管它已满并且位于正确的位置。如果您发现我的数据库助手有任何问题或我可以尝试的任何其他问题,我将非常感激 我正在开发一个应用程序,它可以从SQLite数据库返回有关鸟类物种的信息。当我查询此数据库时,会收到错误消息:“SQLiteLog:(1)没有这样的列:“size”等 我已经验证了我的rawQuery()查询的格式是否正确,并且应该通过在SQLite浏览器中运行查询并咨询Stackoverflow的建议来返回我期望的信
package com.example.newbuild;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHelper extends SQLiteOpenHelper {
//db info
private static final String DATABASE_NAME = "birdsDB.db";
// FileInputStream fis = new FileInputStream(new File(DATABASE_NAME));
// Log info for debugging:
private static final String TAG = "DatabaseHelper";
// set variables to name database
private static final int DATABASE_VERSION = 3;
// name of table 1:
private static final String MAIN_TABLE = "main";
// name of bird image table:
private static final String PIC_TABLE = "picLinks";
// names of MAIN columns:
private static final String ID = "id";
private static final String COMMON = "common";
private static final String SCINAME = "sciname";
private static final String FAMILY = "family";
private static final String BIRDCATEG = "category";
private static final String SIZE = "size";
private static final String DESC = "description";
private static final String RANGEPIC = "rangepicid";
private static final String SIGHTED = "sighted";
// names of BIRD IMAGE columns
private static final String BIRD_IMAGE_NO = "picKey";
private static final String BIRD_ID = "birdId";
private static final String IMAGE_LINK = "link";
private Context mContext;
private SQLiteDatabase mDB;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.i(TAG, "now calling database helper");
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "attempting to create table from onCreate");
String CREATE_MAIN_TABLE =
"CREATE TABLE " +
MAIN_TABLE +
"(" +
ID + "INTEGER PRIMARY KEY," +
COMMON + " TEXT," +
SCINAME + " TEXT," +
FAMILY + "TEXT," +
BIRDCATEG + "TEXT," +
SIZE + "TEXT," +
DESC + "TEXT," +
RANGEPIC + "TEXT," +
SIGHTED + "TEXT" +
")";
db.execSQL(CREATE_MAIN_TABLE);
Log.d("table", CREATE_MAIN_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
Log.i(TAG, "now calling onUpgrade");
db.execSQL("DROP TABLE IF EXISTS " + MAIN_TABLE);
onCreate(db);
}
}
public ArrayList getCategory(字符串[]名称){
字符串表_=“main”;
ArrayList categories=新的ArrayList();
如果(名称[0]!=null){
Log.d(Log_标记,名称[0]);
}否则{
Log.d(Log_标记,“名称[0]尚未传递”);
}
Log.d(Log_标记,从“+表_”中选择DISTINCT”+名称[0]+);
游标x=db.rawQuery(“从“+表”中选择DISTINCT“+名称[0]+”,null);
如果(x.getCount()==0){
Log.i(Log_标记,“光标未返回任何数据”);
}
while(x.moveToNext()){
字符串类别=x.getString(0);
类别。添加(类别);
Log.i(“光标循环”,类别);
}
退货类别;
}
当上面的代码传递字符串“category”时,我的数据库应该返回六个不同类别鸟类的字符串。相反,我发现错误消息包括“E/SQLiteLog:(1)没有这样的列:category”
我想这可能与:测试手机——MotoG6游戏有关-
这部手机没有根。这可能是迁移的问题吗
是否将数据库转移到手机上,以供应用程序在测试期间使用
我不这么认为,因为您通常会在找不到列之前找到一个未找到的表
我建议暂时将查询更改为:-
Cursor x = db.rawQuery("SELECT * FROM " + TABLE_BIRDS + " LIMIT 10", null);
其次是:-
DatabaseUtils.dumpCursor(x);
第一个更改将从表的10行中提取所有列。
第二行将光标中的数据输出到日志,包括列名
我怀疑列名不正确或丢失。在这种情况下,您需要确保资产文件夹中的文件正确无误,同时确保删除数据库(删除应用程序数据或卸载应用程序)然后重新运行应用程序。您是否尝试过取消安装并重新安装应用程序?注意:您必须重新卸载并安装应用程序才能获得任何更改您是否尝试了这两种解决方案并再次卸载并安装了应用程序?让我们来看看。查询的数据库是空的,尽管已满,但在正确的位置,它似乎未满。要使其完整,必须已将其从应用程序的“资产”文件夹复制到设备中的正确文件夹中。你有代码来做这个吗?如果不是,那么您只创建一个空表的数据库。谢谢。我已经运行了您建议的查询。输出为:“I/System.out:>>>>>>>转储游标android.database.sqlite。SQLiteCursor@cb00f00I/System.out:如何删除应用程序数据/卸载应用程序,然后重新运行应用程序?@grainman Settings-Apps-选择应用程序。该表为空。你是说Android Studio中的文件-设置-…吗?我在此处找不到任何“Apps”选项卡。
DatabaseUtils.dumpCursor(x);