栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的参数化Oracle SQL查询?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 Valuers = pstmt.executeQuery();    // This does not match any row// ... do something with rsCHAR ch = new CHAr("JDBC      ", null);((OraclePreparedStatement)pstmt).setCHAr(1, ch); // Pad it to 10 bytesrs = 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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号