浅入JDBC
什么是jdbc
JDBC的全称是Java数据库连接(Java Database Connectivity)
Java DataBase Connectivity是一个独立于特定数据库的管理系统。通用的SQL数据库存取和操作的公共接口。定义了一组标准,为访问不同数据库提供了统一的途径。
应用程序可以通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询,更新,删除操作。

JDBC系统结构
Jdbc接口包括两个层面:
- 面向应用的API,提供程序员调用(JDBC API)
- 面向数据库的API,供厂商开发数据库的驱动程序(DriverManager)
-
JDBC API
提供者:官方
内容:供开发者调用
Java.sql和javax.sql
- DriverManager类
- Connection接口
- Statement接口
- ResultSet接口
-
DriverManager
提供者:Java官方
作用:管理不同JDBC驱动
JDBC驱动
提供者:数据库厂商
作用:负责连接不同数据库
如何使用
-
第一步 注册驱动
-
两种方式
DriverManager.registerDriver(Driver driver);//加载驱动(开发推荐的方式) Class.forName("com.mysql.cj.jdbc.Driver");
-
-
第二步 获取连接数据库
-
String url = "jdbc:mysql://localhost:3306/user01?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true"; String user = "root"; String password = "123321"; Connection connection=DriverManager.getConnection(url,user,password);
-
-
通过Connection对象获取Statement对象(或者PreparedStatement对象)。
- createStatement():创建基本的Statement对象
- prepareStatement():创建PreparedStatement对象
- prepareCall():创建CallableStatement对象
-
创建执行sql语句
-
使用Statement有三种执行SQL语句的方法
execute():可以执行任何SQL语句
executeQuery():通常执行查询语句,执行后返回代表结果集的ResultSet对象。
executeUpdate():主要用来执行DML和DDL语句。
-
执行SQL后必须对增删改进行事物提交
-
-
执行处理结果
- 如果执行的SQL语句是查询语句执行结果将返回一个对象ResultSet对象
-
释放资源
- 数据库操作结束后都要关闭数据库连接,释放资源,包括关闭ResultSet,Statement和Connection等资源。
第一个JDBC
-
新建一个项目、导包(添加依赖)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> -
创建工具类(加载驱动获取数据库连接)
package com.sheep.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Utils { public static Connection connection = null; public static Connection dri(){ try { String url = "jdbc:mysql://localhost:3306/user01?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true"; String user = "root"; String password = "123321"; //加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //获取数据库连接 connection = DriverManager.getConnection(url,user,password); } catch (SQLException | ClassNotFoundException throwables) { throwables.printStackTrace(); } return connection; } } -
测试类
package com.sheep.test; import java.sql.*; public class Test { public static Connection connection = null; public static void main(String[] args) throws SQLException { connection = Utils.dri(); //加载驱动获取数据库连接 String sql1 = "insert into user2(id,admin,pwd) values(1,'梅西','36')"; //添加 String sql2 = "update user2 set admin='c罗' where admin='梅西'"; //修改 String sql3 = "delete from user2 where admin='c罗'"; //删除 String sql4 = "select * from user2 where id=? and admin=?"; //查询 int id=1; String admin="eye"; crud(sql4,id,admin); } public static void crud(String sql,int id,String admin) throws SQLException { String s="s"; int s1 = sql.indexOf("s"); if (s1!=0){ //如果index为0、说明为查询语句。如果不为0则表明为、增、删、改语句。 Statement statement = connection.createStatement(); int crud = statement.executeUpdate(sql); System.out.println(crud); }else{ PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1,id); preparedStatement.setString(2,admin); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()){ System.out.println(resultSet.getInt("id")+":"+resultSet.getString("admin")+":"+resultSet.getString("pwd")); } } } }PreparedStatement接口是Statement接口的子接口,PreparedStatement接口可以防止SQL注入,建议使用PreparedStatement接口开发
JBDC常用API
-
Driver接口
- 该接口是所有JDBC驱动程序必须实现的接口。
-
DriverManager类
-
该类用于加载JDBC驱动并且创建与数据库的连接。
-
方法名称 功能描述 registerDriver(Driver driver) 该方法用于向DriverManager中注册给定的JDBC驱动程序 getConnection(String url,String user,String pwd) 用于创建数据库连接,并返回表示连接的Connection对象
-
-
Connection接口
-
Connection接口代表Java程序和数据库的连接,只有获得该对象后才能访问数据库,并操作数据库。
-
常用方法:
方法名称 功能描述 getMetaData() 用于返回表示数据库的元数据的DatabaseMetaData对象 getMetaData() 用于返回表示数据库的元数据的DatabaseMetaData对象 prepareStatement(String sql) 用于创建一个PreparedStatement对象并将参数化的SQL语句发送到数据库 prepareCall(String sql) 用于创建一个CallableStatement对象来调用数据库的存储过程
-
-
Statement接口
-
Statement接口用于执行静态的SQL语句,并返回一个结果集。利用该对象把静态的SQL语句发送到数据库编译执行,然后返回数据库的结果集。
-
常用方法:
方法名称 功能描述 execute(String sql) 用于执行各种SQL语句,该方法返回一个boolean类型的值,如果为true,表示所执行的SQL语句有查询结果,可以通过Statement的getResultSet()方法获得查询结果 executeUpdate(String sql) 用于执行SQL中的INSERT,UPDATE和DELETE语句。该方法返回一个int类型的值,表示数据库中受该SQL语句影响的记录条数 executeQuery(String sql) 用于执行SQL中的SELECT语句,该方法返回一个表示查询结果的ResultSet对象
-
-
PreparedStatement接口
-
有Statement接口为什么要PreparedStatement接口:
Statement接口封装了JDBC执行SQL语句的方法,可以完成SQL语句的操作,然而,在实际开发过程中往往需要将程序中的变量作为SQL语句的查询条件,使用Statement接口操作这些SQL语句会过于繁琐,并且存在安全方面的问题。为了针对这一问题,JDBC API提供了扩展的PreparedStatement接口。
-
PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符“?”来代替其他参数,然后通过setX××()方法为SQL语句的参数赋值。
-
常用方法:
方法名称 功能描述 executeUpdate() 在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句或者是无返回内容的SQL语句,比如DDL语句 executeQuery() 在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象 setInt(int parameterIndex,int x) 将指定参数设置为给定的int值 setFloat(int parameterIndex,String x) 将指定参数设置为给定的float值 setString(int parameterIndex,String x) 将指定参数设置为给定的String值 setDate(int parameterIndex,Date x) 将指定参数设置为给定的Date值 addBatch() 将一组参数添加到此PreparedStatement对象的批处理命令中 setCharacterStream(int parameterIndex,java.io.Reader reader,int lenght) 将指定的输入类写入数据库的文本字段 setBinaryStream(int parameterIndex,java.io.inputStream x,int length) 将二进制的文本输入流数据写入到二进制字段中
-
-
ResultSet接口
-
ResultSet接口用来保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中,在ResultSet接口内部有一个指向表格数据行的游标(指针)。
-
常用方法:
方法名称 功能描述 getString(int columnIndex) 用于获取指定字段的String类型的值,参数columnIndex代表字段的索引 getString(String columnIndex) 用于获取指定字段的String类型的值,参数columnIndex代表字段的名称 getInt(int columnIndex) 用于获取指定字段的String类型的值,参数columnIndex代表字段的索引 getInt(String columnName) 用于获取指定字段的int类型的值,参数columnIndex代表字段的名称 getDate(int columnIndex) 用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引 getDate(String columnName) 用于获取指定字段的Date类型的值,参数columnIndex代表字段的名称 next() 将游标从当前位置向下移动一行 absolute(int row) 将游标移动到此ResultSet对象的指定行 afterLast() 将游标移动到此ResultSet对象的末尾,即最后一行之后 beforeFirst() 将游标移动到此ResultSet对象的开头 previous() 将游标移动到此ResultSet对象的上一行 last() 将游标移动到ResultSet对象的最后一行
-
浙公网安备 33010602011771号