zoukankan      html  css  js  c++  java
  • cjdbc常有异常总结

    俾人在研究cjdbc 基本大部分的异常都碰到 要命 

    没办法 只能拿着源码调试 才找到解决办法


    1 ip地址配置错误

    在控制文件中

      <Controller port="25322" ipAddress="192.168.3.149" backlogSize="11">

    本人ip地址被封 换了159 所以这里没改 抛出这个异常 ipAddress必须是本机地址

    2012-05-16 15:49:32,390 INFO  controller.core.Controller Starting JMX server on
    host: 192.168.3.149
    java.net.BindException: Cannot assign requested address: JVM_Bind
            at java.net.PlainSocketImpl.socketBind(Native Method)
            at java.net.PlainSocketImpl.bind(Unknown Source)
            at java.net.ServerSocket.bind(Unknown Source)
            at java.net.ServerSocket.<init>(Unknown Source)


    2 数据库无法连接

    配置的数据库信息:

     <DatabaseBackend name="db_153" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.3.122:1521:orcl11g" connectionTestStatement="select * from dual">
           <DatabaseSchema gatherSystemTables="false" schemaName="LIAOMIN" dynamicPrecision="table">
          </DatabaseSchema>
          <ConnectionManager vLogin="test" rLogin="liaomin" rPassword="liaomin">
          <RandomWaitPoolConnectionManager poolSize="40" timeout="30"/>
          </ConnectionManager>
        </DatabaseBackend>

    无法连接会抛出以下异常


    2012-05-16 15:56:11,468 WARN  controller.virtualdatabase.testDB Error while init
    alizing database backend db_153 (java.sql.SQLException: Unable to connect to bac
    kend.)
    java.sql.SQLException: Unable to connect to backend.
            at org.objectweb.cjdbc.controller.backend.DatabaseBackend.checkDriverCom
    pliance(DatabaseBackend.java:1546)
            at org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAnd
    CheckBackend(VirtualDatabase.java:1409)
            at org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.forceE
    nableBackend(VirtualDatabase.java:1048)
            at org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enable
    AllBackends(VirtualDatabase.java:1155)



    3 收集 schema错误

    这个错误是因为在oracle中必须要指定schema  而且schema  的名字必须为大写

    <DatabaseBackend name="db_153" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.3.121:1521:orcl11g" connectionTestStatement="select * from dual">
    <!--
           <DatabaseSchema gatherSystemTables="false" schemaName="LIAOMIN" dynamicPrecision="table">
          </DatabaseSchema>
    -->
          <ConnectionManager vLogin="test" rLogin="liaomin" rPassword="liaomin">
          <RandomWaitPoolConnectionManager poolSize="40" timeout="30"/>
          </ConnectionManager>
        </DatabaseBackend>

    将注释的打开就不抛出这个错误了 


    2012-05-16 15:59:00,140 INFO  backend.DatabaseBackend.db_153 Gathering database
    schema
    2012-05-16 15:59:33,500 ERROR backend.DatabaseBackend.db_153 Runtime error while
     fetching schema
    java.lang.NullPointerException
            at org.objectweb.cjdbc.common.sql.schema.DatabaseSQLMetaData.getPrimaryK
    eys(DatabaseSQLMetaData.java:414)
            at org.objectweb.cjdbc.common.sql.schema.DatabaseSQLMetaData.createDatab
    aseSchema(DatabaseSQLMetaData.java:149)
            at org.objectweb.cjdbc.controller.backend.DatabaseBackendMetaData.create
    DatabaseSchemaDynamically(DatabaseBackendMetaData.java:899)
            at org.objectweb.cjdbc.controller.backend.DatabaseBackendMetaData.getDat
    abaseSchema(DatabaseBackendMetaData.java:936)



    4 创建恢复日志表错误

    cjdbc默认给出的例子是hsql的

    <RecoveryLog driver="org.hsqldb.jdbcDriver"
            url="jdbc:hsqldb:hsql://localhost:9003" login="TEST" password="">
            <RecoveryLogTable tableName="RECOVERY" idColumnType="BIGINT NOT NULL"
              vloginColumnType="VARCHAR NOT NULL" sqlColumnType="VARCHAR NOT NULL"
              extraStatementDefinition=",PRIMARY KEY (id)"/>
            <CheckpointTable tableName="CHECKPOINT"
              checkpointNameColumnType="VARCHAR NOT NULL"/>
            <BackendTable tableName="BACKEND"
              databaseNameColumnType="VARCHAR NOT NULL"
              backendNameColumnType="VARCHAR NOT NULL"
              checkpointNameColumnType="VARCHAR NOT NULL"/>
            <DumpTable tableName="DUMP" dumpNameColumnType="VARCHAR NOT NULL"
              dumpDateColumnType="VARCHAR NOT NULL"
              dumpPathColumnType="VARCHAR NOT NULL"
              dumpFormatColumnType="VARCHAR NOT NULL"
              checkpointNameColumnType="VARCHAR NOT NULL"
              backendNameColumnType="VARCHAR NOT NULL"
              tablesColumnType="VARCHAR NOT NULL"/>
          </RecoveryLog>

    用于使用的oracle数据库   生成的创建表的sql就会出错 比如idColumnType="BIGINT NOT NULL"

    BIGINT  在oracle中是没有这个数据类型的 这里给出oracle的正确的 我也配置了n久


     <RecoveryLog driver="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@192.168.3.153:1521:orcl" login="RECOVERYLOG" password="liaomin">
            <RecoveryLogTable tableName="RECOVERY_REAL" idColumnType="NUMBER NOT NULL PRIMARY KEY"
              vloginColumnType="VARCHAR2(2000) NOT NULL"  transactionIdColumnType="NUMBER NOT NULL" sqlColumnType="VARCHAR2(2000) NOT NULL"
              />
            <CheckpointTable tableName="CHECKPOINT_REAL"
              checkpointNameColumnType="VARCHAR2(2000) NOT NULL" requestIdColumnType="NUMBER" />
            <BackendTable tableName="BACKEND_REAL"
              databaseNameColumnType="VARCHAR2(2000) NOT NULL"
              backendNameColumnType="VARCHAR2(2000) NOT NULL"
              checkpointNameColumnType="VARCHAR2(2000) NOT NULL"/>
            <DumpTable tableName="DUMP_REAL" dumpNameColumnType="VARCHAR2(2000) NOT NULL"
              dumpDateColumnType="VARCHAR2(2000) NOT NULL"
              dumpPathColumnType="VARCHAR2(2000) NOT NULL"
              dumpFormatColumnType="VARCHAR2(2000) NOT NULL"
              checkpointNameColumnType="VARCHAR2(2000) NOT NULL"
              backendNameColumnType="VARCHAR2(2000) NOT NULL"
              tablesColumnType="VARCHAR2(2000) NOT NULL"/>
          </RecoveryLog>




    java.lang.RuntimeException: Unable to initialize the database: java.sql.SQLException: Unable to create table RECOVERY_REAL (ORA-00902: 无效数据类型
    )
    at org.objectweb.cjdbc.controller.recoverylog.RecoveryLog.checkRecoveryLogTables(RecoveryLog.java:1976)
    at org.objectweb.cjdbc.controller.xml.DatabasesParser.endElement(DatabasesParser.java:963)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1528)
    at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
    at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
    at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
    at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:500)
    at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
    at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
    at org.objectweb.cjdbc.controller.xml.DatabasesParser.readXML(DatabasesParser.java:268)
    at org.objectweb.cjdbc.controller.xml.DatabasesParser.readXML(DatabasesParser.java:316)
    at org.objectweb.cjdbc.controller.core.Controller.addVirtualDatabases(Controller.java:179)
    at org.objectweb.cjdbc.controller.core.Controller.loadXmlConfiguration(Controller.java:529)
    at org.objectweb.cjdbc.controller.core.ControllerFactory.setUpVirtualDatabase(ControllerFactory.java:408)
    at org.objectweb.cjdbc.controller.xml.ControllerParser.configureVirtualDatabase(ControllerParser.java:668)
    at org.objectweb.cjdbc.controller.xml.ControllerParser.startElement(ControllerParser.java:321)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1488)
    at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
    at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
    at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
    at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:500)
    at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
    at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
    at org.objectweb.cjdbc.controller.xml.ControllerParser.readXML(ControllerParser.java:127)
    at org.objectweb.cjdbc.controller.xml.ControllerParser.readXML(ControllerParser.java:177)
    at org.objectweb.cjdbc.controller.xml.ControllerParser.readXML(ControllerParser.java:206)
    at org.objectweb.cjdbc.controller.core.ControllerFactory.setUpByXml(ControllerFactory.java:250)
    at org.objectweb.cjdbc.controller.core.ControllerFactory.setup(ControllerFactory.java:289)
    at org.objectweb.cjdbc.controller.core.ControllerFactory.getController(ControllerFactory.java:315)
    at org.objectweb.cjdbc.controller.core.Controller.main(Controller.java:716)
    2012-05-16 16:06:33,078 WARN  controller.core.Controller The virtual database could not be added to the controller. (because of org.xml.sax.SAXException: Failed to check JDBC Recovery log tables.)
    org.xml.sax.SAXException: Failed to check JDBC Recovery log tables.



    5 oracle驱动没有放置到drivers目录


    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
            at org.objectweb.cjdbc.controller.connection.DriverClassLoader.findClass
    (DriverClassLoader.java:115)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Unknown Source)
            at org.objectweb.cjdbc.controller.connection.DriverManager.loadDriver(Dr
    iverManager.java:284)
            at org.objectweb.cjdbc.controller.connection.DriverManager.getConnection
    (DriverManager.java:147)
            at org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.g
    etConnectionFromDriver(AbstractConnectionManager.java:196)
            at org.objectweb.cjdbc.controller.connection.AbstractPoolConnectionManag
    er.initializeConnections(AbstractPoolConnectionManager.java:149)
            at org.objectweb.cjdbc.controller.connection.AbstractPoolConnectionManag
    er.initializeConnections(AbstractPoolConnectionManager.java:119)
            at org.objectweb.cjdbc.controller.backend.DatabaseBackend.initializeConn
    ections(DatabaseBackend.java:500)

  • 相关阅读:
    082、Java数组之数组传递之简化理解
    081、Java数组之数组传递
    080、Java数组之二维数组的定义及使用
    079、Java数组之数组的静态初始化
    078、Java数组之数组的引用传递
    077、Java数组之分步实现数组操作
    076、Java数组之定义数组
    075、Java面向对象之定义匿名对象
    074、Java面向对象之构造方法重载
    073、Java面向对象之利用构造方法为属性赋值
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331373.html
Copyright © 2011-2022 走看看