这在里求JDBC中PreparedStatement的实现,我想不会是这样来拼接。
package com.dicmo.test;
import java.util.ArrayList;
import java.util.List;
public class PreparedStatement{
private String sql;
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
PreparedStatement(String sql){
this.sql = sql;
}
public void setInt(int index,int value){
List <Integer> indexList = new ArrayList<Integer>();
char [] sqlArray = sql.toCharArray();
for (int i=0;i<sqlArray.length;i++){
if('?'==sqlArray[i]){
indexList.add(i);
}
}
sql = sql.substring(0,Integer.parseInt(indexList.get(index-1).toString()))
+"?"+value+sql.substring(Integer.parseInt(indexList.get(index-1).toString())+1);
System.out.println(sql);
}
public void setString(int index,String value){
List <Integer> indexList = new ArrayList<Integer>();
char [] sqlArray = sql.toCharArray();
for (int i=0;i<sqlArray.length;i++){
if('?'==sqlArray[i]){
indexList.add(i);
}
}
//这里使用?继续做占位符,保持参数的位置不变
//在最后面把?全替换掉
sql = sql.substring(0,Integer.parseInt(indexList.get(index-1).toString()))
+"?\'"+value+"\'"+sql.substring(Integer.parseInt(indexList.get(index-1).toString())+1);
}
public String makeNewSql(String sql){
char [] a = sql.toCharArray();
for(int i=0;i<a.length;i++){
if('?'==a[i]){
a[i]=' ';
}
}
String newSQL = new String(a).replaceAll(" "," ");
return newSQL;
}
public static void main(String [] args){
String sql ="SELECT * FROM user WHERE id = ? AND name = ? AND sex = ? And age = ? AND title = ?";
PreparedStatement ps = new PreparedStatement(sql);
//这里的setXXX可以是任意顺序。前面的?占位符起了作用。
//如:ps.SetXXX(2,xxx);
// ps.SetXXX(1,xxx);
ps.setInt( 1, 2);
ps.setString( 2, "dicmo");
ps.setString( 3, "男");
ps.setInt(4, 10);
ps.setString(5, "JAVA fan");
System.out.println(ps.makeNewSql(ps.getSql()));
}
}
?替换处理前:
SELECT * FROM user WHERE id = ?2 AND name = ?'dicmo' AND sex = ?'男' AND age = ?10 AND title = ?'JAVA fan'
?替换处理后:
SELECT * FROM user WHERE id = 2 AND name = 'dicmo' AND sex = '男' AND age = 10 AND title = 'JAVA fan'
分享到:
相关推荐
在本篇文章中,我们将深入探讨如何使用 Java 编程语言结合 iBatis 框架进行 SQL 字符串的动态拼接。通过分析提供的代码片段,我们可以了解到在实际开发过程中,这种动态 SQL 的构建方式非常常见,尤其是在处理复杂的...
总的来说,避免使用`StringBuffer`进行SQL字符串拼接,转而采用PreparedStatement或者ORM框架,是现代SQL编程的最佳实践。它不仅能提高程序性能,减少内存消耗,还能显著增强系统的安全性,降低SQL注入的风险。在...
这种方式避免了每次执行SQL语句时都要重新解析和构建SQL字符串,减少了字符串拼接操作,进一步提高了性能。 **2. 安全性增强** - **防止SQL注入**:`PreparedStatement`通过参数化查询,确保了用户输入的数据不会...
通过以上介绍可以看出,`PreparedStatement`不仅可以提高执行SQL语句的效率,还能有效防止SQL注入攻击,因为它使用参数化查询而非字符串拼接的方式构建SQL语句。因此,在开发涉及数据库操作的应用程序时,推荐优先...
而“SQL转拼接代码”通常指的是将SQL语句转换为编程语言中的字符串拼接代码,以便于在应用程序中执行这些SQL语句。在Java和C#这样的编程语言中,我们经常需要将SQL语句构建为字符串,然后通过数据库连接执行这些语句...
此外,`StringBuilder`和`StringBuffer`类在进行字符串拼接时能提供更高的性能,因为它们是线程安全的。 - `Pattern`和`Matcher`:用于正则表达式的匹配和查找。 - `StringUtils`(Apache Commons Lang):提供了...
- **参数绑定**:PreparedStatement允许设置参数,数据库只需处理参数值,而非整个SQL字符串,减少了字符串拼接的开销。 - **缓存执行计划**:预编译后的执行计划会被数据库缓存,下次执行相同SQL时可直接复用,...
在易语言中,这通常通过字符串拼接实现,即将SQL语句的各个部分组合成一个完整的命令字符串。这种方式的优点在于可以增加代码的灵活性,但同时也需要注意SQL注入等安全问题。 在学习易语言动态拼接SQL语句的过程中...
在处理字符串时,我们通常会用到`StringBuilder`或`StringBuffer`类来构建和操作字符串,尤其是涉及到大量字符串拼接时,以避免不必要的性能开销。 而`Blob`(Binary Large Object)是Java数据库连接(JDBC)中的一...
- 易于维护:当需要改变SQL逻辑时,只需要修改PreparedStatement的构造字符串,无需担心字符串拼接错误。 总结来说,Statement适用于简单的、不涉及动态参数的SQL操作,而PreparedStatement更适合复杂和需要动态...
因为预编译的SQL语句可以防止SQL注入攻击,同时通过setXXX方法的参数绑定机制避免了拼接SQL字符串的风险。因此,在涉及到频繁执行的数据库操作,或者需要执行的SQL语句中包含有用户输入数据时,推荐使用...
实现类 UserDaoImpl.java(实现增删改查功能 使用预编译对象PreparedStatement 安全、便捷不需要我们去拼接字符串,特别是字段很多的时候 同时效率比Statement更高 ) 测试类 UserDaoTest.java(做测试增删改查功能...
- 使用`StringBuffer`或`StringBuilder`进行字符串拼接,它们在内存管理上更高效。 9. **对象创建与内存管理**: - 避免一次性创建大量对象,特别是大对象,这可能导致垃圾收集器(GC)频繁工作。 - 显示声明...
4. **使用PreparedStatement**:除了字符串连接之外,更推荐使用`PreparedStatement`来构建SQL语句。这种方式不仅有助于防止SQL注入攻击,还能提高性能,因为数据库可以预先编译并缓存SQL语句。 5. **合理拆分SQL**...
它不仅可以防范SQL注入,还能优化性能,同时减少因字符串拼接导致的潜在错误。在Java等编程语言中,通过`PreparedStatement`接口,我们可以轻松实现这一功能。了解并熟练掌握这种技术对于任何进行数据库操作的开发者...
例如,一个简单的用户登录界面,如果直接使用用户输入的数据拼接SQL查询,如"SELECT * FROM users WHERE username = '" + userInput + "' AND password = '" + userPassword + "'",那么当用户输入特定的字符串,如...
6. **防止命令注入**:如果程序需要执行系统命令,避免直接拼接字符串,应使用ProcessBuilder类的command()方法来指定命令列表,以防止恶意用户通过构造特殊字符串执行任意系统命令。 7. **字符串比较的安全性**:...
通过这个工具,开发者可以避免手动编写繁琐的SQL字符串拼接,提高代码的可读性和维护性。 描述中提到“可以将多行SQL转换为程序可用的字符串”,意味着该工具处理的不仅是单行的SQL语句,还能处理复杂的多行查询,...
要防御SQL注入,需要对用户输入数据进行严格的检查和过滤,使用参数化查询语句来代替字符串拼接的方式,并且对数据库进行权限控制,限制用户的访问权限。 五、SQL注入的实例 例如,一个Web应用程序使用SQL语句来...
- 即使使用PreparedStatement也不能完全保证安全,如果SQL语句中使用了字符串拼接的方式构造查询语句,依然可能会发生SQL注入。因此,应避免在代码中拼接SQL语句。 - 在某些情况下,如果确实需要使用Statement执行...