2 markdowneide markdowneide 于 2013.05.06 17:26 提问

运行 SQLite 数据库后程序崩溃

我设计的是查询数据库后下面的程序段返回一个数组。但是现在运行下面的程序时,奔溃了

//info 是类型数据中对象的名字
    info.open();
    String[] data = info.queryAll();
    info.close();

数据库代码部分,我想检索某一列中所有数据库的行

public String[] queryAll() {
    String[] columns = new String[] { KEY_NAME };
    Cursor cursor = ourDatabase.query(DATABASE_TABLE, columns, null, null,
            null, null, null);
    if (cursor != null) {
        try {
            final int nameColumnIndex =                     cursor.getColumnIndex(KEY_NAME);
            List<String> names = new ArrayList<String>();
            while (cursor.moveToNext()) {
                names.add(cursor.getString(nameColumnIndex));
            }
            return names.toArray(new String[names.size()]);
        } finally {
            cursor.close();
        }
    }
    return null;
}

是因为数据库刚开始是空的吗?

LOGCAT

04-23 22:26:47.780: E/AndroidRuntime(2825): FATAL EXCEPTION: main
04-23 22:26:47.780: E/AndroidRuntime(2825): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contactlist/com.example.contactlist.Contacts}: android.database.sqlite.SQLiteException: no such table: mycontacts (code 1): , while compiling: SELECT Contact_name FROM mycontacts
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.os.Looper.loop(Looper.java:137)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.ActivityThread.main(ActivityThread.java:4745)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at java.lang.reflect.Method.invokeNative(Native Method)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at java.lang.reflect.Method.invoke(Method.java:511)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at dalvik.system.NativeStart.main(Native Method)
04-23 22:26:47.780: E/AndroidRuntime(2825): Caused by: android.database.sqlite.SQLiteException: no such table: mycontacts (code 1): , while compiling: SELECT Contact_name FROM mycontacts
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at com.example.contactlist.DBContact.queryAll(DBContact.java:97)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at com.example.contactlist.Contacts.onCreate(Contacts.java:38)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.Activity.performCreate(Activity.java:5008)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
04-23 22:26:47.780: E/AndroidRuntime(2825):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
04-23 22:26:47.780: E/AndroidRuntime(2825):     ... 11 more

6个回答

yongyong_21
yongyong_21   2013.05.07 13:33
已采纳
 private static final String DATABASE_CREATE = "create table contacts (_id integer primary key autoincrement, "
                + "Contact_name text not null, Personal_Phonenumber text not null, Home_Phonenumber text not null, Office_Phone text not null); ";

上面代码中的 Office_Phone 与申明不符。

baimy1985
baimy1985   2013.05.06 21:06
04-23 22:26:47.780: E/AndroidRuntime(2825): Caused by: android.database.sqlite.SQLiteException: no such table: mycontacts (code 1): , while compiling: SELECT Contact_name FROM mycontacts

这里不是提示表不存在吗?

cj6585256
cj6585256 对啊,log不是直接有提示吗? no such table: mycontacts 没有这个Table
大约 5 年之前 回复
u010589110
u010589110   2013.05.06 17:45

有可能你的 符号出错了 做程序是需要很小心的

suannai0314
suannai0314 您的这种回答更适合使用评论功能,以后您可以在问题下边进行添加评论
大约 5 年之前 回复
u010591434
u010591434   2013.05.06 19:51

崩溃了?报错?????????

markdowneide
markdowneide 我贴出 logcat 的输出了呀。
大约 5 年之前 回复
suannai0314
suannai0314 您的这种回答更适合使用评论功能,以后您可以在问题下边进行添加评论
大约 5 年之前 回复
poweraeb
poweraeb   2013.05.07 13:15

应该是符号错了。去掉try吧,多加些条件判断。

yezisuifengbiao
yezisuifengbiao   2013.12.13 11:40

你创建表的时候,那些列名的类型有没给少?如果给少了一个,本身就没有类型,插不进数据,怎么查呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
sqlite 数据库文件崩溃时的处理方法
磁盘空间写满或写入了格式不正确的数据或在操作db过程中内存溢出,那么.db文件的镜像就可能会被破坏 。 处理方法: sqlite3 old.db(注:损坏的db文件) .output tmp.sql .dump .quit 然后读取数据到新的db sqlite3 new.db .read tmp.sql .quit
SQLite CRUD/原理/升级/降级,加密库SqliteCipher,GreenDao,损坏与修复
SQLite: https://www.sqlite.org/pragma.html#pragma_page_size数据库的CRUD,升级表/升级库,合并表/合并库Android 数据库模块搭建方案- https://www.jianshu.com/p/57eb08fe071dAndroid 数据库开发(一)SQLite3概述- http://blog.csdn.net/itachi85/art
Android中更改SQLite数据库中的数据后,刷新ListView。
在对SQLite数据库操作后,ListView显示的数据却无法及时刷新,可以使用SwipeRefreshLayout实现下拉刷新,更新ListView。 将ListView放在SwipeRefreshLayout类中 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh"
Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹。。。会遇到找不到数据库文件的问题。当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没
解决android数据库降级时,sqlite不支持drop column的问题
由于存在用户从高版本apk强制安装低版本apk的情况,所以需要重写SQLiteOpenHelper类的onDowngrade方法,对db进行降级操作。当drop表字段时,会报如下错误:                drop删除表字段的操作语句如下: db.execSQL("ALTER TABLE " + Contract.Tables.FAVORITE + " DROP COLUM
winform调用sqlite,打包发布后,在客户机上安装运行却报错:找不到System.Data.SQLite.DLL
winform调用sqlite,打包发布后,在客户机上运行却报错:找不到System.Data.SQLite.DLL   解决方案:移除之前错误的DLL,使用正确的DLL(799KB)   http://good.gd/1936755.htm   为这个问题,我郁闷了很久!
Android当Sqlite 增加字段或者减少字段时如何不让程序崩溃。
问题描述:当App一个版本上线后,如果本地的sqlite 数据库表
【Unity】SQLite发布到Android端遇到的那些坑
发布到Android端需要添加libsqlite3.so文件,和相应的 Mono.Data.Sqlite.dll、sqlite3.dll、System.Data.dll类库 注意:所有文件放到Plugins文件夹下,libsqlite3.so放在Android文件夹下 *在Player Setting里的(安卓选项中) OtherSettings里有个Optimization 下
Android版本更新时对SQLite数据库升级或者降级遇到的问题
SQLite是Android内置的一个很小的关系型数据库。SQLiteOpenHelper是一个用来辅助管理数据库创建和版本升级问题的抽象类。我们可以继承这个抽象类,实现它的一些方法来对数据库进行自定义操作。下面两个方法必须重写: public void onCreate(SQLiteDatabase db)public void onUpgrade(SQLiteDatabase db, i
在电脑上制作sqlite数据库时应该注意的问题
基于项目的需要,我们在实际开发中常常遇到需要在apk中打包好已经已有的数据库资源,然后在app安装启动后将其用Java io流复制到SD卡或者手机内存中,最后在代码中SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databasepath, null);即可使用数据库。当然由于是在PC上制作所需的sqlite db数据库,所以我们