什么是JDBC
JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的JavaAPI。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作
JDBC在应用程序与数据库之间起到了一个桥梁作用,当应用程序使用JDBC访问特定的数据库时,需要通过不同数据库驱动与不同的数据库进行连接,连接后即可对该数据库进行相应的操作
Driver接口
Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写JDBC程序时,必须把所使用的数据库驱动程序或类加载到项目的classpath中(这里指MySQL驱动的jar包)
DriverManager类
DriverManager类用于加载JDBC驱动并且创建与数据库的连接。在DriverManager类中定义了两个比较重要的静态方法
Connection接口
Connection接口代表Java程序和数据库的连接,只有获取该连接对象后,才能访问数据库,并操作数据表。在Connection接口中定义了一系列的方法
Statement接口
Statemen接口用于执行静态的SQL语句,并返回一个结果对象。Statement接口对象可以通过
Connection实例的createStatemen()方法获得,该对象会把静态的SQL语句发送到数据库中编译执行,然后返回数据库处理的结果
在Statement接口中,提供了3个常用的执行SQL语句的方法
PreparedStatement接口
PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数的SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符 " ? " 来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值,并且PreparedStatement提供了批量插入的方法。在PreparedStatement接口中提供了一些常用的方法,
ResultSet接口
ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个纸箱表格数据行的游标(或指针)。ResultSet对象初始化时,游标在表格第一行之前,调用next()方法可以将游标移动到下一行。如果下一行没有数据,则返回false。在应用程序中经常使用 next()方法作为while循环的条件来迭代ResultSet结果集
实现第一个JDBC程序
public class Example01 { public static void main(String[] args) { Connection conn=null; Statement stmt=null; ResultSet rst=null; try { //1.加载数据库的驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取数据库的连接对象 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?serverTimezone=UTC", "root", "Ms961228"); //3.编写sql语句 String sql="select * from users"; //4.获取Statement对象,执行sql语句 stmt = conn.createStatement(); rst = stmt.executeQuery(sql); //5.处理结果集 while(rst.next()) { int id = rst.getInt("id"); String username = rst.getString("username"); String password = rst.getString("password"); String email = rst.getString("email"); Date birthday =rst.getDate("birthday"); Users users = new Users(id, username, password, email, birthday); System.out.println(users.toString()); } //6.释放资源 }catch (Exception e) { e.printStackTrace(); }finally { if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt!=null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(rst!=null) { try { rst.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }