当前位置: 技术问答>java相关
JDBC奇怪问题
来源: 互联网 发布时间:2015-01-05
本文导语: 我在Oracle中建立了一个表,在表中有两个字段,是userid和password,其中userid是varchar(30), password是char(20),用PrepareStatement查询数据表 String queryStmt = "SELECT USERID FROM TAB_USER_INFO WHERE USERID= ? and PASSWORD = ?"; PreparedStat...
我在Oracle中建立了一个表,在表中有两个字段,是userid和password,其中userid是varchar(30), password是char(20),用PrepareStatement查询数据表
String queryStmt = "SELECT USERID FROM TAB_USER_INFO WHERE USERID= ? and PASSWORD = ?";
PreparedStatement stmt = conn.prepareStatement(queryStmt);
stmt.setString(1, "sunny");
stmt.setString(2, "14");
rs = stmt.executeQuery();
其中在数据库中含有包含"sunny"和"14"的项,可是结果集为空,请大侠指教。是不是char和varchar的区别?
String queryStmt = "SELECT USERID FROM TAB_USER_INFO WHERE USERID= ? and PASSWORD = ?";
PreparedStatement stmt = conn.prepareStatement(queryStmt);
stmt.setString(1, "sunny");
stmt.setString(2, "14");
rs = stmt.executeQuery();
其中在数据库中含有包含"sunny"和"14"的项,可是结果集为空,请大侠指教。是不是char和varchar的区别?
|
当然有区别啊。要不干嘛要分成两种类型呢。
char是固定长度的。也就是说如果你的数据不够长度时,数据库会自动给你加上空格以填充其长度直到所定义的长度。
varchar2是可变长度的。也就是说输入多长,就存多长。
具体而言。你把password定义成char(20)。
也就是说你查询时要这样写:stmt.setString(2, "14 ");
当然oracle有填充空格的函数。也可以用。
或者修改你的sql语句:
SELECT USERID FROM TAB_USER_INFO WHERE USERID= ? and rtrim(PASSWORD) = ?
也可以。
char是固定长度的。也就是说如果你的数据不够长度时,数据库会自动给你加上空格以填充其长度直到所定义的长度。
varchar2是可变长度的。也就是说输入多长,就存多长。
具体而言。你把password定义成char(20)。
也就是说你查询时要这样写:stmt.setString(2, "14 ");
当然oracle有填充空格的函数。也可以用。
或者修改你的sql语句:
SELECT USERID FROM TAB_USER_INFO WHERE USERID= ? and rtrim(PASSWORD) = ?
也可以。