2013-04-17 115 views
0

過去幾個小時(可悲),我一直堅持這一個。android sqlite查詢搜索與「LIKE」錯誤

我建立使用SQLite一個應用程序,該應用程序可以做靈活的SQL命令。我目前停留在如何從ID以外的列查詢。

我從表的第二列中檢索信息的代碼是像這樣:

 public String nameSearch(String n) { 
    String[] columns = { KEY_ID, KEY_NAME, KEY_DESCRIPTION }; 
    Cursor c = myDatabase.query(true, DATABASE_TABLE, columns, KEY_NAME + "LIKE '%"+n+"%'", null, null, null, null, null); 
    while(c != null){ 
     c.moveToFirst(); 
     String data = c.getString(1); 
     return data; 
    } 
    return null; 
} 

我上的onClick命令代碼,這是在一個單獨的類來解釋的背景:

 case R.id.nameSearchButton: 
     String n = etName.getText().toString(); 
     try { 
      SQLControls controller = new SQLControls(this); 
      controller.nameSearch(n); 
      String gotName = controller.nameSearch(n).toString(); 
      controller.close(); 
      tvName.setText(gotName); 
      Log.d(TAG, " got " + gotName); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e(TAG, " error at " + e); 
     } 
     break; 

我知道這或多或少很簡單,但我認爲有一件事我沒有做,或者沒有看到那是在踢我的背後。有關更多信息,顯示的logcat的信息是這樣的,只要你按下按鈕點擊:

04-16 23:49:14.616: W/KeyCharacterMap(596): No keyboard for id 0 
04-16 23:49:14.616: W/KeyCharacterMap(596): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
04-16 23:49:17.680: W/System.err(596): java.lang.NullPointerException 
04-16 23:49:17.685: W/System.err(596): at com.example.sqltest.SQLControls.nameSearch(SQLControls.java:175) 
04-16 23:49:17.685: W/System.err(596): at com.example.sqltest.CustomSearch.onClick(CustomSearch.java:72) 
04-16 23:49:17.685: W/System.err(596): at android.view.View.performClick(View.java:2485) 
04-16 23:49:17.685: W/System.err(596): at android.view.View$PerformClick.run(View.java:9080) 
04-16 23:49:17.685: W/System.err(596): at android.os.Handler.handleCallback(Handler.java:587) 
04-16 23:49:17.685: W/System.err(596): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-16 23:49:17.685: W/System.err(596): at android.os.Looper.loop(Looper.java:130) 
04-16 23:49:17.685: W/System.err(596): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-16 23:49:17.685: W/System.err(596): at java.lang.reflect.Method.invokeNative(Native Method) 
04-16 23:49:17.685: W/System.err(596): at java.lang.reflect.Method.invoke(Method.java:507) 
04-16 23:49:17.685: W/System.err(596): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-16 23:49:17.685: W/System.err(596): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-16 23:49:17.685: W/System.err(596): at dalvik.system.NativeStart.main(Native Method) 
04-16 23:49:17.685: E/Custom Search(596): error at java.lang.NullPointerException 

非常感謝你的幫助。到目前爲止,所有回答我問題的人都得到了很大的幫助,即使是那麼簡單和微妙的事情。

+0

我不能證明這一點,但我懷疑MYDATABASE變量爲空時nameSearch被調用。它是我能看到的唯一值,可以爲null。 –

+0

謝謝,你是對的,打開數據庫的調用從來沒有在onClickListener類中調用,這就是爲什麼我失敗了。 – user1888771

回答

2

LIKE之前錯過的空間,c是從來沒有空,你必須檢查是否c.moveToFirst是真的

Cursor c = myDatabase.query(true, DATABASE_TABLE, columns, KEY_NAME + " LIKE '%"+n+"%'", null, null, null, null, null); 
if (c.moveToFirst()) 
{ 
    String data = c.getString(1); 
    return data; 
} 
+0

確定編碼起作用了,這是類設置onClick監聽器結束時的問題。非常感謝你的幫助。 – user1888771