JDBC

JDBC(Java DataBase Connectivity,java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的接口和实现类组成


JDBC 的环境搭建

  1. 添加数据库的驱动包
    如果导入的是 8 版本,需要添加核心包和依赖包。
    如果导入的的 5 版本,只需要添加核心包。
  2. 在工程中,新建一个叫 lib 的 folder(文件夹)
  3. 将上面找到的驱动包,直接拖到 lib 路径下。
  4. 选中 lib 包中所有的 jar 文件,右键 build path -> add to build path
  5. 通过调用第三方包(也就是上面的驱动包)中提供的实现类,来获取与数据库的连接对象,进行数据库操作。

1.为什么要用 JDBC?
不同的数据库有不同的数据库驱动程序,JDBC 提供了一种基准, 其实就是一个转换接口,主要是我们写好 Java 代码,然后转成 SQL 语句,去操作数据库。然后获取了数据之后,接着如何封装到 Java 类中,然后我们通过“面向对象”的思维去操作数据库。可以理解为是JAVA和数据库交互的一个桥梁

2. 使用 JDBC 技术操作数据库的详细步骤。
1)注册驱动
2)获取连接对象:告诉 Java 我们需要去使用哪个数据库?使用 JDBC 中提供的功能,获取一个 Connection 对象实例。
3)获取执行者平台:获取执行 SQL 语句的载体,叫 Statement 或 preparedStatement 对象实例。
4)准备sql语句
5)执行sql语句:进行增删改查等相关操作,还需要接收返回值。(execute)
6)处理结果集
7)释放资源
在这里插入图片描述
3. JDBC 的 Statement 和 PreparedStatement 分别是什么?
Statement :Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。
PreparedStatement :数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。PreparedStatement可以防止SQL注入式攻击

4. execute,executeQuery,executeUpdate 这几个方法有什么作用?
execute方法的返回值是boolean类型。返回true表示有结果集,返回false表示无结果集。
executeQuery只能运行select语句。
executeUpdate能运行insert,delect,update语句,返回结果是处理的记录的条数。

5.JDBC 如何获取数据后,如何进行数据封装?
获取数据:while (rs.next()) {
}
进行数据封装:List stuList = new ArrayList<>();
while(rs.next()){
// 将查询得到的结果,存储到集合中
Integer id = rs.getInt(“id”);
String username = rs.getString(“username”);
Integer password = rs.getInt(“password”);
Student stu = new Student(id, username, password);
// 将获取到的 student 对象,放到集合中存储
stuList.add(stu);
}

执行者平台:Statement

@Test
	public void run() {

		try {

			// 1. 注册驱动
			// 使用 反射的原理 来实现驱动类的加载
			Class.forName("com.mysql.cj.jdbc.Driver");

			// 2. 获取连接对象
			// jdbc:mysql://127.0.0.1:3306/sys
			// jdbc:mysql://localhost:3306/sys
			// jdbc:mysql:///sys
//导入的驱动包是8版本则url要加上“?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true”
			Connection conn = DriverManager.getConnection("jdbc:mysql:///sys?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true ", "root","1234");

			// 3. 获取执行者平台
			Statement stmt = conn.createStatement();

			// 4. 准备 SQL 语句
			String sql = "select * from tb_student";

			// 5. 执行 SQL 语句
			ResultSet rs = stmt.executeQuery(sql);

			// 6. 处理结果集
			while (rs.next()) {
				System.out.println(rs.getString("username") + "--" + rs.getInt("password"));
			}

			// 7. 释放资源
			// 主要,释放的顺序有讲究
			rs.close();
			stmt.close();
			conn.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

执行者平台:preparedStatement

@Test
	public void run2() {
		
		try {

			// 1. 注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");

			// 2. 获取连接对象
			Connection conn = DriverManager.getConnection(
					"jdbc:mysql:///sys?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true ",
					"root", "1234");

			// 3. 准备 SQL 语句
			// 在开发的时候,我们的 sql 语句,最好不要写死,建议用占位符,占位符下标是从 1 开始的
			String sql = "update tb_student set username = ?, "
					+ "password = ? where id = ?";

			// 4. 获取预处理执行者平台
			PreparedStatement ptmt = conn.prepareStatement(sql);
			
			// 5. 将我们需要操作的信息,设置到 ptmt 中
			// 注意,设置信息的时候,得根据具体的操作来定
			ptmt.setString(1, "xiaohei");
			ptmt.setInt(2, 888888);
			ptmt.setInt(3, 1);
			
			// 6. 执行 SQL 语句
			int flag = ptmt.executeUpdate();

			if(flag == 1){
				System.out.println("更新数据成功了!");
			} else {
				System.out.println("更新数据失败了!");
			}
			
			// 7. 释放资源
			ptmt.close();
			conn.close();

		} catch (Exception e) {

			e.printStackTrace();
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值