问题描述
- android 查询时报错 no such table 是什么原因?
-
放在raw下的数据库确实存在的 表也在
下面是日志:
17822-17822/com.example.zwy.gaexam E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zwy.gaexam/com.example.zwy.gaexam.activity.Layout_InOrderTo}: android.database.sqlite.SQLiteException: no such table: singleselect (code 1): , while compiling: SELECT id, title, one, two, three, four, answer FROM singleselect WHERE id>0Caused by: android.database.sqlite.SQLiteException: no such table: singleselect (code 1): , while compiling: SELECT id, title, one, two, three, four, answer FROM singleselect WHERE id>0
这是写的一个类
ConstantInfo {
public static final String database_path = "/data/data/com.example.zwy.gaexam/databases/exam";
public static final int DBVERSION = 7;
public static final String author = "com.example.zwy.gaexam";
public static final String tablename0 = "singleselect";// 单选题目
public static final String path0 = "content://" + author + "/" + tablename0;
public static final int TABLE_TYPE0 = 1000;
public static final String INFO_TABLE_TYPE0 = "vnd.android.cursor.dir/"
+ tablename0;
public static final Uri uri0 = Uri.parse(path0);
}
解决方案
"/data/data/com.example.zwy.gaexam/databases/exam,你的数据库是这个路径可是你怎么读进去呢 ?手机的这个路径文件是私有的,如果是你自己
的手机也行,将该文件权限给改了,但是如果是给别人用,你难道还要改别人手机data目录权限吗?所以你在raw下的数据库读取到data路径下是不行的;
只有老老实实的用android提供的api和方法创建数据库;你可以再多试几天,如果行不通就照我说的试试;
如果回答对您有帮助,请采纳
解决方案二:
你需要添加数据库创建表的语句。Create TABLE
解决方案三:
没有这张表 singleselect
解决方案四:
这个表找不到,如果是系统的 要找到代表其的uri 然后通过contentprovider来访问
解决方案五:
表确实存在的话换个表名试一下
解决方案六:
遇到过这个问题,很有可能是因为你自己创建的数据库无法被识别的原因,比如说你创建sqlite版本与你安卓所用的版本是不一致所导致的。
具体的办法我是直接是用DbHelper来创建的
package sqliteTest;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DbHelper extends SQLiteOpenHelper{
public DbHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table q_a(question text ,answer text);");
db.execSQL("insert into q_a values('初次使用指南','"
+ "小白可以无视以下说明 不影响正常的使用"
+ "数据库使用的是Sqlite3"
+ "(数据库的表格格式是Q and A 也就是一问一答的形式)"
+ "初次使用的时候会默认在安装目录下创建一个新的数据库文件(the_resource_for_fast_flip.db)"
+ "默认数据库的文件目录为/data/data/com.example.FastFlip/database/the_resource_for_fast_flip.db"
+ "需要ROOT权限才可以访问 "
+ "如果需要将数据库放在别的位置的同学"
+ "可以将上述文件剪切到sd卡上"
+ "并在菜单目录下指定目录地址"
+ "比如我要将文件移动到sd1下的FastFlip文件夹"
+ "只要指定/sdcard1/FastFlip/xxx.db即可')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public static void getInstance(Context context)
{
}
}
使用DbHelper创建的数据库和插入的数据库均在首次运行时执行一次,以后都不再执行,比如说在这段代码中我执行了一次创建数据库和插入数据库一条信息,以后都不会再插入了。
另外数据库提取出来后如果用电脑编辑,也很有可能因为电脑上sqlite版本与安卓不同导致编辑后无法使用喔!要注意这一点。
解决方案七:
没有这张表。。。。。。。。。。。