JAVASE第十一章(JDBC)


前言

在实际开发时,项目中的数据通常是存储在数据库中的,要想使用其中的数据,就必须编写程序连接到数据库对数据进行操作。Java对数据库的操作提供了相应的支持,它可以提供了一套可以执行SQL语句的API,即JDBC。本章主要围绕JDBC常用API、JDBC基本操作等知识进行详细详解。


一、JDBC概述

JDBC(Java DataBase Connectivity):JAVA数据库连接 。
有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库。
在这里插入图片描述
JDBCAPI:用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问它由一组用Java语言编写的类和接口组成

1.DriverManager类:管理不同的JDBC驱动。
2.Connection接口:与特定数据库连接。
3.Statement接口:执行sql。
4.PreparedStatement接口:执行sql。
5.ResultSet接口:接收查询结果。

二、JDBC搭建

1.在工程目录下新建 lib 目录,将需要的jar包复制到该目录下。
在这里插入图片描述

2.将jar包引入工程
idea中如何能够使用手动引入的第三方jar包:
File -> Project Structure -> Modules -> 选中要添加build path的项目 -> Dependencies -> 点击右边的小加号 -> 选择JARs or directories ->选择要添加的外部jar包。

在这里插入图片描述


三、编写程序

1.注册JDBC驱动程序

注册JDBC驱动程序:打开与数据库的通信通道,通过反射实现。

try {
// 1.注册JDBC驱动程序 :这需要初始化驱动程序,这样就可以打开与数据库的通信信道。
    Class.forName("com.mysql.cj.jdbc.Driver");  
 } catch (ClassNotFoundException e) {
     e.printStackTrace();
 }

2.建立与数据库连接

使用DriverManager.getConnection()方法来创建一个 Connection对象,它代表一个物理连接。

String user = "jdbc:mysql://localhost:3306/student_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai" ;
String userName="root";
String password="0521";
Connection con = DriverManager.getConnection(user,userName,password);

3.获得Satement执行sql语句

Statement中常用的方法:

1.int executeUpdate(String sql) 用于执行ddl语句和dml(增删改)
2.ResultSet executeQuery(String sql)  用于执行查询语句,返回一个ResultSet集合
Statement st = con.createStatement() ;
st.executeUpdate("INSERT INTO t_student(name,weight,height,stu_grade)values ('张五',140.1,175.1,5)");
String num="1 OR 1=1";  //sql注入攻击 因为1=1 一直成立  所以会把表中所有数据都给删除
st.executeUpdate("DELETE FROM t_student3 WHERE id="+num);
st.executeUpdate("UPDATE t_student SET weight=180.0,height=190.0 WHERE id=15");

4.获得PrepareStatement执行sql语句

PreparedStatement 中常用的方法:

1.int executeUpdate() 用于执行ddl语句和dml(增删改)
2.ResultSet executeQuery()  用于执行查询语句,返回一个ResultSet集合

获得PrepareStatement执行sql语句  在sql语句中参数位置使用占位符,使用setXX方法
//增
PreparedStatement pst1=con.prepareStatement("INSERT INTO t_student(name,weight,height,stu_grade,register)values (?,?,?,?,?)"); //增
pst1.setString(1,"金子豪");
pst1.setFloat(2,152.1f);
pst1.setFloat(3,178.1f);
pst1.setInt(4,3);
pst1.setObject(5,new Date());
pst1.executeUpdate();
//删
PreparedStatement pst2=con.prepareStatement("DELETE FROM t_student WHERE id=?"); 
String num="1 OR 1=1";
pst2.setString(1,num);  //Data truncation: Truncated incorrect DOUBLE value: '1 OR 1=1'
// 预编译模式中每个占位符处,只能插入一个值,而会过滤其他语句.
pst2.executeUpdate();
//改
PreparedStatement pst3=con.prepareStatement("UPDATE t_student SET weight=?,height=? WHERE id=?");  
pst3.setFloat(1,200.0f);
pst3.setFloat(2,200.0f);
pst3.setInt(3,5);
pst3.executeUpdate();

注意:执行完成后调用close方法关闭与数据库的链接通道。

pst1.close();
pst2.close();
pst3.close();
con.close();

四、PreparedStatement和Statement区别

1.虽然使用PreparedStatement比Statement多出几行代码,但是前者的可读性和可维护性更强,比直接用Statement高出很多档次。

2.PreparedStatement能防止sql注入,Statement不能。PreparedStatement采用预编译模式,每个占位符只能插入一个值。

