Java执行语句不返回结果集中的字符串数据

时间:2015-01-15 17:33:46

标签: sql string oracle resultset

我有一个返回一条记录的简单SQL代码但是当我从Java执行它时,它不会返回记录的字符串部分,只返回数字。字段是VARCHAR2但不会被提取到我的结果集中。以下是代码。已编辑出数据库连接部分以便在论坛中发布,但它确实已连接。我还附上了输出。任何指导都将受到赞赏,因为我在网上的搜索已经空了。 -Greg

package testsql;

import java.sql.*;

public class TestSQL {

    String SQLtracknbr;
    int SQLtracklength;
    int numberOfColumns;
    String coltypename;
    int coldispsize;
    String SQLschemaname;

  public static void main(String[] args)
      throws ClassNotFoundException, SQLException
  {
    Class.forName("oracle.jdbc.driver.OracleDriver");

    DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());

        String url = "jdbc:oracle:thin:@oracam.corp.mot.com:1522:oracam";

        String SQLcode = "select DISTINCT tracking_number from sfc_unit_process_track where tracking_number = 'CAH15F6WW9'";

        System.out.println(SQLcode);

        Connection conn =
         DriverManager.getConnection(url,"report","report");

    conn.setAutoCommit(false);
      try (Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery(SQLcode)) {

          ResultSetMetaData rsmd = rset.getMetaData(); 

          while (rset.next()) {

        int numberOfColumns = rsmd.getColumnCount();
        boolean b = rsmd.isSearchable(1);
        String coltypename = rsmd.getColumnTypeName(1);
        int coldispsize = rsmd.getColumnDisplaySize(1);
        String SQLschemaname = rsmd.getSchemaName(1);

        String SQLtracknbr = rset.getString(1);
        int SQLtracklength = SQLtracknbr.length();

        if (SQLtracknbr == null)
              System.out.println("NULL**********************.");
        else
           System.out.println("NOT NULL.");

        System.out.println("numberOfColumns = " + numberOfColumns);
        System.out.println("column type = " + coltypename);
        System.out.println("column display size = " + coldispsize);
        System.out.println("tracking_number = " + SQLtracknbr);
        System.out.println("track number length = " + SQLtracklength);
        System.out.println("schema name = " + SQLschemaname);
          }
      }
    System.out.println ("*******End of code*******"); 
}
}

Java中执行的结果如下:

run:

select DISTINCT tracking_number from sfc_unit_process_track where tracking_number = 'CAH15F6WW9'

NOT NULL.
numberOfColumns = 1
column type = VARCHAR2
column display size = 30
tracking_number =
track number length = 0
schema name =
*******End of code*******
BUILD SUCCESSFUL (total time: 0 seconds)

1 个答案:

答案 0 :(得分:1)

这似乎是由您使用的驱动程序ojdbc7.jar与您要连接的数据库版本9i之间的不兼容造成的。

根据the JDBC FAQ部分" 支持的各种Oracle数据库版本与JDBC兼容的版本与JDK版本支持的是什么?",JDK 7/8驱动程序您正在使用的ojdbc7.jar仅支持Oracle 12c。

Oracle通常仅支持两个版本的客户端/服务器版本(请参阅My Oracle Support note 207303.1),并且从未以任何方式支持Oracle 12c和9i客户端和服务器。 JDBC当然略有不同,但它可能是相关的,因为驱动程序随Oracle软件一起安装。

您必须将数据库升级到支持的版本,或者 - 或许更实际地在短期内 - 使用更早的驱动程序。 2013年的Wayback Machine snapshot of the JDBC FAQ表示11.2.0 JDBC驱动程序(包括ojdbc6.jarojcbd5.jar)可以与RDBMS 9.2.0进行通信。所以其中任何一个都应该有用......