JDBC模糊查询参数的注入的注意点

笔者刚开始是这样写sql语句的
String sql="SELECT * FROM bookBasicInfo,bookTypeInfo WHERE
    bookBasicInfo.BelongType=bookTypeInfo.BookTypeID
        AND bookBasicInfo.bookName like %?%";
采用参数注入
ps.setString(1,  bookName);
但是在执行的过程中,java跑出如下异常
java.sql.SQLException: ORA-00911: 无效字符

所以,对于这样的模糊查询的注入与一般的参数注入有很大的不同
于是,笔者改成如下形式注入,就成功运行出结果了。
String sql="SELECT * FROM bookBasicInfo,bookTypeInfo WHERE
    bookBasicInfo.BelongType=bookTypeInfo.BookTypeID
        AND bookBasicInfo.bookName like ?";
ps.setString(1,  "%"+bookName+"%");

时间: 2024-07-29 10:56:01

JDBC模糊查询参数的注入的注意点的相关文章

ajax交互servlet返回数据和jdbc模糊查询-中文-已经设置了UTF-8和解决了乱码

1.编码是将字符按一定翻译方式转换成字节存储在内存或外存中,解码是按照一定翻译方式将存储中的字节转换成字符. 2.ASCII是单字节,最高位总为0,相当于只占用了一个字节的7位,2^7=128个字符,相当于键盘上的128个键,有大小写因为字母,有*,%¥#@!+....等这些可显示字符,也有不可以显示的控制符F1,ctr... 而ISO-8859-1是启用了ASCII码的最高位,理论上是能再多128位,实际上没用掉这么多,至于多了那些,你们自己查下表 UTF-8是可变长的,具体中文几个字节,怎么

jdbc 模糊查询和prepareStatement中文乱码解决方案

1.最近因为写J2EE版本的书店管理系统,碰到了模糊查询的问题:因为我查询的关键字是中文,导致刚开始出现了很多问题:ResultSet rs-> 比如: select * from book where bookName = '操作系统';明明这条语句是可以在mysql数据库中查到的,但是 rs.next()却始终未false;这很奇怪,我唯一能想到的原因就是中文乱码问题;果然经过查阅资料;找到了解决方法; 就是你在写URL时要加上编码的格式: ->this.URL = "jdbc:

模糊查询 防止 sql注入

mysql  mybatis 环境: 1>. 处理sql特殊字符 {"*","%","_"} --> 替换为 "/*","/%","/_" 2>.   sql 中处理,定义'/' 为转义字符   public abstract class BaseEntity extends PrimaryKeyObject<Long> { private static f

dljd_017_使用PreparedStatement执行模糊查询

一.jdbc模糊查询(查询名字中带a的用户) package edu.aeon.jdbc.crud; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import edu.aeon.aeonutils.AeonJdbcUtils; /** * [说明]:使用jdbc进行数据操作 * @author aeon

jdbc中如何实现模糊查询

情况如何 再利用jdbc执行sql语句的时候,对于其他的句子的执行没什么太大的问题:加上占位符,然后设置占位符的值. 但是在模糊查询的时候,一直都写不对,这里提供了两种可选的解决办法,以供参考. 解决方法 第一种: String sql = "select studentname, age, phone, address, other from customer"                + " where studentname like ? "; pstm

JDBC之PreparedStatement模糊查询

今天要做一个关于模糊查询的需求,以前用JDBC做精确查询都是用 "SELECT * FROM test WHERE id = ?",所以用模糊查询时理所当然的也用了"SELECT * FROM test WHERE name = '%?%'",但是查询时一直提示java.sql.SQLException: Invalid parameter index 1. Google一下原来ps不支持上面的写法,应该先用占位符表示 "SELECT * FROM tes

8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)

多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public User() { } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } private int id; private String name;

通过带参数的Sql语句来实现模糊查询(多条件查询)

#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books"); List<string> listWheres = new List<string>(); List<SqlParameter> listParams = new List<SqlParameter>(); if (txtBookName.Text.T

MyBatis模糊查询异常: &#39;%${}&#39;&#39;读取jdbc属性

'%${}''不能传参,总是固定为root, 后来发现${username}是读取了jdbc里面的属性username,于是将jdbc属性名修改于是成功 MyBatis模糊查询异常: '%${}''读取jdbc属性 原文地址:https://www.cnblogs.com/ltfxy/p/10409883.html