j11488 2023-03-20 23:54 采纳率: 100%
浏览 64
已结题

android sqlite数据库如何读取显示数据(语言-java)

想通过全局变量Login.name作为条件来检索数据表中该行其它列的值,并显示在TextView中。在运行到注释下方语句时会闪退。
在保留使用全局变量作为检索条件的基础上解答,并指出问题所在。
以下是源码:

        TextView username=findViewById(R.id.username);


        DBOpenHelper dbOpenHelper = new DBOpenHelper(Logining.this);
        
        //闪退
        String un = dbOpenHelper.person_serch();
        username.setText(un);

数据库函数:

   public String person_serch(){
       SQLiteDatabase sqLiteDatabase=this.getReadableDatabase();
       String sq = "select * from user where name = ?";
       Cursor cursor = sqLiteDatabase.rawQuery(sq, new String[]{Login.name});

      //public static final String TABLE_USER_name = "name";

       int nameIndex = cursor.getColumnIndex(TABLE_USER_name);
       String  user_name = cursor.getString(nameIndex);

       sqLiteDatabase.close();
       return user_name;
   }

  • 写回答

5条回答 默认 最新

  • OKX安生 2023-03-21 03:12
    关注
    该回答引用于gpt与OKX安生共同编写:
    
    • 该回答引用于gpt与OKX安生共同编写:
    • 根据您提供的代码和描述,可能是因为 cursor.getString(nameIndex) 返回了空值导致闪退。这可能是由于数据库中没有符合条件的记录,或者记录中该列的值为空。

    以下是一些可能的解决方案:

    • 检查数据库中是否存在符合条件的记录,并确保找到的记录中该列的值不为空。
    • 在使用 cursor.getString(nameIndex) 方法之前,可以先使用 cursor.moveToFirst() 方法将指针移到第一条记录。如果未找到符合条件的记录,则返回 false。这样可以确保始终从正确的位置开始读取数据。
    • 如果找不到任何记录,或者记录中该列的值为空,则需要在 UDF 中添加一些错误处理代码,以避免程序崩溃。例如,您可以在无法找到记录时返回一个默认值或给出一个提示信息。

    下面是一个可能的修改代码,通过添加错误处理来防止程序崩溃:

    public String person_search() {
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        String sq = "select * from user where name = ?";
        Cursor cursor = sqLiteDatabase.rawQuery(sq, new String[]{Login.name});
        if (cursor.moveToFirst()) {
            int nameIndex = cursor.getColumnIndex(TABLE_USER_name);
            String user_name = cursor.getString(nameIndex);
            sqLiteDatabase.close();
            return user_name;
        } else {
            // 找不到记录时返回默认值或给出提示信息
            sqLiteDatabase.close();
            return "未找到符合条件的记录";
        }
    }
    
    • 当您需要通过 SQL 语句从 SQLite 数据库中检索数据,并将检索到的结果显示在 Android 应用程序中时,可以按照以下步骤进行:
    1. 在 DBOpenHelper 类中添加一个方法,用于执行查询操作并返回结果。例如,您的查询语句可能如下所示:

      String query = "SELECT * FROM my_table WHERE column1 = ?";
      Cursor cursor = getReadableDatabase().rawQuery(query, new String[] { value });
      return cursor;
      

      这个方法将返回一个 Cursor 对象,其中包含了所有符合条件的记录。

    2. 在您的 Activity 中,调用该方法并对返回的 Cursor 对象进行处理。在处理过程中,您可以使用 moveToFirst()moveToNext() 方法逐个遍历 Cursor 中的记录,并使用 getColumnIndex()getString() 等方法获取指定列的值。例如,您可以编写如下代码来打印出所有记录的列值:

      Cursor cursor = dbOpenHelper.executeQuery("some_query");
      if (cursor.moveToFirst()) {
          do {
              String column1Value = cursor.getString(cursor.getColumnIndex("column1"));
              String column2Value = cursor.getString(cursor.getColumnIndex("column2"));
              // ...打印其它列的值...
          } while (cursor.moveToNext());
      }
      
    3. 将获取到的数据显示在应用程序的 UI 控件上。例如,您可以创建一个 ListView 控件,并使用 SimpleCursorAdapter 来将 Cursor 中的数据绑定到 ListView 上。代码如下:

      Cursor cursor = dbOpenHelper.executeQuery("some_query");
      String[] fromColumns = {"column1", "column2"};
      int[] toViews = { R.id.text1, R.id.text2 };
      SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list_item_layout,
                                   cursor, fromColumns, toViews, 0);
      ListView listView = findViewById(R.id.list_view);
      listView.setAdapter(adapter);
      

      在上述代码中,R.layout.list_item_layout 是一个用于呈现单个列表项的布局文件,其中包含两个 TextView 控件(ID 分别为 text1text2),分别用于显示第一列和第二列的值。

    希望这些信息能够帮助您更好地理解如何在 Android 应用程序中访问 SQLite 数据库并检索数据。如果还有其他问题,请随时提出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 修改了问题 3月21日
  • 修改了问题 3月21日
  • 展开全部

悬赏问题

  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 HC32L176调试了一个通过TIMER5+DMA驱动WS2812B
  • ¥15 三菱FX系列PLC串口指令
  • ¥15 cocos的js代码调用wx.createUseInfoButton问题!
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!
  • ¥15 Python程序,深度学习,有偿私
  • ¥15 扫描枪扫条形码出现问题
  • ¥35 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助