Statement st = con.createStatement() ;
st.executeUpdate("INSERT INTO t_student(name,weight,height,stu_grade)values ('张五',140.1,175.1,5)");
String num="1 OR 1=1";  //sql注入攻击 因为1=1 一直成立  所以会把表中所有数据都给删除
st.executeUpdate("DELETE FROM t_student3 WHERE id="+num);

PreparedStatement pst2=con.prepareStatement("DELETE FROM t_student WHERE id=?");  //删
String num="1 OR 1=1";
pst2.setString(1,num);  //Data truncation: Truncated incorrect DOUBLE value: '1 OR 1=1'
// 预编译模式中每个占位符处,只能插入一个值,而会过滤其他语句.
pst2.executeUpdate();

五、结果集处理

执行完查询语句后,通常我们需要对查询结果进行处理。executeQuery()方法会返回一个ResultSet对象,查询结果就封装在此对象中,

1.使用ResultSet的next()方法可以获取下一行数据
2.使用getXXX(String name)方法获得值
try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String user = "jdbc:mysql://localhost:3306/student_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
		String userName = "root";
		String password = "0521";
		con = DriverManager.getConnection(user, userName, password);
		PreparedStatement pst1 = con.prepareStatement("SELECT\n" +
		        "  id,\n" +
		        "  NAME,\n" +
		        "  weight,\n" +
		        "  height,\n" +
		        "  stu_grade,\n" +
		        "  register\n" +
		        "FROM\n" +
		        "  t_student\n" +
		        "WHERE id = ?");
		pst1.setInt(1, num);  //查询id号为num的对象的数据
		ResultSet res = pst1.executeQuery();
		while (res.next()) {
		    Student stu=new Student();
		    stu.setId(res.getInt("id"));
		    stu.setName(res.getString("name"));
		    stu.setWeight(res.getFloat("weight"));
		    stu.setHeight(res.getFloat("height"));
		    stu.setStu_grade(res.getInt("stu_grade"));
		    stu.setRegister(res.getTimestamp("register"));
		    myArray.add(stu);
		}
		} catch (ClassNotFoundException e) {
		e.printStackTrace();
		} catch (SQLException throwables) {
		throwables.printStackTrace();
		}
}

总结

本文主要讲解了JDBC的基本知识,包括什么是JDBC、JDBC的常用API、如何使用JDBC进行编程,以及如何在项目中使用JDBC。通过本章的学习,不仅可以了解到什么是JDBC,还能掌握JDBC操作数据库的步骤。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JavaSEJava平台的一个版本,它提供了一系列的API和工具,可以用于开发各种类型的应用程序。MySQL是一个开源关系型数据库管理系统,它提供了高效、稳定和可靠的数据存储和检索功能。JDBCJava数据库连接技术,它允许通过Java代码连接和操作关系型数据库。 在一个JavaSE项目中,我们可以使用JDBC来连接MySQL数据库,并完成与数据库的交互。首先,我们需要导入JDBC相关的jar包,例如MySQL Connector/J,这个jar包提供了连接MySQL数据库所需的驱动程序。我们可以从MySQL官网下载并导入这个jar包。 接下来,在Java代码中,我们通过加载JDBC驱动程序,使用合适的URL、用户名和密码连接到MySQL数据库。这个URL包含了数据库的IP地址、端口号和数据库名称等信息。一旦连接成功,我们可以使用JDBC提供的API执行SQL语句,例如插入、更新和删除数据,或者查询数据库中的数据。 在JDBC项目中,我们可以使用PreparedStatement对象来预编译SQL语句,以提高执行效率和安全性。通过设置参数,我们可以动态地构建和执行SQL语句,避免了SQL注入等安全问题。 此外,我们还可以使用JDBC的事务操作来确保数据库的一致性和完整性。通过开始事务、执行SQL语句和提交或回滚事务,我们可以在多个数据库操作之间实现原子性和隔离性。 在开发JDBC项目时,我们还要注意资源的管理和释放,包括数据库连接、Statement和ResultSet等对象的关闭,以避免内存泄漏和性能问题。 总的来说,基于JavaSE的MySQL JDBC项目可以通过JDBC技术与MySQL数据库进行连接和交互。开发者可以使用JDBC提供的API执行各种数据库操作,并通过事务来确保数据的一致性。在项目开发过程中要注意合理管理和释放资源,以提高项目的性能和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JinziH Never Give Up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值