java 参数化sql_Java中的参数化Oracle SQL查询?

我认为问题是你的数据类型是CHAR(9)而“滑铁卢”只有8个字符.

我假设这会返回预期的结果(LIKE和%).或者添加缺少的空间.

String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL LIKE ? ";

PreparedStatement prepStmt = conn.prepareStatement(sql);

prepStmt.setString(1, "Waterloo%");

ResultSet rs = prepStmt.executeQuery();

如果你的字符串具有灵活的长度,最好的方法是使用varchar而不是char.然后PreparedStatement将按预期工作.

解决方法是使用Oracle特定的setFixedCHAR方法(但如果可能,最好将数据类型更改为varchar).

以下内容来自Oracle的PreparedStatement JavaDoc:

数据库中的CHAR数据填充到列宽.这导致使用setCHAR()方法将字符数据绑定到SELECT语句的WHERE子句中的限制 – WHERE子句中的字符数据也必须填充到列宽以在SELECT语句中生成匹配.如果您不知道列宽,这尤其麻烦.

setFixedCHAR()可以解决这个问题.此方法执行非填充比较.

笔记:

>请记住将准备好的语句对象强制转换为OraclePreparedStatement以使用setFixedCHAR()方法.

>不需要对INSERT语句使用setFixedCHAR().数据库在插入数据时始终自动将数据填充到列宽.

以下示例演示了setString(),setCHAR()和setFixedCHAR()方法之间的区别.

// Schema is : create table my_table (col1 char(10));

// insert into my_table values ('JDBC');

PreparedStatement pstmt = conn.prepareStatement

("select count() from my_table where col1 = ?");

ResultSet rs;

pstmt.setString (1, "JDBC"); // Set the Bind Value

rs = pstmt.executeQuery(); // This does not match any row

// ... do something with rs

CHAR ch = new CHAR("JDBC ", null);

((OraclePreparedStatement)pstmt).setCHAR(1, ch); // Pad it to 10 bytes

rs = pstmt.executeQuery(); // This matches one row

// ... do something with rs

((OraclePreparedStatement)pstmt).setFixedCHAR(1, "JDBC");

rs = pstmt.executeQuery(); // This matches one row

// ... do something with rs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值