[英]Android Studio - unable to retreive data from preinstalled sqlite database
编辑:我仍然找不到解决此问题的方法。 由于某些原因,尽管数据库已满并且位于正确的位置,但查询的数据库为空。 如果您发现我的数据库助手有任何问题或可以尝试的其他任何问题,我将不胜感激。
我正在开发一个应用程序,该应用程序从SQLite数据库返回与鸟类物种有关的信息。 当我查询该数据库时,我收到错误消息:'SQLiteLog:(1)没有这样的列:'size'等。
我已经验证了rawQuery()查询的格式是否正确,并且应该通过在SQLite浏览器中运行查询以及通过咨询Stackoverflow来返回我期望的信息。 我尝试使用备用数据库资产类SQLiteAssetHelper,但遇到的问题与SQLiteOpenHelper相同。
我认为这可能与以下原因有关:测试电话-Moto g6播放-该电话未扎根。 在测试过程中,将数据库迁移到手机上供应用程序使用是否会成为问题? 数据库的形成-这是由我编写的python脚本填充的。 某些元数据可能格式错误或不兼容吗?
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<String> getCategory(String[] name) {
String TABLE_BIRDS = "main";
ArrayList<String> categories = new ArrayList<>();
if (name[0] != null) {
Log.d(LOG_TAG, name[0]);
} else {
Log.d(LOG_TAG, "name[0] has not been passed");
}
Log.d(LOG_TAG, "SELECT DISTINCT " + name[0] + " FROM " + TABLE_BIRDS);
Cursor x = db.rawQuery("SELECT DISTINCT " + name[0] + " FROM " + TABLE_BIRDS, null);
if (x.getCount() == 0) {
Log.i(LOG_TAG, "The cursor is not returning any data");
}
while (x.moveToNext()) {
String category = x.getString(0);
categories.add(category);
Log.i("cursor loop", category);
}
return categories;
}
当上面的代码传递字符串'category'时,我的数据库应返回六个不同种类鸟类的字符串。 相反,我发现错误消息,包括“ E / SQLiteLog:(1)无此类列:类别”。
我认为这可能与以下原因有关:测试电话-Moto g6播放-该电话未扎根。 在测试过程中,将数据库迁移到手机上供应用程序使用是否会成为问题?
我不这样认为,因为通常在未找到列之前会先找到未找到表。
我建议暂时将查询更改为:-
Cursor x = db.rawQuery("SELECT * FROM " + TABLE_BIRDS + " LIMIT 10", null);
其次是 :-
DatabaseUtils.dumpCursor(x);
第一个更改将从表的10行中提取所有列。 第二行会将光标中的数据输出到日志,包括列名。
我怀疑列名不正确或丢失。 在这种情况下,您需要确保资产文件夹中的文件正确无误,请确保删除数据库(删除应用程序数据或卸载应用程序),然后重新运行应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.