/**
* 过滤SQL参数,防止特殊字符引发的异常和SQL注入
* 只适用于MySQL数据库
* @author sodarfish
* @since 2008.1.21
* @update 2008.1.24
*/
public class SQLFilter{
public static final int NUMBER_FOR_QUERY=0;
public static final int MYSQL_CHAR_FOR_UPDATE=1;
public static final int MYSQL_CHAR_FOR_NONLIKE_QUERY=2;
public static final int MYSQL_CHAR_FOR_LIKE_QUERY=3;
public static final int MYSQL_P_CHAR_FOR_LIKE_QUERY=4;
/**
* 针对MySQL使用Statement和PreparedStatement进行插入和查询时的参数
* 进行合法化。
* 由于MS SQLServer 默认没有用\做转义符,在处理普通操作时,只需要注意'转为''就可以了.
* 如果用PreparedStatement,那么这一步也可以免掉.
* 如果要查询%符号,那么在MSSQLSERVER中必须使用escape 进行转义,如果使用了escape '\'
* 可以使用该类的MYSQL_P_CHAR_FOR_LIKE_QUERY来指定过滤类型.
* @param sql
* @param paramType
* @return
*/
public static String filtrateSQL(String sql,int paramType){
if(sql==null){
//throw new IllegalArgumentException("参数为空!");
return null;
}
//识别参数是否是数字
if(paramType==SQLFilter.NUMBER_FOR_QUERY){
Pattern pattern = Pattern.compile("(0|[1-9])[0-9]*(\\.[0-9]*)?");
if(pattern.matcher(sql).matches())
return sql;
else
//throw new IllegalArgumentException("非法参数!");
return null;
}
//MySQL处理插入操作.将特殊字符加上转义
if(paramType==SQLFilter.MYSQL_CHAR_FOR_UPDATE){
String newKey=sql.replaceAll("\\\\","\\\\\\\\");//处理\插入
newKey=newKey.replaceAll("'","\\\\'"); //处理'插入防止SQL注入
newKey=newKey.replaceAll("\"","\\\\\"");
return newKey;
}
//MySQL处理非LIKE匹配查询操作.将特殊字符加上转义
if(paramType==SQLFilter.MYSQL_CHAR_FOR_NONLIKE_QUERY){
String newKey=sql.replaceAll("\\\\","\\\\\\\\");//处理\插入
newKey=newKey.replaceAll("'","\\\\'"); //处理'插入防止SQL注入
newKey=newKey.replaceAll("\"","\\\\\"");
return newKey;
}
/**
* 对于MySQL 使用Statement对象进行LIKE模糊匹配的特殊处理.
*
*/
if(paramType==SQLFilter.MYSQL_CHAR_FOR_LIKE_QUERY){
//处理查询特殊字符首先处理\,因为它有转义作用,在MySQL LIKE匹配中,
//会出现两次转义,因此实际查询一个\符号,在SQL语句中的输入应当是\\\\,
//这里由于加上方法中对正则表达式的转义要求和JAVA本身的转义要求,输入16个\
//恰好表示SQL中4个\
//然后处理其他特殊字符,他们在SQL中表示为\% \'等.
String newKey=sql;
newKey=newKey.replaceAll("\\\\","\\\\\\\\\\\\\\\\");
newKey=newKey.replaceAll("'","\\\\'");
newKey=newKey.replaceAll("_","\\\\_");
newKey=newKey.replaceAll("%", "\\\\%");
newKey=newKey.replaceAll("\"","\\\\\"");
return newKey;
}
/**
* 对于MySQL 使用PreparedStatement对象进行LIKE模糊匹配的特殊处理.
* 对MySQL来说,使用PreparedStatement时,只需要特殊处理LIKE匹配问题.
*
* 此方法还适用于MSSQL Server2000中,Like 匹配使用了 escape '\'的语句.
*/
if(paramType==SQLFilter.MYSQL_P_CHAR_FOR_LIKE_QUERY){
//由于MySQL中\为默认转义字符
//处理参数中的特殊字符,\用\\转义成普通的\字符.
String newKey=sql;
newKey=newKey.replaceAll("\\\\","\\\\\\\\");
newKey=newKey.replaceAll("'","\\\\'");
newKey=newKey.replaceAll("_","\\\\_");
newKey=newKey.replaceAll("%", "\\\\%");
newKey=newKey.replaceAll("\"","\\\\\"");
return newKey;
}
return null;
}
分享到:
相关推荐
在Java开发中,有时我们需要将MySQL数据库中的数据导出到Excel文件,以便于数据分析、报告生成或备份。这个过程可以通过编程实现,主要涉及到Java数据库连接(JDBC)和处理Excel文件的技术。以下是一个详细的步骤...
在Java编程中,连接MySQL数据库并实现GUI图形界面的增删改查功能是一项常见的任务,尤其在开发桌面应用时。这个任务涉及到多个知识点,包括Java的数据库连接、Swing或JavaFX图形界面库的使用、SQL语言以及多线程处理...
10. **安全性**:尽管这是一个基础示例,但在实际应用中,应考虑安全性问题,如SQL注入、XSS攻击等,可以使用预编译的SQL、参数化查询,以及过滤用户输入等方式来增强安全性。 以上就是“Myeclipse(struts2实现增...
在本项目中,"SERVLET技术实现数据库查询",意味着我们将探讨如何利用Servlet来与数据库进行交互,特别是MySQL数据库。SpringMVC是一个基于Spring框架的轻量级Web MVC框架,它简化了在Servlet中处理请求和响应的过程...
总结起来,连接Weka到MySQL数据库涉及Java编程,包括使用JDBC驱动建立连接,执行SQL查询,将结果转换为Weka可理解的格式。这个过程允许我们在数据分析时直接操作数据库,提高了工作效率,并且能够处理大量实时数据。...
在IT行业中,将Excel文件的数据解析并导入到MySQL...以上就是“Java解析excel导入MySQL数据库”这一主题的主要技术细节。通过理解这些知识点,你可以根据自身需求定制和扩展这个功能,使其更加适应实际的工作场景。
3. **查询数据**:在Oracle数据库中使用`Statement`或`PreparedStatement`执行SQL查询,获取需要同步的数据。 4. **数据转换**:根据业务需求,可能需要对查询结果进行处理,比如数据类型转换、格式化等。 5. **...
根据给定的信息,我们可以归纳出以下关于Java、Oracle与MySQL数据库配置的相关知识点: ### 一、数据库驱动配置 #### 1. **SQL Server 配置** - **JTDs (Java to Data Source)**: 一种开源的 JDBC 驱动程序,用于...
在Linux环境下进行MySQL数据库编程是一项重要的技能,尤其对于IT专业人士来说。MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),它提供了强大的数据存储和管理功能。Linux作为服务器操作系统,与MySQL的...
`这行代码是加载MySQL的JDBC驱动,使得Java程序可以识别并使用MySQL数据库。 - 建立连接:`Connection con1 = DriverManager.getConnection(url, username, password);`这里的URL是数据库的地址,包括协议、主机名...
开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。 二、功能介绍 如博客中介绍 三、注意事项 1、管理员账号:admin 密码:admin 数据库配置文件applicationContext.xml 2、开发环境为...
MySQL数据库教程是一个面向初学者的综合指南,旨在帮助学习者掌握MySQL的基本概念、命令和实际应用。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、可靠和易于学习的特点,成为了许多企业和...
为了与数据库建立连接,你需要导入`java.sql.Connection`、`java.sql.DriverManager`、`java.sql.PreparedStatement`等相关的类。 接着,我们需要配置数据库连接参数,包括数据库URL、用户名和密码。这些信息通常...
这通常使用如PHP、Java或Python等服务器端语言实现,结合MYSQL数据库进行数据操作。 3. 数据库:MYSQL作为关系型数据库,用于存储试题、考生信息、考试成绩等核心数据。其强大的SQL语言能高效处理各种复杂的查询...
这里我们关注的是“省市区三级联动地址mysql数据库”,这个主题涉及到Java后端开发、前端交互以及MySQL数据库管理。首先,我们来了解一下什么是“三级联动”。 三级联动通常指的是在用户界面中,如下拉菜单或选择框...
MySQL Connector/J 就是实现了这一 API 的驱动,使得 Java 应用能够与 MySQL 数据库建立连接、执行 SQL 查询、处理结果集等操作。 在描述中提到“logstash 使用 DB”,这暗示了我们将 MySQL Connector/J 驱动用于 ...
本文将围绕“MySQL数据库查询”这一主题,深入探讨其背后的原理、技巧以及如何优化查询性能,以期帮助程序员们更高效地利用数据库资源,实现代码改变世界的愿景。 ### MySQL数据库查询基础知识 #### SQL语句构造 ...
包含了使用Java编程语言,结合JDBC(Java Database Connectivity)接口与MySQL数据库,以及利用Java Swing构建图形用户界面(GUI)来实现的一个商品管理系统。这个项目很适合初学者理解和实践Java在实际应用中的开发...
类路径是Java运行时系统查找类和其他资源的路径,这样Kettle在启动时就能自动找到并加载MySQL的驱动,从而实现与MySQL数据库的连接。 在Kettle中配置MySQL连接,你需要提供以下信息: 1. **主机名**:MySQL服务器的...
- 常见的数据库管理系统(DBMS)包括MySQL、Oracle、SQL Server、MongoDB和PostgreSQL等。 2. **数据库连接**: - 连接数据库通常需要数据库驱动、数据库URL、用户名和密码。 - 对于关系型数据库,如MySQL,可以...