这些程序我是从网上复制过来的,如果我不改变他的connection连接代码在oracle sql/pl运行是正常的
我把 // conn = DriverManager.getConnection("jdbc:default:connection:");这段代码改成
String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
String DBURL = "jdbc:oracle:thin:@127.0.0.1:1521:MSDN" ;
String DBUSER = "SCOTT" ;
String DBPASSWORD = "TIGER" ; conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
这样在oracle/pl就报一下错误
ORA-29532: Java 调用被未捕获的 Java 例外终止: java.lang.NullPointerException
但是java创建的方法我在myeclipse运行的时候是正确的。请各位大侠帮忙看一下是什么问题呢。
我为什么要用127.0.0.1因为我要在oracle里面写一个工具,这样我以后方便调用其他的IP的oracle服务器现在是本地127.0.0.1也许根据需求可能会改成192.168.1.102,这个我会用参数传过去的
create or replace and compile java source named test4 as
import java.sql. * ;
import java. text .DateFormat;
import java. text .SimpleDateFormat;
import java.util. * ;
import java.util.Date;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class Test4
{
static public String message(String name) {
String sql = " select sysdate as dd from dual";
String tmpStr = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
Connection conn = null ;
String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
String DBURL = "jdbc:oracle:thin:@127.0.0.1:1521:MSDN" ;
String DBUSER = "SCOTT" ;
String DBPASSWORD = "TIGER" ;
try
{
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
// conn = DriverManager.getConnection("jdbc:default:connection:");
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs. next ())
tmpStr = rs.getString("dd");
else
tmpStr = name;
}
catch(SQLException e)
{
System.err.println(e.getMessage());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
rs. close ();
pstmt. close ();
/**/ /* if((conn!=null)||!conn.isClosed())
conn.close(); */
}
catch(SQLException e)
{
System.err.println(e.getMessage());
}
}
return tmpStr;
}
}/
2 发布JAVA程序create or replace function test4 (name varchar2 ) return varchar2
as language java name
' Test4.message(java.lang.String) return java.lang.String ' ;
/ 3 使用发面的JAVA程序select test4( ' xx ' ) from dual ;
我把 // conn = DriverManager.getConnection("jdbc:default:connection:");这段代码改成
String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
String DBURL = "jdbc:oracle:thin:@127.0.0.1:1521:MSDN" ;
String DBUSER = "SCOTT" ;
String DBPASSWORD = "TIGER" ; conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
这样在oracle/pl就报一下错误
ORA-29532: Java 调用被未捕获的 Java 例外终止: java.lang.NullPointerException
但是java创建的方法我在myeclipse运行的时候是正确的。请各位大侠帮忙看一下是什么问题呢。
我为什么要用127.0.0.1因为我要在oracle里面写一个工具,这样我以后方便调用其他的IP的oracle服务器现在是本地127.0.0.1也许根据需求可能会改成192.168.1.102,这个我会用参数传过去的
create or replace and compile java source named test4 as
import java.sql. * ;
import java. text .DateFormat;
import java. text .SimpleDateFormat;
import java.util. * ;
import java.util.Date;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class Test4
{
static public String message(String name) {
String sql = " select sysdate as dd from dual";
String tmpStr = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
Connection conn = null ;
String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
String DBURL = "jdbc:oracle:thin:@127.0.0.1:1521:MSDN" ;
String DBUSER = "SCOTT" ;
String DBPASSWORD = "TIGER" ;
try
{
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
// conn = DriverManager.getConnection("jdbc:default:connection:");
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs. next ())
tmpStr = rs.getString("dd");
else
tmpStr = name;
}
catch(SQLException e)
{
System.err.println(e.getMessage());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
rs. close ();
pstmt. close ();
/**/ /* if((conn!=null)||!conn.isClosed())
conn.close(); */
}
catch(SQLException e)
{
System.err.println(e.getMessage());
}
}
return tmpStr;
}
}/
2 发布JAVA程序create or replace function test4 (name varchar2 ) return varchar2
as language java name
' Test4.message(java.lang.String) return java.lang.String ' ;
/ 3 使用发面的JAVA程序select test4( ' xx ' ) from dual ;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货