JDBC的基本操作 SQL注入 数据库连接池 数据库连接 常用方法 MyBatis连接数据库 JDBC讲解第一篇

看了这篇文章你可以

  1. 什么是JDBC
  2. JDBC最原始的操作步骤
  3. SQL注入是什么
  4. 常用statement接口的方法
    以及这些方法的区别
  5. 连接数据库的参数是什么、有什么作用
  6. 批处理的使用
  7. 数据库连接池的使用c3p0和德鲁伊数据库连接池的使用
  8. MyBatis框架连接数据库
  9. Spring框架 JDBCTemplate的使用
  10. 以及上述操作的细节

什么是JDBC

JDBC就是用于连接数据库的东西
JDBC的基本操作 SQL注入 数据库连接池 数据库连接 常用方法 MyBatis连接数据库 JDBC讲解第一篇_第1张图片

JDBC最原始的操作步骤

  1. 加载驱动
  2. 建立连接
  3. 执行SQL语句
  4. 处理返回结果
  5. 关闭对象和连接

加载驱动
初学者要注意C是大写的哦

//加载驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			/**
			 * 	这里要说明在MySQL数据库8版本前后 ,加载驱动的区别
			 * 		8版本之前	Class.forName("com.mysql.jdbc.Driver");
			 * 		8版本之后	Class.forName("com.mysql.cj.jdbc.Driver");、
			 * 
			 */

建立连接
这里的root是数据库的用户名,123456是密码
第一个参数是URI
其他的参数在下面会讲

//获取连接(建立连接是比较耗时的)
			Connection conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/electrochemistry?useSSL=false&serverTimezone=UTC", 
					"root", 
					"123456");
			System.out.println("连接数据库成功"+conn);

SQL注入、statement接口
处理返回
这里statement是一个接口接口有很多实现类,如何查看,在eclipse中(想要查看的类中)按CTRL+T就可以了

/**
			 * 	使用statement会产生sql注入的情况
			 * 	就是传入的参数自带判断值的时候,会无条件的执行
			 * 	statement传参都是采用拼接字符串的方式
			 */
			Statement sta = conn.createStatement();
			String id="5 or 1=1";//这就发生了SQL注入的情况
			String sql1="delete from test where id="+id;
			sta.execute(sql1);//数据库中test表中的所有记录全被删除
			
			/**
			 * 	使用PrepareStatement来进行查询
			 * 	效率要比statement高		且不会发生SQL注入的情况,因为PrepareStatement会先进行处理来防止SQL注入的情况
			 */
			String sql2="select * from test where id=?";
			PreparedStatement ps = conn.prepareStatement(sql2);
			ps.setInt(1, 1);
			ResultSet rs = ps.executeQuery();
			/**
			 * 	遍历ResultSet结果集的方法
			 */
			while (rs.next()) {
				System.out.println(rs.getObject(1));
				System.err.println(rs.getString(2));
				
			}
			//在遍历结果集中也可以使用歌挺Object()方法,这样就不需要去区别数据类型了

JDBC的基本操作 SQL注入 数据库连接池 数据库连接 常用方法 MyBatis连接数据库 JDBC讲解第一篇_第2张图片
关闭对象以及连接的顺序
在这里插入图片描述

常用statement接口的方法
以及这些方法的区别
这里需要注意,执行sql语句方法错误了,会返回不是所需的结果
executeQuery只可以执行SELECT语句
这些常用执行SQL语句的返回结果也是不同的

/**
			 *	statement常用执行SQL语言的方法总结
			 *		execute()			运行语句返回是否有结果集
			 *		executeQuery()		运行select语句,返回ResultSet结果集
			 *		executeUpdate()		运行insert/update/delete操作,返回更新的行数
			 */

关闭对象和连接

关闭对象和连接时需要把对象声明放在try代码块的外面
JDBC的基本操作 SQL注入 数据库连接池 数据库连接 常用方法 MyBatis连接数据库 JDBC讲解第一篇_第3张图片

JDBC的基本操作 SQL注入 数据库连接池 数据库连接 常用方法 MyBatis连接数据库 JDBC讲解第一篇_第4张图片
批处理
什么是批处理,顾名思义批处理就是一下处理一批数据

/**
			 * 	批处理一次插入20000条数据
			 * 		注意	
			 * 			需要将事物的提交方式改为手动提交(默认是自动提交)
			 * 			尽量不要使用PrepareStatement,因为PrepareStatement在预编译的过程中数据量太大可能会产生异常
			 * 			尽量使用statement
			 */
			conn.setAutoCommit(false);//设置为手动提交
			
			for(int i=1;i<=20000;i++) {
				String p="insert into user (id,name) values('"+i+"',6666)";//拼接字符串
				sta.addBatch(p);
			}
			sta.executeBatch();
			conn.commit();//提交
			
			conn.setAutoCommit(true);//设置为自动提交

在这里也要简单介绍一下事物
什么是事物

在数据库中事物就是

一组要么同时执行成功要么同时执行失败的的SQL语句,是数据库操作的一个执行单元

事物的四大特点

原子性:事物内的操作要么全部成功要么全部失败

一致性:一个事物内只要有一个操作失败,数据库就要回滚到修改前的状态

持久性:事物完成后,它对系统的影响是永久的

隔离性:简单来说就是我办事的时候你不能过来看
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

代码

、、、java

/**
			 * 	有关事物的一些操作
			 */
			conn.setAutoCommit(false);//将事物的提交方式设置为手动(默认自动提交)
			String SQL="";//sql语句
			sta.execute(SQL);//执行SQL语句
			conn.commit();//提交事物
			
			conn.rollback();//事物执行失败需要进行回滚,应该写在catch语句中,这里为了方便展示写在了一起

数据库连接池的使用
数据库连接池的使用这里讲两个一个是C3P0另一个是德鲁伊
德鲁伊是由阿里巴巴开发的
阿里巴巴地表Java最强嘛,从性能上来说还是推荐使用德鲁伊的数据库连接池

先介绍C3P0数据库连接池的使用
这一篇写的已经很多了,所以换了一篇文章
链接在此

大哥,TM点个赞行不行

你可能感兴趣的:(数据库,mysql,java,mybatis,jdbc)