2

Oracle 已经宣布 11g R2 支持 IPV6,而 ojdbc6.jar 是正确的。

但是当我测试它时,我得到了异常,你解决了吗?

我的测试代码是:

import java.sql.SQLException;
import java.util.Properties;

public class Test {

final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";

/**
* @param args
* @throws SQLException 
*/

public static void main(String[] args) throws SQLException {

// TODO Auto-generated method stub
java.sql.Connection conn=null; 

String url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=
[fe80::b056:5cff:fe78:b672])(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=fnstdb1))";

try
{
Class.forName(sDBDriver);
conn = DriverManager.getConnection(url,"scott","fnst1234");
}
catch (Exception e) 
{
System.out.println("ERROR:"+e.getMessage()); 
} 
finally
{
System.out.println("连接是否关闭:"+conn.isClosed());
conn.close();
}
}

}

我使用以下cmd:

java -cp ojdbc6.jar -Djava.net.preferIPv6Addresses=true Test

但结果是:ERROR:NL Exception was generated

怎么了?

4

1 回答 1

1

我已经解决了这个问题。以下显示了我做了什么:

程序

  1. 编辑$DB_HOME\NETWORK\ADMIN\listener.ora文件以允许 oracle 侦听 ip 和端口。例如:(ADDRESS = (PROTOCOL = TCP)(HOST = [fe80::221:97ff:fe66:1fa9%4])(PORT= 1521))

  2. 重新启动监听器。跑:LSNRCTL stop/start

  3. 在某些应用程序(javase、connection-pool、lookup)中使用 ojdbc6.jar: jdbc:oracle:thin:@[fe80::221:97ff:fe66:1fa9]:1521:orcl

  4. 结果成功了!!

演示

  1. listener.ora中的ip地址必须加上“%4”,否则会失败。

  2. ipv6 地址必须在“[”和“]”中,否则会失败。

  3. oracle的文档声明使用ipv6必须设置jvm选项

    java.net.preferIPv6Addresses=true

但不管它是否设置!

于 2012-05-21T09:50:52.200 回答