ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# JDBC JDBC:(Java Database Connectivity) Java数据库连接技术。 ## jar 包 jar 包就是一组类的集合,为什么要用于域名定义包的原因就在于此,一个项目中可以会引用很多的包,如果包中不能唯一标识一个类,在第三方使用的时候就有可能出现不能引用正确类的问题。 **在 Eclipse 中装备 jar 文件** * 在项目目录下新建一个文件夹 lib ,将 jar 文件拷贝到 lib 目录; * 在 build path 菜单中 「libraries」→ 「add jars」关联进项目; `JDBC`jar包下载地址 ## 使用 JDBC >[warning] mysql 的 JDBC 驱动 jar 包引入项目中。 **开发步骤:** 1. 选择数据库:加载数据库驱动 2. 连接数据库 3. 创建数据库查询 4. 获取查询结果 5. 关闭查询和连接 在使用 JDBC 的时候,需要关注的几个问题 * 查询分为操作类(增加、删除、修改)和查询类。 * 要避免重复的创建连接,增加数据库的连接数。 * 注意异常的处理逻辑,保证没有未关闭的无效连接存在。 **完整的 JDBC 操作代码** ~~~ package com.ntdodoke.allBegin; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Demo { public static void main(String[] args) { getDataFromDataBase(); } public static void getDataFromDataBase() { Connection conn = null;//Connection是与特定数据库连接回话的接口 PreparedStatement ps = null; try { //1.注册驱动(静态方法)(包名+类名),告知JVM使用的是哪一个数据库的驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //设置连接地址,时间格式和编码格式(因为版本升级,所以需要加上时间格式) String url = "jdbc:mysql://localhost:3306/j121study?serverTimezone=UTC&characterEncoding=UTF-8"; String user = "root"; String password = "123456"; //2.连接数据库 conn=DriverManager.getConnection(url,user,password); /** * DriverManager类用来管理数据库中的所有驱动程序。 * 是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。 * 此外,DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以调用。 * DriverManager类的常用方法有getConnection(String url,String user,String password)方法 */ //3.获取语句执行平台,并创建数据库查询 //Statement s = conn.createStatement();Statement接口创建之后,可以执行SQL语句,完成对数据库的增删改查。然而查询略显复杂。 //与 Statement一样,PreparedStatement也是用来执行sql语句的,与创建Statement不同的是,需要根据sql语句创建PreparedStatement。 //除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接。 ps = conn.prepareStatement("select * from school where school_name=?"); //该语句为参数保留一个问号作为占位符 ps.setString(1, "渡课教育跃龙路主校区"); //4.执行查询语句,并获取查询结果 ResultSet rs = ps.executeQuery(); while(rs.next()) { System.out.println(rs.getInt("id")); System.out.println(rs.getString("address")); } conn.close(); ps.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if(null != conn) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if(null != ps) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } ~~~ **考虑了连接创建效率的 JDBC 代码,以及查询的字段处理** ~~~ package com; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Demo2 { public static void main(String[] args) { createConn(); for (int i = 1; i <= 100; i++) { String istr = String.format("%03d", i); exeUpdate("Jack" + istr, String.valueOf(i), "Java96"); } exeQuery("Jack"); closeConn(); } private static Connection conn; /** * 创建连接 */ public static void createConn() { try { conn = null; String url = "jdbc:mysql://localhost:3306/demo2"; String user = "root"; String password = "123456"; // 1. 选择数据库:加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 2. 连接数据库 conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { System.out.println("数据库驱动没有找到"); e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static void exeQuery(String name) { PreparedStatement ps = null; try { // 创建数据库查询 ps = conn.prepareStatement("SELECT id,name,code,clazz FROM demo1 WHERE name LIKE ?"); ps.setString(1, name + "%"); // 获取查询结果 ResultSet rs = ps.executeQuery(); // 遍历结果 while (rs.next()) { int id = rs.getInt("id"); String name1 = rs.getString("name"); String code = rs.getString("code"); String clazz = rs.getString("clazz"); System.out.println("id="+id+",name="+name1+",code="+code+",clazz="+clazz+""); } } catch (SQLException e) { e.printStackTrace(); } finally { // 5. 关闭查询 try { if (null != ps) { ps.close(); } } catch (SQLException e) { e.printStackTrace(); } } } public static void exeUpdate(String name, String code, String clazz) { PreparedStatement ps = null; try { // 创建数据库查询 ps = conn.prepareStatement("INSERT INTO demo1(name,code,clazz) VALUES(?,?,?)"); ps.setString(1, name); ps.setString(2, code); ps.setString(3, clazz); // 获取查询结果 int i = ps.executeUpdate(); System.out.println("一共执行了" + i + "条"); } catch (SQLException e) { e.printStackTrace(); } finally { // 5. 关闭查询 try { if (null != ps) { ps.close(); } } catch (SQLException e) { e.printStackTrace(); } } } /** * 关闭连接 */ public static void closeConn() { // 5. 关闭连接 try { if (null != conn) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ~~~