【问题标题】:Android app crash on query statement查询语句上的 Android 应用程序崩溃
【发布时间】:2013-11-05 21:21:47
【问题描述】:

我做了一个方法来查询和返回数据库的结果。当这个方法在到达光标行时运行,整个程序就会崩溃。

这是崩溃的那一行:

Cursor item = rDb.query(DATABASE_TABLE, columns, "_id like '1'", null, null, null, null);

列是一个字符串,我有一个名为 _id 的列。 我看不出语法有什么问题,请帮忙!

数据库类中的变量:

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "restaurants";

//Database Columns
public static final String COLUMN_ROWID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_TELEPHONE = "phone_number";
public static final String COLUMN_EMAIL ="email";
public static final String COLUMN_MENUURL = "menu_address";
public static final String COLUMN_WEBSITE = "website_address";
public static final String COLUMN_MOBILE = "mobile number";

//Database Table Create Statement
private static final String DATABASE_TABLECREATE = "create table "
        + DATABASE_TABLE + " (" + COLUMN_ROWID
        + " integer not null, " 
        + COLUMN_NAME + " text not null, " 
        + COLUMN_TELEPHONE + " integer not null, "
        + COLUMN_EMAIL + " text not null, "
        + COLUMN_MENUURL + " text not null, "
        + COLUMN_WEBSITE + " text not null, "
        + COLUMN_MOBILE + " integer not null) ;";

//the database itself
private SQLiteDatabase rDb;

列:

String[] columns = new String[]{COLUMN_ROWID, COLUMN_NAME, COLUMN_TELEPHONE, COLUMN_EMAIL,     COLUMN_MENUURL, COLUMN_WEBSITE, COLUMN_MOBILE};

11-05 16:15:05.633:D/gralloc_goldfish(882):没有检测到 GPU 仿真的仿真器。 11-05 16:15:07.533:D/按钮(882):单击 11-05 16:15:07.553:D/字符串声明(882):就在查询之前 11-05 16:15:07.553: D/AndroidRuntime(882): 关闭虚拟机 11-05 16:15:07.553: W/dalvikvm(882): threadid=1: 线程退出未捕获异常 (group=0x41465700) 11-05 16:15:07.564:E/AndroidRuntime(882):致命异常:主要 11-05 16:15:07.564: E/AndroidRuntime(882): java.lang.NullPointerException 11-05 16:15:07.564: E/AndroidRuntime(882): 在 com.example.testforthingy.RestaurantDatabase.getData(RestaurantDatabase.java:107) 11-05 16:15:07.564: E/AndroidRuntime(882): at com.example.testforthingy.RestaurantDisplay$1.onClick(RestaurantDisplay.java:26) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 android.view.View.performClick(View.java:4240) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 android.view.View$PerformClick.run(View.java:17721) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 android.os.Handler.handleCallback(Handler.java:730) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 android.os.Handler.dispatchMessage(Handler.java:92) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 android.os.Looper.loop(Looper.java:137) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 android.app.ActivityThread.main(ActivityThread.java:5103) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 java.lang.reflect.Method.invokeNative(Native Method) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 java.lang.reflect.Method.invoke(Method.java:525) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 11-05 16:15:07.564: E/AndroidRuntime(882): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 11-05 16:15:07.564: E/AndroidRuntime(882): at dalvik.system.NativeStart.main(Native Method)

public String getData(){
    String rName= "";
    String[] columns = new String[]{COLUMN_ROWID, COLUMN_NAME, COLUMN_TELEPHONE, COLUMN_EMAIL, COLUMN_MENUURL, COLUMN_WEBSITE, COLUMN_MOBILE};

    Cursor item = rDb.query(DATABASE_TABLE, columns, "name like 'Terry'", null, null, null, null);

    for(item.moveToFirst();item.moveToNext(); item.isAfterLast()) {
        rName = item.getString(item.getColumnIndex(COLUMN_NAME));
    }

    return rName;

【问题讨论】:

  • 堆栈跟踪。变量的值(全部)。 -1 直到那时。
  • 你想要什么变量?所有的数据库,还是程序中的每一个?
  • rDb, DATABASE_TABLE, columns,因为这些是我们目前看到的。堆栈跟踪也非常重要。
  • 我对 java 很陌生,什么是“堆栈跟踪”
  • logcat 中的红色大块异常信息。此外,rDb 的“值”将是您执行程序时的实际值。您可以记录、调试并查看它的值是什么......重要的是确保它不为空并且它是打开的。如果您是新手,我假设您正在学习教程。可以发一下网址吗?

标签: android


【解决方案1】:

_id 是一个整数,而不是字符串。并且列必须是 String[] 类型,而不是 String,否则您的代码甚至无法编译。所以我建议你试试:

Cursor item = rDb.query(DATABASE_TABLE, columns, "_id=1", null, null, null, null);

【讨论】:

  • 很抱歉,但这产生了相同的结果
猜你喜欢
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多