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);
		}
	}
}

  

  注意:填入参数时,按参数位置的索引来填入

 

 ----------------------------------------------------------

 

转载于:https://www.cnblogs.com/ixenos/p/6292050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值