zoukankan      html  css  js  c++  java
  • 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预编译语句无法查询结果。

  • 相关阅读:
    PDO如何选择其他数据库的驱动
    PHP里关于时间日期大小写(Y,y,M,m...)
    数据库的基本操作
    数据库--PHP环境搭建
    曾经的中国互联网:多少巨头销声匿迹
    SQL 查找 45道练习题
    关于padding
    Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using password: YSE)
    centos 格式化硬盘并挂载,添加重启后生效
    windows2003服务器不显示桌面怎么办
  • 原文地址:https://www.cnblogs.com/kingsleylam/p/5046951.html
Copyright © 2011-2022 走看看