2022.4.23 JDBC
JDBC
1.1 JDBC概念
JDBC 就是使用Java语言操作关系型数据库的一套API,全称:( Java DataBase Connectivity ) Java 数据库连接
我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。
mysql驱动就是 mysql对于JDBC的实现类,就是驱动的jar包,jar包里就是各种实现类
1.2 JDBC本质
-
官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
-
各个数据库厂商去实现这套接口,提供数据库驱动jar包
-
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
1.3 JDBC好处
-
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
-
可随时替换底层数据库,访问数据库的Java代码基本不变
以后编写操作数据库的代码只需要面向JDBC(接口),操作哪个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。如下图就是MySQL驱动包
JDBC API
第一个jdbc程序
第一步:编写Java代码
第二步:Java代码将SQL发送到MySQL服务端
第三步:MySQL服务端接收到SQL语句并执行该SQL语句
第四步:将SQL语句执行的结果返回给Java代码
创建测试数据库
1 SELECT VERSION() -- 查看数据库版本 2 3 CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci; 4 5 USE jdbcStudy; 6 7 CREATE TABLE users( 8 id INT PRIMARY KEY, 9 `NAME` VARCHAR(40), 10 `PASSWORD` VARCHAR(40), 11 email VARCHAR(60), 12 birthday DATE 13 ); 14 INSERT 15 INTO users(id,NAME,PASSWORD,email,birthday) 16 VALUES(1,'zhansan','123456','zs@sina.com','1980-12-04'), 17 (2,'lisi','123456','1isi@sina.com','1981-12-04'), 18 (3,'wangwu','123456','wangwu@sina.com',' 1979-12-04');
1、创建一个普通项目
2、导入数据库驱动
1、创建一个普通项目 2、导入数据库驱动
-
创建lib目录
-
将jar包粘贴到目录下
-
将lib目录添加到库,这时jar包才可以展开
3、编写测试代码
-
加载驱动(打开SQLyog)
-
用户信息和urL
-
连接成功,数据库对象 这就是数据库对象
-
执行SQL的对象
-
SQL对象去执行SQL
-
释放连接
对应可视化工具SQLyog
1 package com.xing.lesson01; 2 3 import java.sql.*; 4 5 //我的第一个JDBC 6 public class JdbcFirstDemo01 { 7 public static void main(String[] args) throws SQLException { 8 //1.加载驱动 固定写法 9 Class.forName("com.mysql.jdbc.Driver");//需抛出异常 10 11 //2.用户信息和urL(主机地址) 数据库名 用问号连接参数 使用Unicode编码 字符集编码 使用安全连接 12 String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true"; 13 String username = "root"; 14 String password = "123456"; 15 16 //3.连接 : DriverManager类 驱动管理 getConnection()获得连接 Connection代表数据库 17 Connection connection = DriverManager.getConnection(url, username, password);//需抛出异常SQLException 18 19 //4.执行SQL的对象: Statement类 执行sql对象 createStatement()创建对象 20 Statement statement = connection.createStatement(); 21 22 //5.SQL对象去执行SQL语句 23 String sql = "SELECT * FROM users"; 24 25 //返回结果集,结果集中封装了我们全部的查询出来的结果 26 ResultSet resultSet = statement.executeQuery(sql);//查询 27 //statement.executeUpdate();//更新 28 29 while(resultSet.next()){//如果结果集中还存在下一个元素 30 //可以通过类型去取数据 getString() ,不知道类型用getObject() 31 // 属性列 32 System.out.println("id"+resultSet.getObject("id")); 33 System.out.println("NAME"+resultSet.getObject("NAME")); 34 System.out.println("PASSWORD"+resultSet.getObject("PASSWORD")); 35 System.out.println("email"+resultSet.getObject("email")); 36 System.out.println("birth"+resultSet.getObject("birthday")); 37 38 } 39 40 //6、释放连接 41 42 resultSet.close(); 43 statement.close(); 44 connection.close(); 45 46 } 47 48 }
步骤总结:
1、加载驱动(告诉代码用哪个驱动jar包)
1 //1.加载驱动 固定写法 2 Class.forName("com.mysql.jdbc.Driver");//将一个类(mysql的驱动类)加载进内存需抛出异常
2、
1 Connection conn = DriverManager.getConnection(url, username, password);
3、获得执行sql的对象Statement,执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
1 Statement stmt = conn.createStatement();
4、定义SQL语句
1 String sql = "SELECT * FROM users";
5、获得返回的结果集
1 //返回结果集,结果集中封装了我们全部的查询出来的结果 2 ResultSet resultSet = statement.executeQuery(sql);//查询 3 //statement.executeUpdate();//更新 4 5 while(resultSet.next()){//判断下一行是否有数据 6 //对当前行每列数据进行获取,根据列的编号 7 //可以通过类型去取数据 getString() ,不知道类型用getObject() 8 System.out.println("id"+resultSet.getObject("id")); 9 System.out.println("NAME"+resultSet.getObject("NAME")); 10 System.out.println("PASSWORD"+resultSet.getObject("PASSWORD")); 11 System.out.println("email"+resultSet.getObject("email")); 12 System.out.println("birth"+resultSet.getObject("birthday")); 13 14 }
6、释放连接
1 //6、释放连接 2 3 resultSet.close(); 4 statement.close(); 5 connection.close();
DriverManager
1 //1.加载驱动 固定写法 2 Class.forName("com.mysql.jdbc.Driver");//需抛出异常ClassNotFoundException 3 //DriverManager.registerDriver(new Driver());标准写法,但是多余 4 5 //需抛出异常SQLException 6 Connection connection = DriverManager.getConnection(url, username, password); 7 //connection代表数据库 8 //可以实现数据库级别的操作 数据库设置自动提交 事务提交 事务回滚 9 connection.rollback();//回滚 10 connection.commit();//提交 11 connection.setAutoCommit();//自动提交
URL
1 // http://baidu.com/数据库名?参数1&参数2&参数3 2 // 协议//主机地址:端口号/数据库名?参数1&参数2&参数3 3 //mysql默认端口3306 4 String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true"; 5 6 // ora1ce默认端口1521 7 //jdbc:oracle:thin: @localhost:1521:sid
Statement 执行SQL的对象 PreparedStatement执行SQL的对象
1 Statement statement = connection.createStatement(); 2 3 String sql = "SELECT * FROM users";//编写sql语句 4 5 statement.executeQuery(sql);//查询操作返回结果集 6 statement.execute(); //执行任何SQL 7 statement.executeUpdate();//更新、插入、删除。都使用这个,返回一个受影响的行数
ResultSet 查询的结果集,封装了所有的查询结果
获得数据
1 ResultSet resultSet = statement.executeQuery(sql);//查询 2 3 resultSet.getObject("列名") 4 5 //知道类型用指定类型的方法例如知道String类型用 getString() ,不知道类型用getObject()
遍历
1 resultSet.beforeFirst();//移动到最前面 2 resultSet.afterLast();//移动到最后面 3 resultSet.next();//移动到下一个数据 4 resultSet.previous();//移动到前一行 5 resultSet.absolute(row);//移动到指定行
释放连接
1 resultSet.close(); 2 statement.close(); 3 connection.close();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端