代码之家  ›  专栏  ›  技术社区  ›  mshafrir

solaris而不是windows中的oracle jdbc连接异常?

  •  1
  • mshafrir  · 技术社区  · 15 年前

    我有一些Java代码,它使用DRIVER Mealth.GeCon()连接到Oracle数据库。它在我的windows xp机器上运行得很好。但是,当在solaris机器上运行相同的代码时,我得到以下异常。两台机器都可以到达网络上的数据库机器。我已经包括了Oracle跟踪日志。

    Mar 23, 2010 12:12:33 PM org.apache.commons.configuration.ConfigurationUtils locate
    FINE: ConfigurationUtils.locate(): base is /users/theUser/ADCompare, name is props.txt
    Mar 23, 2010 12:12:33 PM org.apache.commons.configuration.ConfigurationUtils locate
    FINE: Loading configuration from the path /users/theUser/ADCompare/props.txt
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.OracleDriver connect
    FINE: OracleDriver.connect(url=jdbc:oracle:thin:@//theServer:1521/theService, info)
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.OracleDriver connect
    FINER: OracleDriver.connect() walletLocation:(null)
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.OracleDriver parseUrl
    FINER: OracleDriver.parseUrl(url=jdbc:oracle:thin:@//theServer:1521/theService)
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.OracleDriver parseUrl
    FINER: sub_sub_index=12, end=46, next_colon_index=16, user=17, slash=18, at_sign=17
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.OracleDriver parseUrl
    FINER: OracleDriver.parseUrl(url):return
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.OracleDriver connect
    FINER: user=theUser, password=******, database=//theServer:1521/theService, protocol=thin, prefetch=null, batch=null, accumulate batch result =true, remarks=null, synonyms=null
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.PhysicalConnection <init>
    FINE: PhysicalConnection.PhysicalConnection(ur="jdbc:oracle:thin:@//theServer:1521/theService", us="theUser", p="******", db="//theServer:1521/theService", info)
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.PhysicalConnection <init>
    FINEST: PhysicalConnection.PhysicalConnection() : connectionProperties={user=theUser, password=******, protocol=thin}
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.PhysicalConnection initialize
    FINE: PhysicalConnection.initialize(ur="jdbc:oracle:thin:@//theServer:1521/theService", us="theUser", access)
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.PhysicalConnection initialize
    FINE: PhysicalConnection.initialize(ur, us):return
    Mar 23, 2010 12:12:33 PM oracle.jdbc.driver.PhysicalConnection needLine
    FINE: PhysicalConnection.needLine()--no return
    java.lang.ArrayIndexOutOfBoundsException: 31
            at oracle.net.nl.NVTokens.parseTokens(Unknown Source)
            at oracle.net.nl.NVFactory.createNVPair(Unknown Source)
            at oracle.net.nl.NLParamParser.addNLPListElement(Unknown Source)
            at oracle.net.nl.NLParamParser.initializeNlpa(Unknown Source)
            at oracle.net.nl.NLParamParser.<init>(Unknown Source)
            at oracle.net.resolver.TNSNamesNamingAdapter.loadFile(Unknown Source)
            at oracle.net.resolver.TNSNamesNamingAdapter.checkAndReload(Unknown Source)
            at oracle.net.resolver.TNSNamesNamingAdapter.resolve(Unknown Source)
            at oracle.net.resolver.NameResolver.resolveName(Unknown Source)
            at oracle.net.resolver.AddrResolution.resolveAndExecute(Unknown Source)
            at oracle.net.ns.NSProtocol.establishConnection(Unknown Source)
            at oracle.net.ns.NSProtocol.connect(Unknown Source)
            at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1037)
            at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:282)
            at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:468)
            at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
            at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
            at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839)
            at java.sql.DriverManager.getConnection(DriverManager.java:582)
            at java.sql.DriverManager.getConnection(DriverManager.java:185)
    

    如果我使用 oracledatasource数据库 而不是通用的driverManager.getconnection()。

    你对不同环境下的行为为何不同有什么看法吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Steve B.    15 年前

    从线路上看tnsnames.ora有个错误

    java.lang.ArrayIndexOutOfBoundsException: 31
            at oracle.net.nl.NVTokens.parseTokens(Unknown Source)
            ...
            at oracle.net.resolver.TNSNamesNamingAdapter.loadFile(Unknown Source)
    

    我不了解solaris中的oracle配置,但假设它与win版本类似,可能您对该文件的格式有问题。你能从那个盒子通过sqlplus控制台连接吗?

        2
  •  1
  •   mshafrir    15 年前

    我忘记提到的一件事是,我的应用程序是为Java6构建的。oracle数据库是10g,但是不管出于什么原因,升级到11g版本的驱动程序(即ojdbc6_g.jar)解决了这个问题。

    推荐文章