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的更多相关文章

  1. Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement

    Connection.prepareStatement()函数出错,提示: Type mismatch: cannot convert from java.sql.PreparedStatement ...

  2. 关于Mysql数据库longblob格式数据的插入com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V问题分析

    当数据库字段为blob类型时 ,我们如果使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法需要注意 在向blob字段类型中插入数据时 ...

  3. mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)

    通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...

  4. Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract 报错解决

    java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract ----- ...

  5. JDBC PreparedStatement Statement

    参考:预编译语句(Prepared Statements)介绍,以MySQL为例 1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相 ...

  6. JDBC/PreparedStatement

      JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力     JDBC  AP 是Sun公司提供的I 内容:供程序员调用的接口,集成在Java.sql和javax.sql包中, 如 ...

  7. 20160408javaweb之JDBC ---PreparedStatement

    PreparedStatement 1.Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻 ...

  8. 关于JDBC PreparedStatement

    PreparedStatement的执行步骤: 1. 向数据库服务器发送SQL语句,数据库对SQL进行解析和优化(conn.preparedStatement(sql)) 2. 向数据库发送绑定的参数 ...

  9. JavaEE JDBC 了解数据库连接池

    了解数据库连接池 @author ixenos 数据库连接是有限的资源,如果用户需要离开应用一段时间,那么他占用的连接就不应该保持开放状态: 另一方面,每次查询都获取连接并在随后关闭它的代价也很高. ...

随机推荐

  1. C#中实现C++中的友元类

    最近做一个小程序,一个类A(负责显示处理)需要大量调用类B(负责数据处理)的函数,我最先想到的C++中的友元概念,因为类B中的这些函数并不希望public,它只是允许类A调用监测. 网上搜索了一下,没 ...

  2. C# 基础知识和VS2010的小技巧总汇(2)[转]

    1.使用关键字readonly ,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化语句赋值 2..net4.0新增一个  Tuple 类,代表一个有序的N元组.可以调用Tuple.Create ...

  3. XDocument

    XDocument学习(Winform) using System; using System.Collections.Generic; using System.ComponentModel; us ...

  4. 多个文本框点击复制 zClip (ZeroClipboard)有关问题

    <script type="text/javascript" src="js/jquery.min.js"$amp;>amp;$lt;/script ...

  5. 纯CSS写的对勾样式

    & .cicle{          position: relative;          float: right;          margin-right: -1rem;      ...

  6. VM virtualBox网络地址设置

    目的:在虚拟机LINUX中,可用通过主机访问到虚机内容. 问题描述,在虚机系统中,ip地址一直为127.0.0.1,无法在主机中建立连接 参考文章:https://cnzhx.net/blog/vir ...

  7. [小记]Android缓存问题

    今天晚上,产品经理打电话说我们的Android App除了问题,问题很简单就是一个缓存问题,由于这个程序是前同事写的,我也只能呵呵一笑,有些事你就得扛.还是回到正题吧,这个缓存问题,实在有点奇葩,所以 ...

  8. Flask框架 之数据库扩展Flask-SQLAlchemy

    一.安装扩展 pip install flask-sqlalchemy pip install flask-mysqldb 二.SQLAlchemy 常用的SQLAlchemy字段类型 类型名 pyt ...

  9. DEBUG无法进入断点解决方法

    18/08/17 任务栏:Tools->Options->Debugging->General->Require source files to exactly match t ...

  10. mac vim编辑器常用操作快捷方式

    0 行首$ (shift+6)行尾gg 文首G(shift+g) 文尾A(Shift+a)文尾,并编辑ctrl+f 向上翻页ctrl+b 向下翻页ctrl+u 向上翻半页ctrl+d 向下翻半页数字+ ...