写点什么

JDBC 系列——JDBC 编程六步

作者:胖虎不秃头
  • 2022 年 9 月 06 日
    河南
  • 本文字数:5599 字

    阅读完需:约 18 分钟

JDBC系列——JDBC编程六步

001-编写程序模拟 JDBC 本质

1、什么是 JDBC?

Java DataBase Connectivity 在 java 语言中编写 sql 语句,对 mysql 数据库中的数据进行 CRUD 操作。

2、JDBC 相关的类库在哪里?

java.sql.*;
复制代码

3、JDBC 本质上是一堆什么呢?

java.sql. * ;这个包下都是 JDBC 的接口,SUN 公司制定的!JDBC 是体现"接口作用"的非常经典的例子。JDBC 降低了耦合度,提高了扩展力。对于 java 程序员来说,不需要关心数据库是哪个品牌。只要面向 JDBc 接口编程就行!


JDBC 整个程序的结构当中有三波人????


  1. 第一波:sUN 公司,负责制定 JDBc 接口。这些接口已经写好了,在 java.sql.;

  2. 第二波:java.sql.*下面的所有接口都要有实现类,这些实现类是数据库厂家编写的。

  3. 我们连接的是 mysql 数据库,mysql 数据库厂家的实现类在哪里呢?mysql-connector-java-5.1.23-bin.jarjar 包中很多.class 字节码文件,这是 mysql 数据库厂家写的接口实现!

  4. 注意:如果连接的是 oracle 数据库,你需要从网上下载 oracle 的 jar 包。

  5. mysql-connector-java-5.1.23-bin.jar 这个 jar 包有一个专业的术语,大家记住就行:mysql 的驱动。如果是 oracle 的 jar,被称为 oracle 的驱动。

  6. 第三波:我们 java 程序员,面向 JDBc 接口写代码就行!

4、JDBC 开发之前的准备工作?

  • mysql 的驱动 jar 包,需要配置到 classpath 当中吗?mysql-connector-java-5.1.23-bin.jar 里是字节码,是 class 文件。

  • Java 虚拟机的类加载器会去加载 class 文件,类加载器怎么能够找到这些 class 文件呢?classpath 没有配置的情况下,默认从当前路径下加载 class。classpath 如果配置死了,例如:classpath-D:\abc,则表示固定只从 d:\abc 目录下找 classclasspath=. ;D: \course\04-JDBC\resources \MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar

  • . ”代表什么?当前路径。

  • 以上的 classpath 什么意思?

  • ​ 类加载器从当前路径下加载 class,如果当前路径下没找到,则去 D:\course\04-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar 找 class 文件。

  • jar 包需要解压吗?不需要解压,java 虚拟机的类加载器有这个能力找到 class 文件。


//这就是我们了。我们面向JDBC接口调用方法连接数据库//我们不需要关心底层是mysql还是oraole,还是DB2,还是sybase.//我们都不需要关心,因为JDBC接口的出现让程序降低了耦合度!!!//我们Java程序员写一套JDBc程序,可以连接你任何一个品牌的数据库。public class JavaProgranmer{  public static void main(string[] args)(    //面向JDBC接口写代码    //JDBC jdibo = now Oraole() ;    JDBC jdbe = new MySQL() ;    //连接数据库    //调用方法的时候,面向JDBC接口调用,JDBC接口中有什么方法就调什么方法。    jdbc.getConnection();    //...以下几百行代码都是面向jdbo接口调用的,不需要修改!    //...        }}
复制代码

002-JDBC 编程六步

1、JDBC 编程六步

  1. 注册驱动(通知 java 程序我们即将要连接的是哪个品牌的数据库)

  2. 获取数据库连接(java 进程和 mysgl 进程,两个进程之间的通道开启了)(java 进程可能在北京,mysql 进程在上海)

  3. 获取数据库操作对象这个对象很重要,用这个对象执行 SQL 的。

  4. 执行 SQL 语句执行 CRUD 操作

  5. 处理查询结果集如果第四步是 select 语句,才有这个第五步

  6. 释放资源关闭所有的资源(因为 JDBC 毕竟是进程之间的通信,占用很多资源的,需要关闭!)


