2016-04-08 11 views
1

JAVA-ORACLE接続に標準のJDBCコードを使用しても機能しません。JAVA-JDBC-ORACLE接続の問題

これは以前に尋ねられるかもしれませんが、私は自分でデバッグすることができませんのでここで尋ねます。 ヘルプをリクエストしてください。

コード:

import java.sql.*; 
class OracleCon { 
    public static void main(String args[]) { 
    try { 
     // step1 load the driver class 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 

     // step2 create the connection object 
     Connection con = DriverManager.getConnection(
       "jdbc:oracle:thin:@localhost:1521:xe", "system", 
       "nikhil.nik"); 

     /* 
     * Hostname: Host system for the Oracle database. For your Express 
     * Edition database, the hostname is localhost. Port: Listener port. 
     * The default is 1521. SID: Database name. The default for Express 
     * Edition is xe. 
     */ 

     // step3 create the statement object 
     Statement stmt = con.createStatement(); 

     // step4 execute query 
     ResultSet rs = stmt.executeQuery("SELECT TEST_NAME FROM TEST1"); 
     // System.out.println(rs); 

     while (rs.next()) 
      System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " 
        + rs.getString(3)); 

     // step5 close the connection object 
     con.close(); 

    } catch (Exception e) { 
     System.out.println(e); 
    } 

} 

}

スタックトレース:

java.sql.SQLException: Fail to convert to internal representation 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) 
    at oracle.jdbc.driver.CharCommonAccessor.getInt(CharCommonAccessor.java:132) 
    at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:521) 
    at dbPrograms.OracleCon.main(OracleCon.java:31) 
+0

単一の列を選択しますが、結果の3つの列にアクセスします。 – wero

+0

'e.printStackTrace();'で完全なスタックトレースを表示します。あなたの方法は例外のすべての重要な情報を失います。 – Kayaman

+0

は、スタックトレースを投稿: ます。java.sql.SQLException:oracle.jdbc.driver.DatabaseError.throwSqlExceptionで \tを内部表現に変換するために失敗する(DatabaseError.java:112) \t oracle.jdbc.driver.DatabaseError.throwSqlExceptionで(DatabaseError.java:146)oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)oracle.jdbc.driver.CharCommonAccessor.getInt(CharCommonAccessor.java:132)で \tオラクルの \tで\t。 (OracleCon.java:31) – nik

答えて

2

あなたはカラムTEST_NAMEを選択しintとしてその値を抽出しました。 Oracleは値をそれに応じて変換できないため、この操作は失敗します。列の種類に適した方法をResultSetにしてください。

また、ResultSetでは1つの列を選択して3つの列にアクセスするため、選択コマンドを調整することもできます。

+0

こんにちはWero、 もう一度疑問があります。ここでコードで私は 'Emloyee'データベースを選択していません。したがって、データベースを選択する方法。たとえば、2つのデータベースに同じテーブルがある場合、値を取得する方法を考えてみましょう.'xe 'はSIDです。 – nik

+0

@NikhilKumarはOracleの専門家ではありません。既に行ったように、接続URLにデータベースを指定すると思います。 http://stackoverflow.com/questions/4832056/java-jdbc-how-to-connect-to-oracle-using-service-name-instead-of-sidが役立つ可能性があります。 – wero