Android应用在查询语句中崩溃

时间:2013-11-05 21:21:48

标签: android

我做了一个方法来查询并返回数据库的结果。当此方法一旦到达光标线就运行,整个程序崩溃。

这是它崩溃的地方:

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 / Button(882):单击 11-05 16:15:07.553:D / string声明(882):就在查询之前 11-05 16:15:07.553:D / AndroidRuntime(882):关闭VM 11-05 16:15:07.553:W / dalvikvm(882):threadid = 1:线程退出,未捕获异常(组= 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):at 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):at java.lang.reflect.Method.invokeNative(Native Method) 11-05 16:15:07.564:E / AndroidRuntime(882):at java.lang.reflect.Method.invoke(Method.java:525) 11-05 16:15:07.564:E / AndroidRuntime(882):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737) 11-05 16:15:07.564:E / AndroidRuntime(882):at 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 个答案:

答案 0 :(得分:0)

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

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