m0_58059585 2024-03-12 19:49 采纳率: 0%
浏览 8
已结题

android studio直连mysql之后无法获取用户的信息,如何解决?(语言-java)

//传入的account是通过intent将登录时候的输入框获取
//按登录的用户名查询该用户的账户信息
    public User getUserByAccount(String account) {
        Connection connection = JDBCUtils.getConn();
        User user = null;
        try {
            String sql = "select * from user where userAccount = ?";
            if (connection != null) {
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
                if (preparedStatement != null) {
                    preparedStatement.setString(1, account);
                    ResultSet resultSet = preparedStatement.executeQuery();
                    while (resultSet.next()) {
                        user = new User();
                        user.setId(resultSet.getInt("id"));
                        user.setUserName(resultSet.getString("userName"));
                        user.setUserAccount(account);
                        user.setUserPassword(resultSet.getString("userPassword"));
                        user.setUserAge(resultSet.getInt("userAge"));
                        user.setWeight(resultSet.getDouble("weight"));
                        user.setHeight(resultSet.getDouble("height"));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
            return user;
    }

public void show(View view){
        Intent intent = getIntent();
        String message = intent.getStringExtra(LoginActivity.TAG);
        UserDao userDao = new UserDao();
        User user = userDao.getUserByAccount(message);
        TextView textView = findViewById(R.id.text01);
        new Thread(){
            @Override
            public void run(){
                if (user!=null) {
                    textView.setText(user.getUserName());
                }else {
                   Log.e("MAINACCCCCC","空空空空空");
                }
            }
        }.start();
    }
  • 写回答

14条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-12 19:59
    关注

    引自免费微信小程序:皆我百晓生

    针对你遇到的问题,Android Studio中通过Java代码直连MySQL数据库并获取用户信息时无法成功获取用户的情况,有以下几种可能的解决方案和检查点:

    1. 检查数据库连接: 确保JDBCUtils.getConn()方法能够正确建立到MySQL数据库的连接。请确认数据库URL、用户名、密码等配置信息无误。

    2. SQL查询语句与参数: 你的SQL查询语句是正确的,但请确保数据库中的userAccount字段名与实际字段名一致,同时检查传入的account值是否存在对应的记录。

    3. ResultSet处理: 在读取结果集时,如果数据库中没有找到匹配的记录,则resultSet.next()将返回false,不会进入循环初始化User对象。因此,在查询无结果的情况下会返回null。为了调试,请在查询执行后加入如下判断以确认是否有数据返回:

    if (resultSet != null) {
        if (resultSet.next()) {
            // 初始化User对象...
        } else {
            Log.e("getUserByAccount", "未找到对应账户信息");
        }
    } else {
        Log.e("getUserByAccount", "ResultSet为null,查询可能失败");
    }
    
    1. 多线程更新UI问题: 虽然这不是导致无法获取用户信息的原因,但在Android中,直接在非主线程(如新创建的Thread)中更新UI是不允许的。你需要使用Handler或者runOnUiThread()方法切换回主线程进行UI更新。修改show()方法如下:
    public void show(View view){
        Intent intent = getIntent();
        String message = intent.getStringExtra(LoginActivity.TAG);
        UserDao userDao = new UserDao();
        User user = userDao.getUserByAccount(message);
    
        new Thread(){
            @Override
            public void run(){
                final User resultUser = user;
                if (resultUser != null) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            TextView textView = findViewById(R.id.text01);
                            textView.setText(resultUser.getUserName());
                        }
                    });
                } else {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.e("MAINACCCCCC","空空空空空");
                        }
                    });
                }
            }
        }.start();
    }
    
    1. 异常处理: 请务必在catch块中添加更详细的错误日志输出,以便定位问题所在:
    catch (Exception e) {
        Log.e("getUserByAccount", "查询用户信息发生错误: ", e);
        e.printStackTrace();
    }
    
    1. 数据库权限验证: 确认数据库连接时使用的账号具有查询指定表的权限。

    以上是对可能出现问题的分析及改进措施,根据这些指导排查代码应该能帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月14日
  • 创建了问题 3月12日

悬赏问题

  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词