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

Java executed statement not returning string data in resultset

我有一个简单的 SQL 代码,它 return 是一条记录,但是当我从 Java 执行它时,它不会 return 记录的字符串部分, 只有数字。这些字段是 VARCHAR2,但不会提取到我的结果集中。以下是代码。数据库连接部分已被删除以便在论坛中发布,但它确实连接了。我还附上了输出。任何指导将不胜感激,因为我在网络上的搜索 return 是空的。 -格雷格

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)

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

根据 the JDBC FAQ 部分“各种受支持的 Oracle 数据库版本与 JDBC 兼容版本与受支持的 JDK 版本有哪些?” ,您使用的 JDK 7/8 驱动程序 ojdbc7.jar 仅支持 Oracle 12c。

Oracle 通常仅支持 client/server 两个不同版本的版本(请参阅 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 通信。所以其中任何一个都应该有效...