当前位置:编程学习 > JAVA >>

Connection。createStatement()抛出 java.lang.NullPointerException 请大家帮忙

我在将该代码放到另一台电脑中时,原来运行正常的代码在另一台机器中

java.sql.Connection.createStatement() 方法竟然抛出了 java.lang.NullPointerException 异常。在JDK 帮助文档中没有找到抛出的原因。

两台机器使用同样的 WebLogic10.3 版本 ,数据库连接也完全一样。使用同样的JNDI 配置信息,

其代码如下:

// DbConnect.java
package gov.revenue.harbin.foreignTrade.tools;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DbConnect {

private static String jndi = "mytest";
private static String host = "t3://localhost:7001";

private static DbConnect handl = null;
private static DataSource ds = null;

private boolean isCreateDataSource(String jndi,String host){
boolean flag = false;
if (ds != null){
 flag = false;
} else {
Hashtable hsTable=null;
Context ctx=null;
Properties prop = new Properties();
     prop.put(Context.INITIAL_CONTEXT_FACTORY,
              "weblogic.jndi.WLInitialContextFactory");
     prop.put(Context.PROVIDER_URL, host);
     
     try {
ctx = new InitialContext(prop);
ds = (DataSource)ctx.lookup(jndi);
flag = true;
} catch (NamingException e) {
e.printStackTrace();
}     
}
return flag;
}

public Connection getConnection(){
Connection conn=null;

if(this.isCreateDataSource(jndi, host) == true){
try {
conn = ds.getConnection();
} catch (SQLException e) {
System.out.println("Get connection, process, or close statement exception: " + e.getMessage());
e.printStackTrace();
}
} else {
System.out.println("Get DataSource -->" + jndi + " Failed!");
}
return conn;
}

public boolean closeConnection (Connection conn,Statement stmt){
boolean flage = false;
if(stmt != null){
    try {
        stmt.close();
    }
    catch (Exception e) {
     flage = false;
        System.out.println("Close statement exception: " + e.getMessage());
    } 
//         finally {
//      stmt = null;
//     }

if(conn != null){
try{
conn.close();
}
    catch(Exception e){
     flage = false;
        System.out.println("Close connection exception: " + e.getMessage());
    } 
//     finally {
//      conn = null;
//     }
}
return flage;
}

public static synchronized DbConnect init() {
if (handl != null) {
return handl;
} else {
 handl = new DbConnect();
         return handl;
}
}
}


// Testtime.java
package gov.revenue.harbin.foreignTrade.test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import gov.revenue.harbin.foreignTrade.tools.DbConnect;

public class Testtime {
private static String strSql = "";
public static String showTime (){
String result = "";
String strSql = " select sysdate d from dual ";

DbConnect db = DbConnect.init();
Connection con = db.getConnection();
Statement stmt = null;
try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(strSql);
rs.next();
result = (String)rs.getString("d");
System.out.println(strSql);
System.out.println(result);
rs.close();

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
db.closeConnection(con, stmt);
}
return result;
}

}

// index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="gov.revenue.harbin.foreignTrade.test.Testtime" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    This is time is <%=Testtime.showTime() %> <br>
  </body>
</html>
--------------------编程问答-------------------- --------------------编程问答-------------------- conn为null吧! --------------------编程问答--------------------
mark 
配置完全一样怎么会出错呢
帮顶下 --------------------编程问答-------------------- 数据库也有两个吗?如果没有两个数据库,
把jndi重配下。 --------------------编程问答-------------------- if(conn != null && !conn.isClose()){
    conn.close();
}


感觉你Testtime()方法里有点问题,
问你,你的select sysdate d from dual 查的是什么,查出来是多少条记录,
那么你如此:
result = (String)rs.getString("d"); 
System.out.println(strSql); 
System.out.println(result); 
接受值输入对吗?
--------------------编程问答--------------------  我用的是 oracle9i 的数据库,

但是已经通过 Connection con = db.getConnection(); 初始化了啊! --------------------编程问答-------------------- ResultSet rs = stmt.executeQuery(strSql); 
rs.next(); 
result = (String)rs.getString("d"); 
Rs如果没有数据的话,你依然调用rs.getString肯定会出错。
最好是这样做
if(rs.next()) 
result = (String)rs.getString("d");  --------------------编程问答-------------------- 嗯,的确是,如果没有数据的确会出错,

可是我的测试 SQL 语句是 select sysdate d from dual 啊!

我觉得没有问题,但是控制台告诉我 java.sql.Connection.createStatement()  空指针异常,

问题还没解决,辛苦大家了!  --------------------编程问答-------------------- Connection没取到吧。
在这下面打印下嘛:
try{
Connection con = db.getConnection(); 
if (con==null)
{
...
}
}catch... --------------------编程问答-------------------- 查下数据库包加入进去没有
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,