错误信息:
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();
}
}
}