Exception in thread "main" java.lang.NullPointerException怎么回事

packagecom.jdbc.dbutils;importjava.sql.Connection;importjava.sql.DriverManager;import... package com.jdbc.dbutils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class JdbcUtils {

//表示定义数据库的用户名
private final String USERNAME = "root";
//表示数据库密码
private final String PASSWORD = "admin";
//定义数据库的驱动信息
private final String DRIVER = "com.mysql.jdbc.Driver";
//定义访问数据库的地址
private final String URL = "jdbc:mysql://localhost:3306/menu";
//定义数据库的连接
private Connection connection ;
//定义sql语句的执行对象
private PreparedStatement pstmt;
//定义查询返回的结果集合
private ResultSet resultSet;
public JdbcUtils(){
try{
Class.forName(DRIVER);
System.out.println("注册驱动成功!!");
}catch (Exception e){

}
}

//定义获得数据库的链接
public Connection getConnection(){
try{
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
}catch (Exception e){

}
return connection;
}

public boolean updateByPreparedStatement(String sql,List<Object> params)
throws SQLException {
boolean flag = false;
int result = -1;//表示当用户执行添加删除和修改的时候所影响数据库的行数
pstmt = connection.prepareStatement(sql);
int index = 1;
if(params != null && !params.isEmpty()){
for(int i = 0;i < params.size();i++){
pstmt.setObject(index++,params.get(i));
}
}
result = pstmt.executeUpdate();
flag = result > 0 ? true : false;
return flag;
}

public static void main(String[] args){
JdbcUtils jdbcUtils = new JdbcUtils();
jdbcUtils.getConnection();
String sql = "insert into userinfo(username,pswd) values(?,?)";
List<Object> params = new ArrayList<Object>();
params.add("jack");
params.add("admin");
try {
boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
System.out.println(flag);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
错误:
Exception in thread "main" java.lang.NullPointerException
at com.jdbc.dbutils.JdbcUtils.updateByPreparedStatement(JdbcUtils.java:50)
at com.jdbc.dbutils.JdbcUtils.main(JdbcUtils.java:70)

50行:pstmt = connection.prepareStatement(sql);

70行:boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
展开
 我来答
徐雁航
2016-09-01 · TA获得超过201个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:64万
展开全部
对于这里connection为null的情况,只存在一种原因,那便是获取与数据库连接的时候连接失败。连接失败最容易的原因是,mysql服务忘记开启了。
前期调试中最好还是打印异常的,所以在获取连接方法的catch块中打印一下异常,然后错误定位就很清晰了。
追问
打开了,但是还是操作不了数据表
xjf5562
2016-09-01 · TA获得超过1190个赞
知道小有建树答主
回答量:896
采纳率:75%
帮助的人:743万
展开全部
你确定你连接数据库的部分正确吗?会不会返回的Connection为null?
你在主方法中测试一下:
Connection conn=jdbcUtils.getConnection();
if(conn==null).........//这里写个提示信息,表示连接为空。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
五芳斋JSH
2016-09-01 · 超过33用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:43.7万
展开全部
可以先把50行标注一下吗?这样找实在太累了..
更多追问追答
追问
50行:pstmt = connection.prepareStatement(sql);

70行:boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
追答
好吧,肯定是connection为空

大兄弟,你这个connection现在还是空呢,应该先调用getConnection()这个方法才执行才行哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式