import java.sql.DriverManager;import java.sql.Driver;import java.sql.SQLException;  public class JDBCTest01{  public static void main(String[] args){        Connection conn = null;        Statement stmt = null;        ResultSet rs = null;    try{      //1、注册驱动      //com.mysql.jdbc.Driver是mysql数据库厂家写的,实现了java.sql.Driver接口。      //如果是oracle数据库的话,类名就不一样了:oracle.jdbc.driver.oracleDriver         Driver driver = new com.mysql.jdbc.Driver() ;//mysql的             DriverManager.registerDriver (driver) ;      // Draver driver = new oracle.jdbo.driver.OracleDriver();//oracle的                        //2、获取数据库连接            String url = "jdbc:mysql://localhost:3306/bjpowernode";            String user = "root";            String password = "123456";            conn = DriverManager.getConnection (url,user,password) ;            //输出连接对象的内存地址            // com.mysql.jdbo.JDBC4Connection02aaf7cc2            // com.mysql.jdbc.JDBc4Connection类实现了java.sql.Connection接口。            //实际上我们后续的开发不需要关心底层具体是哪个对象,因为面向接口编程。            //System.out.println(conn);
//3、获取数据库操作对象 stmt = conn.createstatement() ; //System.out.println(stmt); //通过一个连接对象connection是可以创建多个statement对象的 //statement stmt2 = conn.createstatement(); //System.out.println(stmt2); //4、执行SQL语句 // insert delete update /* insert string insertsql="insert into dept(deptno,dname,loc)values(50,'销售部','北京')"; // Statement接口中的executeUpdate方法专门来执行DML语句的。 //该方法的返回值表示:影响了数据库表中的总记录条数! int count = stmt.executeUpdate (insertSql); System.out.println(count); // 1 */ /* updata string updatesql="update dept set dname='人事部',loc='天津' where deptno=50"; int count = stmt.executeUpdate (updateSql) ; System.out.println(count); // 1 */ // delete String deleteSql = "delete from dept where deptno = 50"; int count = stmt.executeUpdate (deleteSql); System.out.println(count); // 执行查询语句 //JFBC当中的sql语句不需要以";"结尾 String sql = "select empno,ename,sal from emp order by sal deso""; // 执行查询语句是这个方法:executeQuery // Resultset就是查询结果集对象,查询的结果都在这个对象当中。 rs = stmt.executeQuery (sql); //5、处理查询结果集 //目前没什么好处理的,直接把结果集中的数据遍历输出吧。 //调用ResultSet接口中相应的方法来遍历结果集 boolean has=rs.next();//光标向前移动一位 while(re.next){ //条件成立表示光标指向的行有记录 //取当前行的第1个值 String empno=rs.getstring(1);//注意:getstring()这个方法是不管底层数据 //取当前行的第2个值 String ename = rs.getString(2); //取当前行的第3个信~ String sal = rs.getstring(3); System.out.println (empno + "," + ename + "," + sal); //也可以用特定类型取出 //根据查询结果的列名可以取吗? //以后这种方式是常用的,健壮 int empno = rs.getInt("empno"); String ename = rs.getString("ename"); double sal = rs.getDouble("sal"); System.out.println (empno + "," + ename + "," + (sal + 100));
} }catch(SQLException e){ e.printStackTrace(); }finally{ // 释放资源 // 6、先关闭ResultSet,先释放statement,再释放connection //分别进行try..catch处理 //放到finally中关闭 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }}
复制代码


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJANSlc1-1654356983496)(../../../Pictures/%E7%AE%97%E6%B3%95/P8/image-20220604230813779.png)]

2、URL 统―资源定位符

    任何一个URL都包括:协议+IP地址+端口号port+资源名      http://192.168.100.2:8888/abc
复制代码


协议:是一个提前规定好的数据传输格式。通信协议有很多:http、https.在传送数据之前,提前先商量好数据传送的格式。这样对方接收到数据之后,就会按照这个格式去解析,拿到有价值的数据。IP 地址:网络当中定位某台计算机的。PORT 端口号:定位这台计算机上某个服务的。资源名:这个服务下的某个资源。


 /*
jdbc:mysql:// 这是java程序和mysql通信的协议。 localhost 这是本机IP地址,本机IP地址还可以写成:127.0.0.1 3306 mysql数据库端口号 bjpowernode mysql数据库的名称 jdbc:mysq1://192.168.111.123:3306/abc 如果是oracle数据库的话: oracle: jdbc:thin:0localhost:1521:bjpowernode oracle:jdbc:thin:0 这是oracle和java的通信协议 localhost 这是本机IP地址。 1521 oracle默认端口 bjpowernode oracle中数据库的名字 1ocalhost和127.0.0.1都是本机IP地址。死记硬背。*/
复制代码

3、注册驱动的第二种方式:类加载注册

package com.bjpowernode.jdbc;/*注册驱动的第二种方式:类加载注册
mysql的厂家写的类:class com.mysql.jdbc.Dniver { static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }}*/public class JDBCTest04 { public static void main(String[] args) { try { //1、注册驱动 Class.forName("com.mysq1.jdbc.Driver"); //2、获取连接 conn = DriverManager.getConnection("jdbc:mysq1://127.0.0.1:3306/bjpowernode","root","123456"); //3、获取数据库对象 stmt = conn.createStatement(); //4、执行SQL String sql = "select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno"; rs = stmt.executeQuery(sql); //5、处理查询结果集 while(rs.next()){ String ename = rs.getString("ename"); String dname = rs.getString("dname"); System.out.println(ename+","+dname);
} } catch (ClassNotFoundException e){ e.printStackTrace(); } finally { //6、释放资源 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }}
复制代码

4、读取属性配置文件

思想:将连接数据库的可变化的 4 条信息写到配置文件中。以后想连接其他数据库的时候,可以直接修改配置文件,不用修改 java 程序。四个信息是什么?driverurluserpassword


src 下新建一个 Package 名叫“resources”,新建一个 fille 叫"db.properties"



#######mysql connectivity configuration###############driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/bjpowernodeuser=rootpassword=123456
#######oracle connectivity configuration###############driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:bjpowernodeuser=scottpassword=tiger
复制代码




//资源绑定器ResourceBundle bundle = ResourceBundle.getBundle("resources/db");//通过属性配置文件拿到信息String driver = bundle.getString( key: "driver");String url = bundle.getString( key: "url");String user = bundle.getString( key:"user");String password = bundle.getString( key: "password");
复制代码


用户头像

还未添加个人签名 2022.07.29 加入

还未添加个人简介

评论

发布
暂无评论
JDBC系列——JDBC编程六步_胖虎不秃头_InfoQ写作社区