java为oracle VARCHAR2返回空字符串值
我有下面的代码,它似乎工作正常,但它没有显示personCode字符串的任何值。PERSON_代码是Oracle 9i数据库中的VARCHAR2 我在项目中使用JavaSE1.7和ojdbc7.jar。我是Java新手,有人能帮我吗java为oracle VARCHAR2返回空字符串值,java,oracle,jdbc,string,varchar2,Java,Oracle,Jdbc,String,Varchar2,我有下面的代码,它似乎工作正常,但它没有显示personCode字符串的任何值。PERSON_代码是Oracle 9i数据库中的VARCHAR2 我在项目中使用JavaSE1.7和ojdbc7.jar。我是Java新手,有人能帮我吗 private static void GetEmployee(String input) { String output = ""; Connection con=null; PreparedStatement stmt = null; String sql ="
private static void GetEmployee(String input) {
String output = "";
Connection con=null;
PreparedStatement stmt = null;
String sql ="SELECT ALL BADGE_NUMBER, PERSON_CODE FROM BADGETABLE WHERE BADGE_NUMBER = ?";
try {
//load driver
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:username/password@host:1521:database");
//declaring statement
stmt = con.prepareStatement(sql);
stmt.setString(1, input);
// execute query
ResultSet rows = stmt.executeQuery();
int i = 0;
while(rows.next()) {
i++;
String badgeCode = rows.getString(1);
String personCode = rows.getString(2);
String personType = rows.getString(3);
System.out.println("Badge number: " + badgeCode);
System.out.println("Employee ID: " + personCode);
}
System.out.println("Number of results: " + i);
rows.close(); // All done with that resultset
stmt.close(); // All done with that statement
con.close(); // All done with that DB connection
}
catch (SQLException e) {
System.err.println(e);
}
catch (ClassNotFoundException e) {
System.err.println(e);
}
return;
}
查看您的查询:
String sql = "SELECT ALL BADGE_NUMBER, PERSON_CODE FROM BADGETABLE WHERE BADGE_NUMBER = ?";
以下代码将引发异常:
String badgeCode = rows.getString(1);
String personCode = rows.getString(2);
// there is no third column in your resultset
String personType = rows.getString(3);
您可以将查询更改为(如果不想使用列名):
或指定第三列:
String sql = "SELECT ALL BADGE_NUMBER, PERSON_CODE ,PERSON_TYPE FROM BADGETABLE WHERE BADGE_NUMBER = ?";
并使用列名检索数据:
String badgeCode = rows.getString("BADGE_NUMBER");
String personCode = rows.getString("PERSON_CODE");
String personType = rows.getString("PERSON_TYPE");
另外,将close()
语句移动到finally
块下:
} finally {
try { rows.close(); } catch (Exception e) { }
try { stmt.close(); } catch (Exception e) { }
try { con.close(); } catch (Exception e) { }
}
忽略SQL中的
all
,基本问题是当SQL查询仅选择2个字段时,您试图获取3个字段:
从BADGETABLE中选择所有徽章编号,个人代码。我很高兴回答,我解决了这个问题,但是,在我的代码中,这是一个非常漫长和痛苦的搜索,而事实上,问题实际上是在我的Glassfish服务器中 我在这个网站上的某个地方看到有人有类似的问题,他们删除了一些jar,名称如下:ojdbc18???.jar。当我搜索这个的时候,我没有找到任何东西,所以我继续前进 拔出大部分头发后,我决定开始在WEB服务器上浏览,果然,WEB服务器的lib dir中还有其他jar,我的应用程序可以看到这些jar 那些罐子是ojdbc14???.jar。完全是怪胎。一旦我删除了那些ojdbc14,一切都很好 为此,搜索您的类路径并确保找不到类似jar的类 祝你好运,
Nick我在使用时遇到了同样的问题:
我的类路径上没有任何其他Oracle jar,这对其他人来说是个问题,但当我从ojdbc7.jar切换到ojdbc6_g.jar时,这个问题就解决了。这是驱动程序版本11.2.0.3.0,在12c下载部分。使用时出现相同问题:
Oracle 9i Enterprise Edition 64bit 9.2.0.8.0 - on Sun Server Sun OS 10.
JDBC 12.1.0.2.0 - ojdbc7.jar (thin driver)
manifest info: Created-By: 20.75-b01 (Sun Microsystems Inc.)
Implementation Vendor: Oracle Corporation Implementation-Version: 12.1.0.2.0
对我来说,这不是最好的解决方案,但它很有效:
select to_clob(field_name) as field_name from table_name
此外,如果您确定字段的长度,此解决方案可能会有所帮助:
select cast(field_name as char(10)) as field_name from table_name
问题在于ojdbc8.jar驱动程序与Oracle 9i之间的不兼容,这一点鲜为人知。用ojdbc6.jar替换驱动程序ojdbc8.jar,问题就会解决。我在使用Weblogic12时也遇到了同样的问题。我必须替换Weblogic12中的驱动程序来创建数据源。下面是一个小测试的链接,显示了问题:
祝您好运。@user2369812您是否验证了PERSON_代码具有给定徽章号码的非空数据?@ThorbjørnRavnAndersen-,它只是强制执行默认行为-即不区分
。多余的,真的,但有效。很抱歉造成混淆,但我已经从代码中删除了这一行。我试图消除字段以查看问题所在。我的问题肯定是Oracle中的varchar2字段。它在Java中以空字符串的形式返回。当您在SQL plus中执行查询时,该列的值是多少?上帝保佑您!因为这对我来说很有帮助-有没有一种方法可以在查询结果窗口中显示正确的文本,而不必关闭许多文本列?
select cast(field_name as char(10)) as field_name from table_name