Oracle JDBC通过占位符可以查询可变长字段,不可查询固定长度字段

这个问题在半年前,花了我两天的时间才解决,现在刚好想起来,顺便记录一下以防忘了。

通过jdbc,预编译的sql,无法查询到固定长度的字段。

用例子说话:

创建一个表,只有一个字段,长度为固定的char类型。并插入一条数据。

create table tblchar

(  name char(20) );

在Java代码中使用预编译的SQL查询,无法查询到结果。而使用拼接的SQL,可以正常查询。

 1 public static void main(String[] args) {
 2         try {
 3             Class.forName("oracle.jdbc.driver.OracleDriver");
 4             String url = "jdbc:oracle:thin:@localhost:1521:XE";
 5             Connection connection = DriverManager.getConnection(url, "sys as sysdba",
 6                     "Changeme123");
 7             
 8             PreparedStatement statement = connection.prepareStatement(
 9                     "select * from tblchar t where t.name = ?");
10             statement.setString(1, "a");
11 
12             ResultSet resultSet = statement.executeQuery();
13             System.out.println("first query result is :");
14             while (null != resultSet && resultSet.next()) {
15                 System.out.println(resultSet.getString(1));
16             }
17             PreparedStatement statement2 = connection.prepareStatement(
18                     "select * from tblchar t where t.name = 'a'");
19 
20             ResultSet resultSet2 = statement2.executeQuery();
21             System.out.println("second query result is :");
22             while (null != resultSet2 && resultSet2.next()) {
23                 System.out.println(resultSet2.getString(1));
24             }
25             connection.close();
26         } catch (ClassNotFoundException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         } catch (SQLException e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         }
33     }
View Code

运行结果如下:

可变长度的查询过程略,无数实践已证明是可以查询的。

结论:

数据库表在设计时,尽量少用固定长度。

1. 固定长度浪费空间 2. JDBC预编译语句无法查询结果。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值