- 浏览: 991541 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
在SQL中包含特殊字符或SQL的关键字(如:' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。
PreperedStatement(从Statement扩展而来)相对Statement的优点:
1.没有SQL注入的问题。
2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关
闭的情况下有效)。
public void read(String name) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 2.建立连接
conn = JdbcUtils.getConnection();
// conn = JdbcUtilsSing.getInstance().getConnection();
// 3.创建语句
String sql = "select id, name, money, birthday from user where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, name);
// 4.执行语句
rs = ps.executeQuery();
// 5.处理结果
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t"
+ rs.getString("name") + "\t" + rs.getDate("birthday")
+ "\t" + rs.getFloat("money"));
}
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
public void read1(String name) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
// 2.建立连接
conn = JdbcUtils.getConnection();
// conn = JdbcUtilsSing.getInstance().getConnection();
// 3.创建语句
String sql = "select id, name, money, birthday from user where name='"
+ name + "'";
st = conn.createStatement();
// 4.执行语句
rs = st.executeQuery(sql);
// 5.处理结果
while (rs.next()) {
// System.out.println(rs.getObject("id") + "\t"
// + rs.getObject("name") + "\t"
// + rs.getObject("birthday") + "\t"
// + rs.getObject("money"));
}
} finally {
JdbcUtils.free(rs, st, conn);
}
}
对于read1()方法,若传入的name是' or 1 or '则会把数据库里所有记录都查询出来。而read()用的PerparedStatement就不会出显这种情况。
发表评论
-
高级 DAO 编程 学习编译更好的 DAO 的技巧
2009-04-27 20:09 1642高级 DAO 编程学习编译 ... -
使用Spring的SimpleJdbcTemplate完成DAO操作
2009-04-24 09:35 10118SimpleJdbcTemplate内部包含了一个Name ... -
使用Spring的NamedParameterJdbcTemplate完成DAO操作
2009-04-24 09:18 30814NamedParameterJdbcTemplate内部包含了 ... -
使用Spring的JdbcTemplate和BeanPropertyRowMapper完成的JDBC
2009-04-23 16:55 10711先道要加上两个包:Spring2.5下面的: spring.j ... -
策略设计模式_构建公共通用的Dao
2009-04-23 09:09 1540核心代码: Connection的工具类:详见JDBC数据库 ... -
模板设计模式_构建公共通用的Dao
2009-04-23 09:02 1338核心代码: Connection的工具类:详见:JDBC数据 ... -
使用反射实现ORM
2009-04-20 22:55 1459首先Bean在符合JavaBean的要求,即有一个无参的构造方 ... -
使用反射技术调用对象的方法,得到属性,方法等信息
2009-04-20 22:55 2346package com.mengya.test; im ... -
使用反射技术构造对象
2009-04-20 22:54 1611public class Bean { privat ... -
用JDBC访问二进制类型的数据
2009-04-20 13:08 1604JDBC操作二进制类型数据(如图片或压缩包)也是通过IO字节流 ... -
用JDBC访问大段文本数据
2009-04-20 13:07 1396JDBC操作大的文本数据是通过IO字符流操作 publ ... -
我的JDBC实例
2009-04-20 13:06 21061, 首先在配置文件(system.properties)中 ... -
了解事务的隔离级别
2009-04-20 13:05 1206隔离级别多线程并发读取数据时的正确性 用法: connne ... -
可滚动结果集与分页技术
2009-04-20 13:04 1520可滚动的结果集 Statement st = ... -
可更新和对更新敏感的结果集
2009-04-20 13:04 1629可更新的结果集(说明这些都是JDBC特殊的用法,有些数据库可能 ... -
ResultSetMetaData的使用
2009-04-20 13:00 2700ResultSetMetaData能够通过ResultSet分 ... -
ParameterMetaData的使用
2009-04-20 12:59 2621ParameterMetaData pmd = prepa ... -
JDBC自动获取数据库自动生成的主键
2009-04-20 12:55 3051PreparedStatement.getGeneratedK ... -
JDBC工具类实例
2009-04-20 12:53 1481System.properties配置文件(放在src下面) ... -
JDBC事务保存点,即事部分回滚
2009-04-20 12:52 4892JDBC中的事务保存点,即事务发生回滚的时候,回滚到保存点那里 ...
相关推荐
Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是...
当我们处理大量重复的SQL操作时,使用`PreparedStatement`可以避免SQL注入等问题,同时提升性能。这篇博客可能是探讨如何在实际运行中获取`PreparedStatement`最终执行的SQL语句,这对于调试和分析数据库操作非常有...
Statement和PreparedStatement之间的区别 Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象...
如果使用 PreparedStatement 来代替 Statement 来执行 SQL 语句,其后只是输入参数,SQL 注入攻击手段将无效。这是因为 PreparedStatement 不允许在不同的插入时间改变查询的逻辑结构,大部分的 SQL 注入已经挡住了...
- **安全性**:`PreparedStatement`通过占位符防止SQL注入,而`Statement`则容易受到这类攻击。 - **可读性**:`PreparedStatement`的参数化使得代码更易读,因为SQL逻辑和数据值分离。 - **动态SQL**:`...
标题中的"SQL注入源码+SQL注入命令"提示我们将探讨实际的源代码片段和可能的注入命令。在Java应用中,通常使用JDBC(Java Database Connectivity)来与MySQL这样的数据库进行交互。当开发者没有对用户输入的数据进行...
Java开发人员使用JDBC(Java Database Connectivity)连接到Oracle数据库时,应该优先使用`PreparedStatement`和`CallableStatement`,而不是`Statement`。这是因为前两者提供了参数化查询的支持,能够有效抵御SQL...
可以配置WAF来检测和阻止SQL注入攻击,它可以根据已知的攻击模式进行过滤。 9. **定期更新与修补**: 保持数据库管理系统和应用程序框架的最新版本,及时修补已知的安全漏洞。 10. **安全编码训练**: 对开发...
例如,使用 PreparedStatement 代替 Statement,可以避免 SQL 注入攻击。预编译语句还可以提高性能和可维护性。 其次,使用正则表达式可以检测 SQL meta-characters,从而防止恶意代码的注入。例如,可以使用正则...
PreparedStatement preState = conn.prepareStatement(sql); preState.setString(1, userName); preState.setString(2, password); ResultSet rs = preState.executeQuery(); 2. 采用正则表达式 可以使用正则表达式...
SQL注入是由于应用程序未能正确验证和清理用户输入的数据导致的。当用户提交的输入被直接拼接到SQL查询中时,攻击者可以构造特定的字符串来操纵查询的逻辑。例如,一个简单的登录表单可能接收用户名和密码,但如果...
总结来说,了解并掌握SQL注入的危害以及PreparedStatement的使用,是每个Java开发者必备的安全意识和技术。同时,熟练运用PreparedStatement的批量插入功能,可以有效地提高数据库操作的效率,尤其在处理大数据量...
在JSP(Java Server Pages)开发中,防止SQL注入至关重要,因为它可以保护用户数据的完整性和系统的安全性。本文将详细介绍如何在JSP中防范SQL注入。 ### 1. 理解SQL注入原理 SQL注入是通过在用户输入的数据中插入...
总的来说,PreparedStatement和批量插入是Java数据库操作中的重要技巧,它们既能有效防止SQL注入攻击,又能提高程序运行效率。在开发过程中,我们应该养成使用PreparedStatement和批量插入的良好习惯,以确保代码的...
1. **预编译SQL(PreparedStatement)**:使用PreparedStatement可以有效地防止SQL注入,因为它自动转义特殊字符,例如: ```java String username = request.getParameter("username"); PreparedStatement pstmt...
要防御SQL注入,需要对用户输入数据进行严格的检查和过滤,使用参数化查询语句来代替字符串拼接的方式,并且对数据库进行权限控制,限制用户的访问权限。 五、SQL注入的实例 例如,一个Web应用程序使用SQL语句来...
1. **预编译语句(PreparedStatement)**:使用PreparedStatement可以有效地防止SQL注入,因为它会将用户输入的数据作为参数处理,而不是直接拼接到SQL语句中。例如: ```java String sql = "SELECT * FROM users ...
使用预编译的SQL语句(例如PreparedStatement)是防止SQL注入的最佳实践。这种方式将SQL语句与用户输入的数据分离,确保即使用户输入恶意代码,也不会影响到查询结构。例如: ```java String query = "SELECT * ...
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询...3.SQL注入问题与解决(Statement 、PreparedStatement) 3.1.模拟SQL注入 3.2.PreparedStatement解决 3.3.Statement 与 PreparedStatement 4.完整源码