JavaEE JDBC PreparedStatement
PreparedStatement
@author ixenos
PreparedStatement工作原理
注意:虽然mysql不支持PreparedStatement优化,但依然有预编译的实现!
PreparedStatement相较Statement的优点
1.预编译缓存的支持,能提高执行效率
2.防范SQL注入
statement有sql注入的风险
比如
SELECT * FROM boss WHERE user='root' OR 1=1 --' AND password='f3f.3e&^';
由于--是SQL脚本中的注释,所以插入 【 ' OR 1=1 -- 】这一段将导致全为真,任意的用户密码都能获得true的判断
简单示例
package com.ixenos.demo; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.junit.Test; import com.ixenos.jdbc.util.JDBCUtil; public class testDB { /**
* 测试preparedstatement
*/
@Test
public void test3() { Connection con = null;
PreparedStatement preStmt = null;
ResultSet rs = null; try {
// 1.加载驱动程序
// 2.获得数据库连接
con = JDBCUtil.getConnection();
// 3.创建预编译SQL语句
String sql = "SELECT * FROM boss WHERE name=?";
// 4.创建stateMent
preStmt = con.prepareStatement(sql); preStmt.setString(1,"Alex");
// DQL操作返回一个结果集对象,同样需要释放资源!!
rs = preStmt.executeQuery(sql); // 5.输出结果
while (rs.next()) {
System.out.println(rs.getString(3));
} } catch (SQLException e) {
e.printStackTrace();
} finally {
// 后打开的先释放
JDBCUtil.close(preStmt, con, rs);
}
}
}
注意:填入参数时,按参数位置的索引来填入
----------------------------------------------------------
JavaEE JDBC PreparedStatement的更多相关文章
- Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement
Connection.prepareStatement()函数出错,提示: Type mismatch: cannot convert from java.sql.PreparedStatement ...
- 关于Mysql数据库longblob格式数据的插入com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V问题分析
当数据库字段为blob类型时 ,我们如果使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法需要注意 在向blob字段类型中插入数据时 ...
- mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...
- Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract 报错解决
java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract ----- ...
- JDBC PreparedStatement Statement
参考:预编译语句(Prepared Statements)介绍,以MySQL为例 1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相 ...
- JDBC/PreparedStatement
JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力 JDBC AP 是Sun公司提供的I 内容:供程序员调用的接口,集成在Java.sql和javax.sql包中, 如 ...
- 20160408javaweb之JDBC ---PreparedStatement
PreparedStatement 1.Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻 ...
- 关于JDBC PreparedStatement
PreparedStatement的执行步骤: 1. 向数据库服务器发送SQL语句,数据库对SQL进行解析和优化(conn.preparedStatement(sql)) 2. 向数据库发送绑定的参数 ...
- JavaEE JDBC 了解数据库连接池
了解数据库连接池 @author ixenos 数据库连接是有限的资源,如果用户需要离开应用一段时间,那么他占用的连接就不应该保持开放状态: 另一方面,每次查询都获取连接并在随后关闭它的代价也很高. ...
随机推荐
- 【转】【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)
原文链接 强烈关注,学习!
- 187 Repeated DNA Sequences 重复的DNA序列
所有DNA由一系列缩写为A,C,G和 T 的核苷酸组成,例如:“ACGAATTCCG”.在研究DNA时,识别DNA中的重复序列有时非常有用.编写一个函数来查找DNA分子中所有出现超多一次的10个字母长 ...
- leetcode 484. Find Permutation 思维题
https://leetcode.com/contest/leetcode-weekly-contest-16a/problems/find-permutation/ 设原本的数字是0,那么按照它的D ...
- ambari集群里如何正确删除历史修改记录(图文详解)
不多说,直接上干货! 答:这些你想删除的话得得去数据库里删除,最好别删除 . 现在默认就是使用好的配置 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智 ...
- Windowsforms 中对文件操作
文件及文件夹操作: 引用命名空间:using system .IO; 1.File类: 创建:File.Create(路径);——返回FileStream FileStream fs = File.C ...
- AJPFX学习Java函数知识总结
函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数.函数就是体现之一. java中的函数的定义格式: 修饰符 返回值类型 函数名(参数类型 形 ...
- Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
转自zrong's blog:http://zengrong.net/post/1295.htm ActionScript ActionScript通常简称为AS,它是Flash平台的语言.AS编写的 ...
- qt5.8 链接mysql错误:driver not load
转载请注明出处:http://www.cnblogs.com/dachen408/p/7155858.html 问题:qt5.8 链接mysql错误:driver not load. 解决方案:1.安 ...
- 观锁和乐观锁——《POJOs in Action》
1 事务隔离 事务隔离是数据库提供的功能. SQL Server通过SET TRANSACTION ISOLATION LEVEL语句设置事务隔离级别: SET TRANSACTION ...
- jpa,querydsl
[TOC] # jpa ## 生成通用模板 实现自定义方法有两种方法: 1. 根据衍生规则进行实现,此种情况简单:查询方法衍生规则 http://docs.spring.io/spring-data/ ...