首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android SQLite 查詢無資料?SQL 語法與 Bundle 傳值錯誤完整解析

     編輯:程式設計疑難解答

問題現象

資料庫建立與新增功能正常,但點擊查詢跳轉至第二個 Activity 時顯示白屏,Log 顯示 while (cursor.moveToNext()) 迴圈未進入,導致無資料顯示。

核心問題剖析

1. SQL 查詢語法錯誤

// 錯誤寫法
Cursor cursor = db.rawQuery("select * from dict where ? or ?", 
    new String[]{"%" + ke + "%", "%" + ke + "%"});

WHERE ? OR ? 缺少欄位名稱,SQLite 會將參數視為字面值而非欄位條件,導致查詢無結果。

正確寫法:

Cursor cursor = db.rawQuery(
    "select * from dict where word like ? or detail like ?", 
    new String[]{"%" + ke + "%", "%" + ke + "%"});

2. Bundle 序列化傳遞與接收不匹配

MainActivity 使用 putSerializable("date", list) 傳遞 ArrayList<Map<String,String>>,但 Result Activity 卻用 getString("date") 接收,型別不符導致崩潰或空白。

修正方案:

  • 發送端:維持 putSerializable 或改用 Parcelable 提升效能。
  • 接收端:使用 getSerializable("date") 強制轉型,並遍歷 List 顯示於 TextView 或 RecyclerView。
// Result.java 修正示例
Bundle bundle = getIntent().getExtras();
ArrayList<Map<String,String>> list = 
    (ArrayList<Map<String,String>>) bundle.getSerializable("date");
StringBuilder sb = new StringBuilder();
for (Map<String,String> map : list) {
    sb.append("單字: ").append(map.get("word"))
      .append("\n釋義: ").append(map.get("detail")).append("\n\n");
}
jieguo.setText(sb.toString());

完整程式碼關鍵修正點

檔案問題修正
DatabaseHelper.java無正常
MainActivity.javaSQL 語法錯誤、Bundle 傳值型別補上欄位名、修正序列化接收
Result.javagetString 接收 List改用 getSerializable 並遍歷顯示

DatabaseHelper 程式碼 MainActivity 程式碼 Result 程式碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved