qq_42739901 2020-03-07 17:30 采纳率: 0%
浏览 1602

链接数据库时存在获取不到值,con为空的情况

错误信息:
java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.PreparedStatement java.sql.Connection.prepareStatement(java.lang.String)' on a null object reference
at com.example.ruanjian.dao.AdminDao.login(AdminDao.java:18)
at com.example.ruanjian.MainActivity$1.onClick(MainActivity.java:49)
主程序代码
图片说明
login代码:
图片说明
debug了一遍后,首先是这是整个app运行时的debug,此时con为空
图片说明
单独运行dbutil时:con有值:
图片说明
那么app运行时和这个函数单独运行时的区别是什么,为什么有时能获取到值有时获取不到?

dbutil代码:

package com.example.ruanjian.util;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbUtil {
    private String dbUrl="jdbc:mysql://192.168.0.104:3306/db_daily?useUnicode=true&characterEncoding=utf8"; // 数据库连接地址
    private String dbUserName="root"; // 用户名
    private String dbPassword=""; // 密码
    private String jdbcName="com.mysql.jdbc.Driver"; // 驱动名称
    /**
     * 获取数据库连接
     * @return
     * @throws Exception
     */
    public Connection getCon(){
        try {
            Class.forName(jdbcName);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Connection con = null;
        try {
            con = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return con;
    }
    /**
     * 关闭数据库连接
     * @param con
     * @throws Exception
     */
    public void closeCon(Connection con)throws Exception{
        if(con!=null){
            con.close();
        }
    }

    public static void main(String[] args) {
        DbUtil dbUtil=new DbUtil();
        try {
            dbUtil.getCon();
            System.out.println("数据库连接成功!");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("数据库连接失败");
        }
    }
}

basedao代码:

package com.example.ruanjian.dao;

import android.util.Log;

import java.sql.Connection;
import java.sql.SQLException;

import com.example.ruanjian.util.DbUtil;

/**
 *
 * @author llq
 *创建对数据库连接对象,整个项目与数据库打交道都用这一个对象.
 */
public class BaseDao {
    public Connection con = new DbUtil().getCon();
    public void closeDao(){
        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}



  • 写回答

2条回答 默认 最新

  • Elicve 2023-06-06 15:05
    关注

    我也一样,,,请问现在解决了吗

    评论

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择