本人只是根据原类稍作修改...
实现原理:
重新实现PreparedStatement接口.定义两个辅助变量:sqlTemplate和parameterValues
sqlTemplate带有?的Sql,parameterValues存放参数值,是一个ArrayList.然后在每个set方法中调用saveQueryParamValue
方法设置parameterValues列表...
替换?为参数值的方法:
java 代码
- public String getQueryString() {
-
- StringBuffer buf = new StringBuffer();
- int qMarkCount = 0;
- StringTokenizer tok = new StringTokenizer(sqlTemplate+" ", "?");
- while (tok.hasMoreTokens()) {
- String oneChunk = tok.nextToken();
- buf.append(oneChunk);
-
- try {
- Object value;
- if (parameterValues.size() > 1 + qMarkCount) {
- value = parameterValues.get(1 + qMarkCount++);
- } else {
- if (tok.hasMoreTokens()) {
- value = null;
- } else {
- value = "";
- }
- }
- buf.append("" + value);
- } catch (Throwable e) {
- buf.append(
- "ERROR WHEN PRODUCING QUERY STRING FOR LOG."
- + e.toString());
-
- }
- }
- return buf.toString().trim();
- }
初始化参数列表的方法:
java 代码
- private void saveQueryParamValue(int position, Object obj) {
- String strValue;
- if (obj instanceof String || obj instanceof Date) {
-
- strValue = "'" + obj + "'";
- } else {
-
- if (obj == null) {
-
- strValue = "null";
- } else {
-
- strValue = obj.toString();
- }
- }
-
-
- while (position >= parameterValues.size()) {
- parameterValues.add(null);
- }
-
- parameterValues.set(position, strValue);
- }
分享到:
- 2007-02-15 09:16
- 浏览 4332
- 评论(4)
- 论坛回复 / 浏览 (3 / 4482)
- 查看更多
相关推荐
在实际应用中,如果需要获取动态构建的SQL,可能需要自定义一个`PreparedStatement`的代理类,覆盖`execute`或`executeQuery`方法,然后在这个代理类中拼接和打印出最终的SQL。但这需要对JDBC有深入的理解,并且需要...
jdbc2.0版 PreparedStatement接口的用法
然后,使用PreparedStatement来执行SQL语句,preparedstatement.setObject()方法来设置SQL语句中的参数。最后,使用executeQuery()方法来执行SQL语句,并将查询结果放入Vector容器,以便其他程序使用。 二、...
而PreparedStatement对象则可以避免这种情况,因为它将用户输入的数据作为参数传入,而不是将其直接嵌入到SQL语句中。 最后,PreparedStatement对象可以提高代码的可读性和可维护性。使用PreparedStatement对象可以...
在Java编程中,PreparedStatement是Java SQL API中的一个接口,它是Statement接口的子接口。这个练习主要涉及如何使用PreparedStatement来插入宠物信息到数据库中。PreparedStatement的主要优势在于它的预编译能力和...
总之,`SqlUtils`工具类是Java开发中处理SQL查询的利器,它可以简化SQL条件的构建,提升代码质量,降低潜在的安全风险。通过理解和利用这样的工具类,开发者能够更专注于业务逻辑,而不是底层的SQL拼接细节。
标题中的"sqljdbc驱动类"指的是sqljdbc4.jar或sqljdbc42.jar等驱动包,这些是微软官方发布的JDBC驱动实现,适用于Java 8及更高版本。通过这个驱动,开发者可以使用Java语言方便地连接到SQL Server数据库,执行查询、...
`PreparedStatement`是Java JDBC API中的一个关键类,用于执行预编译的SQL语句。它继承自`Statement`类,并在其基础上提供了更多的功能和优化。在Java应用程序与数据库交互的过程中,`PreparedStatement`的使用能够...
首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是因为数据库会对预编译语句进行预编译,下次执行相同的 SQL 语句时,数据库端不会再进行预编译,而直接使用...
在Java编程语言中,`PreparedStatement`是`java.sql`包中的一个接口,它继承自`Statement`类,并提供了预编译SQL语句的功能。预编译SQL语句的主要优势在于提高了执行效率和安全性。尤其在处理动态查询或频繁执行相同...
注意,参数的位置是基于它们在SQL语句中出现的顺序,从1开始计数。 ### 总结 使用问号参数化查询是编写安全、高效SQL语句的关键实践。它不仅可以防范SQL注入,还能优化性能,同时减少因字符串拼接导致的潜在错误。...
在Java的JDBC编程中,`PreparedStatement`是一个非常重要的接口,它提供了预编译的SQL语句功能,能够显著提高执行效率,尤其是在批量处理大量数据时。`PreparedStatement`也被称为JDBC存储过程,因为它允许开发者...
在Java编程语言中,处理数据库连接及执行SQL语句时,合理地管理和释放资源是非常重要的。本文将详细介绍`Connection`和`PreparedStatement`的使用时机与关闭策略,帮助开发者更好地理解和掌握这两者的使用方法。 ##...
压缩包中的`sqljdbc.jar`和`sqljdbc4.jar`是驱动的二进制文件,包含了实现JDBC接口的类。`sqljdbc.jar`适用于Java 6及以下版本,而`sqljdbc4.jar`适用于Java 7及以上版本。根据你的项目环境,选择合适版本的JAR文件...
NULL 博文链接:https://chaoyi.iteye.com/blog/2088080
在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...
`PreparedStatement`的主要特点在于它可以预先编译SQL语句,并允许用户在执行前动态地设置SQL语句中的参数值,这使得它在执行相同或相似SQL语句时比普通的`Statement`更加高效。 #### 二、`PreparedStatement`与`...
驱动包中的类和接口实现了JDBC规范,使得Java应用程序能够连接到SQL Server 2016并执行SQL命令。 这个驱动包支持JDBC 4.2规范,这也是“42”在文件名中的由来。JDBC 4.2规范包含了更多高级特性,如JSON支持、大结果...
Java 防止 SQL 注入的几个途径 Java 防止 SQL 注入是一个非常...防止 SQL 注入需要从多方面入手,包括杜绝 SQL 拼接、使用 PreparedStatement、过滤用户的输入等。只有通过这些措施,才能有效地防止 SQL 注入攻击。
在Java编程语言中,使用`PreparedStatement`来执行SQL语句是一种常见的操作数据库的方式。这种方式不仅可以提高程序的性能,还可以有效地防止SQL注入攻击。当我们在应用程序中需要向数据库中插入日期(`Date`类型)...