ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# JDBC JDBC:(Java Database Connectivity) Java数据库连接技术。 ## jar 包 jar 包就是一组类的集合,为什么要用于域名定义包的原因就在于此,一个项目中可以会引用很多的包,如果包中不能唯一标识一个类,在第三方使用的时候就有可能出现不能引用正确类的问题。 **在 Eclipse 中装备 jar 文件** - 在项目目录下新建一个文件夹 lib ,将 jar 文件拷贝到 lib 目录; - 在 build path 菜单中 「libraries」→ 「add jars」关联进项目; ## 使用 JDBC > mysql 的 JDBC 驱动 jar 包引入项目中。 **开发步骤:** 1. 选择数据库:加载数据库驱动 2. 连接数据库 3. 创建数据库查询 4. 获取查询结果 5. 关闭查询和连接 在使用 JDBC 的时候,需要关注的几个问题 - 查询分为操作类(增加、删除、修改)和查询类。 - 要避免重复的创建连接,增加数据库的连接数。 - 注意异常的处理逻辑,保证没有未关闭的无效连接存在。 **完整的 JDBC 操作代码** ~~~ public class Demo1 { public static void main(String[] args) { insert("Tom", "1", "Java96"); } public static void insert(String name, String code, String clazz) { Connection conn = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost:3306/demo2"; String user = "root"; String password = "123456"; try { // 1. 选择数据库:加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 2. 连接数据库 conn = DriverManager.getConnection(url, user, password); // 3. 创建数据库查询 ps = conn.prepareStatement("INSERT1 INTO demo1(name,code,clazz) VALUES(?,?,?)"); ps.setString(1, name); ps.setString(2, code); ps.setString(3, clazz); // 4. 获取查询结果 int i = ps.executeUpdate(); System.out.println("一共执行了" + i + "条"); } catch (ClassNotFoundException e) { System.out.println("数据库驱动没有找到"); e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { // 5. 关闭查询和连接 try { if (null != ps) { ps.close(); } if (null != conn) { conn.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(); } } } ~~~