JavaWeb笔记14-使用JDBC切换数据库以及PreparedStatement的使用

使用jdbc操作数据库时,如果对数据库进行了更换,只需要更换:驱动、具体驱动类、连接字符串、用户名、密码即可。

ResultSet结果集
用于承接executeQuery查询函数的结果
rs.next();
作用:
(1)下移一行
(2)判断下移之后的元素是否为空,如果空,返回false,反之。
rs.getXXX();(XXX:数据类型)
注意:ResultSet类型实例用完需要关闭rs.clsoe();

Connection产生对象
现在可知:
DriverManager->Connection->Statement->ResultSet
同理,PreparedStatement和CallableStatement也是由Connection产生的。
Connection产生操作数据库的对象:
connection.creatStatement();
connection.creatPrepareStatement();
connection.creatCallableStatement();

Statement操作数据库
增删改:executeUpdate();
查询:executeQuery();
ResultSet:承接结果集
next():光标下移,判断是否有下一条数据
previous():光标上移
getXXX(字段名/字段序号):获取字段

PreparedStatement操作数据库

public interface PreparedStatement extends Statement

PreparedStatement是Statement的子类
增删改:executeUpdate();
查询:executeQuery();
PreparedStatement的一般用法:

		String sql="DELETE FROM student WHERE `id`='20180002'";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		pstmt.execute();

PreparedStatement预编译

//预编译,?为占位符,可以使用PreparedStatement特有的setXXX()方法
		String sql="INSERT INTO student VALUE(?,?,?,?,?);";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		//set(序号,内容)
		pstmt.setString(1, "20180002");
		pstmt.setString(2,"吉吉");
		pstmt.setInt(3, 1);
		pstmt.setString(4, "12398199938");
		pstmt.setString(5, "2000-10-8");
		pstmt.execute();

PreparedStatement执行查询语句示例:

		//预处理可以简化字符串单双引号的处理
		String sql="SELECT `id`,`name`,`birthday` FROM student WHERE `name` LIKE ?";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		pstmt.setString(1, "%川%");
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()) {
			String id=rs.getString(1);
			String name=rs.getString(2);
			Date birthday=rs.getDate(3);
			System.out.println(id+"\t"+name+"\t"+birthday);
		}
		rs.close();

总结:PreparedStatement和Statement的用法相似,但是增加了预处理功能,并且在创建PreparedStatement对象的同时就要对其进行预编译,执行的时候就不需要sql了

Statement与PreparedStatement的区别
推荐使用PreparedStatement,原因如下:
1、PreparedStatement编码更加简便(Set函数)
2、PreparedStatement可以提高性能(预编译)
有以下两种处理sql语句的方法:

String sql="INSERT INT student VALUE('XXX','XXX')";
stmt.executeUpdate(sql);
String sql="INSERT INT student VALUE(?,?)";
pstmt=connection.prepareStatement(sql);//预编译SQL
pstmt.setString(1,"XXX");
pstmt.setString(2,"XXX");

假如要执行100句插入数据的语句,Statement要创建100句sql语句,PreparedStatement()则只需要改变占位符的值

3、安全(可以有效防止sql注入)
stmt:存在被sql注入的风险
(如:输入 用户名:任意值’or 1=1 – 密码:任意值)
分析:
SELECT COUNT(*)FROM LOGIN WHERE uname=‘任意值’ or 1=1 --’ AND upwd=‘任意值’;
在where条件判定后加了一个or逻辑结构,因此select总能查找到结果
pstmt:能够有效防止sql注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值