zoukankan      html  css  js  c++  java
  • 有关JDBC 无法获取到Oracle的char字段数据的问题

      深夜,同学发来求助讯息,经过了解得知:同学在使用JDBC连接Oracle数据库时,使用SQL语句死值可以正常获取到数据,但是一但把条件值都换成?,然后通过Preparement实例的setString方法注入SQL语句时,就出现查询不到任何内容的情况。

      在经过了大约3个小时的折腾之后,发现同学在Oracle数据库中的相关表的各字段类型都是char类型,而我们一般都是用varchar类型。

      【char类型和varchar类型的区别】:char类型是定长,字符不够空格来凑,最长可存2000个字符。

                    varchar类型是变长,输入多少就是多少,最长可存4000个字符。

      经过尝试,确定了Preparement实例的setString方法无法获取到Oracle数据库中相关表中的char类型字段,即使直接在表中有数据的情况下把相关字段的char类型修改为varchar类型,也不好使,推测是Oracle数据库内部存在的某种格式转换机制的兼容性问题吧,没有深究。

      重新建表,把相关字段设置成varchar类型,测试好用!

      所以,在学习java调用数据库时,建议Oracle数据库中的表格字符型字段的类型都设置成varchar类型,不然在以后再使用相关数据库框架时很可能也会报错,因为底层大部分还是JDBC代码,不要给自己找麻烦,哈哈哈哈……

      另外,在拜访过度娘之后,发现如果数据库表中的字段设置成了char类型,也不是没有操作的可能性,以下是检索到的相关方法(个人没有尝试,请先测试):

      注意:以下代码中的“4”需要根据Oracle数据库表中的相关字段类型的字符长度值来设置。(就是在创建表时设置字段类型的字符长度)

    conn.prepareStatement("select * from x where c = cast(?as char(4))")

     【防伪标签:ZWP】

      总结:1、把表相关字段类型由char类型改为varchar类型。

         2、JDBC的方法改为conn.prepareStatement("select * from x where c = cast(?as char(4))")。

     

    【敬畏能量 敬畏自然】
  • 相关阅读:
    BZOJ 1499 NOI2005 瑰丽华尔兹 单调队列
    大整数乘法python3实现
    GPIO
    Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
    TCP三次握手和四次挥手具体解释
    vector的成员函数解析
    Yii PHP Framework有用新手教程
    管道(Pipe)/createPipe
    android使用自己定义属性AttributeSet
    ASP连接sql server实例解析
  • 原文地址:https://www.cnblogs.com/moegarn/p/14352050.html
Copyright © 2011-2022 走看看