我有一个返回一条记录的简单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)
答案 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.jar
和ojcbd5.jar
)可以与RDBMS 9.2.0进行通信。所以其中任何一个都应该有用......