小汤学编程之JDBC(一)——JDBC概述和快速入门

在这里插入图片描述

一、JDBC概述
1.概念     2.作用
二、JDBC快速入门
1.实现步骤     2.查询数据和操作数据     3.SQL注入     4.事务管理     5.Statement与PreparedStatement的区别     6.Batch功能

一、JDBC概述

1.概念

JDBC(Java DataBase Connectivity) java数据库连接。是一套通过java操作数据的公共规范。

2.作用

使JAVA程序连接访问关系型数据库。


二、JDBC快速入门

1.实现步骤
  1. 导入相关数据库的jdbc驱动包
  2. 配置数据库连接相关信息
  3. 通过Class.forName、DriverManager加载驱动并创建Connection对象连接数据库
  4. 通过Connection对象创建PrepareStatement对象发送sql执行语句到数据库并执行
  5. 通过PrepareStarement设置参数(若sql没有占位符则跳过)
  6. 执行sql,获取结果
  7. 关闭连接
2.查询数据和操作数据
查询数据
public static void main(String[] args) throws Exception {
	// 通过properties工具类获取数据库连接信息
	String DRIVER = PropertiesUtil.readProerties("src/homework/task1.properties","DRIVER");
	String URL = PropertiesUtil.readProerties("src/homework/task1.properties","URL");
	String USER = PropertiesUtil.readProerties("src/homework/task1.properties","USER");
	String PWD = PropertiesUtil.readProerties("src/homework/task1.properties","PWD");
	// 加载驱动
	Class.forName(DRIVER);
	//创建数据库连接
	Connection conn = DriverManager.getConnection(url, user, password);
	//发送sql语句到数据库
	PreparedStatement pst = conn.prepareStatement("select * from student");
	//执行sql语句并返回结果
	ResultSet rs = pst.executeQuery();
	//提取执行结果
	while(rs.next()) {
		System.out.println("name: " + rs.getString("stu_name") + " password: " + rs.getString(2));
	}
	conn.close();// 关闭连接
}
操作数据
public static void main(String[] args) throws Exception {
	// 通过properties工具类获取数据库连接信息
	String DRIVER = PropertiesUtil.readProerties("src/homework/task1.properties","DRIVER");
	String URL = PropertiesUtil.readProerties("src/homework/task1.properties","URL");
	String USER = PropertiesUtil.readProerties("src/homework/task1.properties","USER");
	String PWD = PropertiesUtil.readProerties("src/homework/task1.properties","PWD");
	// 加载驱动
	Class.forName(DRIVER);
	//创建数据库连接
	Connection conn = DriverManager.getConnection(url, user, password);
	//发送sql语句到数据库
	PreparedStatement pst = conn.prepareStatement("delete from student where stu_id = ? ");
	//执行sql语句并返回结果
	int i = pst.executeUpdate();
	//提取执行结果
	if(i>0){
		System.out.println("删除成功");
	}else{
		System.out.println("删除失败");
	}
	conn.close();// 关闭连接
}

Connection接口:与特定数据库的连接(会话)。
PreparedStatement接口:表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
ResultSet接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

3.SQL注入
概念

在定义sql时把用户输入的内容作为参数与sql拼接的话,如果用户输入不合理的数据值有可能会导致sql执行异常。

例如:正常的登录sql:select * from student where stu_name = ? and stu_pwd = ?,如果用户输入的内容包含 ’ 则会异常。

典型的异常
  • 1' or 1='1 用户不知道密码也可登录
select * from student where stu_name = 1 or 1='1' and stu_pwd = ?
  • abc' or 1='1' -- 用户名和密码都不知道也可登录
select * from student where stu_name = abc or 1='1' -- and stu_pwd = ?
4.事务管理
概念

事务是数据库中非常重要的一个特性,事务属于原子性操作,是数据库执行过程中的一个逻辑单位,要么全部成功要么全部失败。

事务操作

JDBC事务的操作是进行在Connection接口中

方法作用
.commit()事务提交
.rollback()事务回滚
.setAutoCommit(true/false)执行是否自动提交事务(默认自动提交)
5.Statement与PreparedStatement的区别
  • PreparedStatement是预编译的,对于多次执行的SQL可以大大提高效率。而Statement不行。
  • PreparedStatement可以通过占位符的方式解决SQL注入的问题,而Statement不行。
  • 两者SQL的传入位置不同。
//	Statement :
Statement statement = conn.createStatement();
String sqlString = " delete from student where stu_name ='张三' ";
statement.executeUpdate(sqlString);
//PreparedStatement :
PreparedStatement updateSales = conn.prepareStatement("delete from student where stu_name ='seven' "); 
updateSales.executeUpdate();
6.Batch功能
作用

当执行一行的SQL,不同的参数值(比如插入N条数据)的时候可以使用PreparedStatement的Batch功能。这样不管操作多少条数据都只需要2次网络往返(1次是预存储statement,1次是执行batch命令)。

使用
//	PreparedStatement executeBatch  code :
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("insert into student values (?,?,?))";
 for (n = 0; n < 100; n++) {
	ps.setString(1,n+"");
	ps.setLong(2,n+"");
	ps.setInt(3,n+"");
    ps.addBatch();
}
int [] = ps.executeBatch();
con.commit();
ps.clearBatch();
注意点
  • 事务要设置为不自动提交,需批量添加后手动添加。
  • 使用时要在url后面加上rewriteBatchedStatements=true,否则不生效。
String url="jdbc:mysql://localhost:3306/XXdb?rewriteBatchedStatements=true";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值