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.jar
和 ojcbd5.jar
- 可以与 RDBMS 9.2.0 通信。所以其中任何一个都应该有效...
我有一个简单的 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.jar
和 ojcbd5.jar
- 可以与 RDBMS 9.2.0 通信。所以其中任何一个都应该有效...