问一个菜鸟级问题,这个程序总是报NullPointerException异常,数据库连接都正确,就是执行到pstmt = conn.prepareStatement(sql);就出错怎么回事啊!各位高手指教,先谢过了!

cut21 2008-03-06 11:11:56
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.sql.*;
public class Textclass {
public static void main(String []args){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;// string类型的sql语句
sql = "select count (*) from tb_student where Sno=1;";// 查找tb_student表是否存在中的sno是否有等于1的一条记录
try {
conn = Myjdbc.connection;// 建立数据库连接
pstmt = conn.prepareStatement(sql);// 执行上面的sql语句----就是这里出错
rs = pstmt.executeQuery();// 获取数据库操作结果
if (rs.next()) {// 是否有下一条记录
if (rs.getInt(1) > 0)// 如果有一条返回true
System.out.println("有记录");
}
} catch (SQLException e) {// 捕获sql异常
e.printStackTrace();
System.out.print("出现异常");
}
}
}
...全文
630 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
phsyf 2008-03-07
  • 打赏
  • 举报
回复
楼上的正解
zzr82528 2008-03-07
  • 打赏
  • 举报
回复
最好不要直接调用静态变量,如果非要高用静态变量,那初始化就应该在静太块中进行,因为通过类名调用静态变量,并没有对象被创建,构造函数不会被调用。
zzr82528 2008-03-07
  • 打赏
  • 举报
回复

import java.sql.*;//引入sql包

public class Myjdbc {// 负责连接数据库的类
private static Connection connection = null;// 先定义一个连接为空来连接数据库
private Myjdbc() {
getCon();
}

public static Connection getCon() {
if(connection == null){
try {
Class.forName("com.mysql.jdbc.Driver");// 连接Mysql固定方法

connection = DriverManager
.getConnection("jdbc:mysql://localhost/jxjpd?"
+ "user=root&password=123");
System.out.print("连接成功");
} catch (SQLException ex) {
// 捕捉SQL异常
System.out.println("SQLException: " + ex.getMessage());// 输出各种异常的信息
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
System.out.print("出现SQL异常");

} catch (ClassNotFoundException e) {// 捕获找不到驱动包异常
e.printStackTrace();
System.out.print("出现ClassNotFound异常");
}
}
return connection;
}
}



如果考虑多线程问题,最好加同步关键字。

取connection时使用Myjdbc.getCon()方法。
conn = Myjdbc.connection;// 建立数据库连接
改为conn = Myjdbc.getCon();
cut21 2008-03-07
  • 打赏
  • 举报
回复
以下是我的Myjdbc类

import java.sql.*;//引入sql包

public class Myjdbc {// 负责连接数据库的类
public static Connection connection = null;// 先定义一个连接为空来连接数据库
public Myjdbc() {
getCon();
}

private Connection getCon() {
try {
Class.forName("com.mysql.jdbc.Driver");// 连接Mysql固定方法

connection = DriverManager
.getConnection("jdbc:mysql://localhost/jxjpd?"
+ "user=root&password=123");
System.out.print("连接成功");
} catch (SQLException ex) {
// 捕捉SQL异常
System.out.println("SQLException: " + ex.getMessage());// 输出各种异常的信息
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
System.out.print("出现SQL异常");

} catch (ClassNotFoundException e) {// 捕获找不到驱动包异常
e.printStackTrace();
System.out.print("出现ClassNotFound异常");
}
return connection;
}
}
bt_lose 2008-03-06
  • 打赏
  • 举报
回复
这样改就可以不需要初始化了.....

public class Myjdbc {// 负责连接数据库的类
public static Connection connection = null;// 先定义一个连接为空来连接数据库
static {
getCon();
}

private static void getCon() {
try {
Class.forName("com.mysql.jdbc.Driver");// 连接Mysql固定方法

connection = DriverManager
.getConnection("jdbc:mysql://localhost/jxjpd?"
+ "user=root&password=123");
} catch (SQLException ex) {
// 捕捉SQL异常
System.out.println("SQLException: " + ex.getMessage());// 输出各种异常的信息
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());

} catch (ClassNotFoundException e) {// 捕获找不到驱动包异常
e.printStackTrace();
}
}
}

bootupnow 2008-03-06
  • 打赏
  • 举报
回复
conn = Myjdbc.connection;// 建立数据库连接
很显然,你的conn没有指向一个Connection对象,而是null,所以下一步conn.prepareStatement(sql)的时候就抛出异常了。

conn = DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD); // 这里才是得到一个Connection对象
bt_lose 2008-03-06
  • 打赏
  • 举报
回复
Myjdbc.connection;// 建立数据库连接

很明显你定义的Myjdbc类中的静态成员connection没有在调用前初始化.....

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