这是JAVA的类的代码:
package sqlpackage;
import java.sql.*;
public class getNewsId {
public long getId() {
Connection con = null;
PreparedStatement pStatement = null;
String strSql = "select myseq.nextval from dual";
ResultSet res = null;
long id = 0;
try {
con = oracle.getCon();
pStatement = con.prepareStatement(strSql);
res = pStatement.executeQuery();
while (res.next()) {
id = res.getLong(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
oracle.closeRes(res);
oracle.closeStatement(pStatement);
oracle.closeCon(con);
}
return id;
}
}
然后我在JSP页面是这样做的:
getNewsId getnewid = new getNewsId();
long newId = getnewid.getId();
out.print(newId);
%>
发送到Tomcat去调试的时候,提示出错信息如下:
java.lang.NullPointerException
sqlpackage.getNewsId.getId(getNewsId.java:15)
上面的内容,我看了一下,是在第15行的这一句:pStatement = con.prepareStatement(strSql);
请问一下各位老师是什么问题?因为我直接调试这个类,是可以获取ID,并向数据库中写记录的,现在头疼的就是,在JSP文件里调用数据库查询、更新、删除、插入几个类(自己写的)都是这种问题,所以觉得肯定什么地方没弄对,GOOGLE了一上午也没找到解决办法。
问题补充:
liguangwen 写道
pStatement = con.prepareStatement(strSql);
如果15行是这句的话说明 con 为null
while (res.next()) {
如果15行是这句的话 res为null
汗,关键是怎么回事啊?如果为空的话为什么我单独建个类,也按照同样的声明该类的代码,却可以在终端调试出来?
问题补充:这是建立管理和关闭连接的类
package sqlpackage;
import java.sql.*;
public class oracle {
private static final String sqlJar = "oracle.jdbc.OracleDriver";
private static final String sqlUrl = "jdbc:oracle:thin:@192.168.1.153:1521:orcl";
private static final String sqlUser = "sys as SYSDBA";
private static final String sqlPass = "2012";
/**
* 建立连接
* @return
* Connection
*/
public static Connection getCon() {
Connection con = null;
try {
Class.forName(sqlJar);
con = DriverManager.getConnection(sqlUrl,sqlUser,sqlPass);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
问题补充:
yanq12 写道
引用
con = oracle.getCon();
这个没有获取到con还 NULL 所以就报错了
我把oracle类的方法贴出来了,怎么会没获取到呢?
问题补充:
kendylxy 写道
从异常来看,未获得到数据库连接也就是说con = oracle.getCon();这句话获取的con是空,请检查oracle.getCon();方法能否获得数据库连接。
我已经把相关的方法贴出来了,麻烦帮我看看。
问题补充:
kendylxy 写道
看看这个方法有没有异常
public static Connection getCon() {
Connection con = null;
try {
Class.forName(sqlJar);
con = DriverManager.getConnection(sqlUrl,sqlUser,sqlPass);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
打一下获取到的con看看,System.out.println(con); 或者加断点debug
我在oracle建了一个main方法,然后填写如下代码:
public static void main(String args[]) {
Connection con = null;
con = oracle.getCon();
}
正常编译通过,内容如下:
oracle.jdbc.driver.T4CConnection@705b40
麻烦再帮忙看一下!!!