学习JDBC这一篇就够了 一时失言乱红尘 2023-03-03 14:29 26阅读 0赞 ### 目录 ### * * 第一章 概述 * 第二章 数据库连接 * 第三章 数据库事务 * 第四章 数据库连接池 * * 4.1、DBCP * 4.2、Druid * 4.3、C3P0 * 第五章 DButils -------------------- **配套资料,免费下载** 链接:https://pan.baidu.com/s/1Wa7aUsZGZR3N9UzFiYr3sw 提取码:6xh5 复制这段内容后打开百度网盘手机App,操作更方便哦 ## 第一章 概述 ## JDBC(Java Database Connectivity)是SUN公司提供的一种数据库访问规则、规范,由于数据库种类较多且Java语言使用比较广泛,SUN公司就提供了一种规范,让其它的数据库提供商去实现底层的访问规则,我们的Java程序只要使用SUN公司提供的jdbc驱动就可以连接不同厂商的数据库了 ## 第二章 数据库连接 ## **1、工具类** import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCUtil { private static String driverClass = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://127.0.0.1:3306/mytest"; private static String user = "root"; private static String password = "root"; static { try { Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() { try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } return null; } public static void release(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) { closeConnection(connection); closePreparedStatement(preparedStatement); closeResultSet(resultSet); } public static void release(Connection connection, PreparedStatement preparedStatement) { closeConnection(connection); closePreparedStatement(preparedStatement); } public static void closeConnection(Connection connection) { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } finally { connection = null; } } } public static void closePreparedStatement(PreparedStatement preparedStatement) { if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } finally { preparedStatement = null; } } } public static void closeResultSet(ResultSet resultSet) { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } finally { resultSet = null; } } } } **2、测试类** import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.junit.Test; public class JDBCTest { @Test public void testQuery() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = JDBCUtil.getConnection(); String sql = "select * from admin"; preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement, resultSet); } } @Test public void testInsert() { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); String sql = "insert into admin values(NULL,'xiaowu','123456')"; preparedStatement = connection.prepareStatement(sql); int rows = preparedStatement.executeUpdate(sql); if (rows > 0) { System.out.println("插入成功"); } else { System.out.println("插入失败"); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement); } } @Test public void testUpdate() { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); String sql = "update admin set username = 'xiaoqi' where id = 5"; preparedStatement = connection.prepareStatement(sql); int rows = preparedStatement.executeUpdate(sql); if (rows > 0) { System.out.println("修改成功"); } else { System.out.println("修改失败"); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement); } } @Test public void testDelete() { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); String sql = "delete from admin where id = 5"; preparedStatement = connection.prepareStatement(sql); int rows = preparedStatement.executeUpdate(sql); if (rows > 0) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement); } } } ## 第三章 数据库事务 ## @Test public void testTransaction() { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); // 前提:关闭事务 connection.setAutoCommit(false); String sql = "update account set money = money - ? where id = ?"; preparedStatement = connection.prepareStatement(sql); // 扣钱, 扣ID为 1 的100块钱 preparedStatement.setInt(1, 100); preparedStatement.setInt(2, 1); preparedStatement.executeUpdate(); // 模拟异常 int a = 10 / 0; // 加钱, 给ID为 2 加100块钱 preparedStatement.setInt(1, -100); preparedStatement.setInt(2, 2); preparedStatement.executeUpdate(); // 成功:提交事务 connection.commit(); } catch (SQLException e) { try { // 失败:回滚事务 connection.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement); } } ## 第四章 数据库连接池 ## ### 4.1、DBCP ### **1、基本使用** import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.commons.dbcp2.BasicDataSource; public class DBCPTest { public static void main(String[] args) throws SQLException { BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUsername("root"); dataSource.setPassword("root"); Connection connection = dataSource.getConnection(); String sql = "select * from admin"; PreparedStatement prepareStatement = connection.prepareStatement(sql); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } resultSet.close(); connection.close(); dataSource.close(); } } **2、高级使用** dbcp-config.properties #基本设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/mytest username=root password=root #数据库连接池初始化数量 initialSize=10 #数据库连接池中的最大的数据库连接数 maxActive=50 #数据库连接池中的最小的数据库连接数 minIdle=5 DBCPWithConfig.java import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; public class DBCPWithConfig { @SuppressWarnings("static-access") public static void main(String[] args) throws Exception { BasicDataSourceFactory dataSourceFactory = new BasicDataSourceFactory(); Properties properties = new Properties(); InputStream is = DBCPWithConfig.class.getClassLoader().getResourceAsStream("dbcp-config.properties"); properties.load(is); DataSource dataSource = dataSourceFactory.createDataSource(properties); Connection connection = dataSource.getConnection(); String sql = "select * from admin"; PreparedStatement prepareStatement = connection.prepareStatement(sql); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } resultSet.close(); connection.close(); } } ### 4.2、Druid ### **1、基本使用** import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.alibaba.druid.pool.DruidDataSource; public class DruidTest { public static void main(String[] args) throws SQLException { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUsername("root"); dataSource.setPassword("root"); Connection connection = dataSource.getConnection(); String sql = "select * from admin"; PreparedStatement prepareStatement = connection.prepareStatement(sql); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } resultSet.close(); connection.close(); dataSource.close(); } } **2、高级使用** druid-config.properties #基本设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/mytest username=root password=root #数据库连接池初始化数量 initialSize=10 #数据库连接池中的最大的数据库连接数 maxActive=50 #数据库连接池中的最小的数据库连接数 minIdle=5 DruidWithConfig.java import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DruidWithConfig { @SuppressWarnings("static-access") public static void main(String[] args) throws Exception { DruidDataSourceFactory dataSourceFactory = new DruidDataSourceFactory(); Properties properties = new Properties(); InputStream is = DruidWithConfig.class.getClassLoader().getResourceAsStream("druid-config.properties"); properties.load(is); DataSource dataSource = dataSourceFactory.createDataSource(properties); Connection connection = dataSource.getConnection(); String sql = "select * from admin"; PreparedStatement prepareStatement = connection.prepareStatement(sql); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } resultSet.close(); connection.close(); } } ### 4.3、C3P0 ### **1、基本使用** import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Test { public static void main(String[] args) throws SQLException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); Connection connection = dataSource.getConnection(); String sql = "select * from admin"; PreparedStatement prepareStatement = connection.prepareStatement(sql); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } resultSet.close(); connection.close(); dataSource.close(); } } **2、高级使用** c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <!-- 基本设置 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://127.0.0.1/mytest</property> <property name="user">root</property> <property name="password">root</property> <!-- 数据库连接池初始化数量 --> <property name="initialPoolSize">10</property> <!-- 数据库连接池中的最大的数据库连接数 --> <property name="maxPoolSize">100</property> <!-- 数据库连接池中的最小的数据库连接数 --> <property name="minPoolSize">10</property> </default-config> </c3p0-config> C3P0WithConfig.java import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0WithConfig { public static void main(String[] args) throws SQLException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); Connection connection = dataSource.getConnection(); String sql = "select * from admin"; PreparedStatement prepareStatement = connection.prepareStatement(sql); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { Object id = resultSet.getObject(1); Object username = resultSet.getObject(2); Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password); } resultSet.close(); connection.close(); dataSource.close(); } } ## 第五章 DButils ## **1、基本的使用** Admin.java public class Admin { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Admin [id=" + id + ", username=" + username + ", password=" + password + "]"; } } DBUtilsTest.java import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DBUtilsTest { @Test public void testQueryOne() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); QueryRunner queryRunner = new QueryRunner(dataSource); String sql = "select * from admin where id = ?"; Admin admin = queryRunner.query(sql, new BeanHandler<Admin>(Admin.class), 1); System.out.println(admin); dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testQueryAll() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); QueryRunner queryRunner = new QueryRunner(dataSource); String sql = "select * from admin"; List<Admin> admins = queryRunner.query(sql, new BeanListHandler<Admin>(Admin.class)); for (Admin admin : admins) { System.out.println(admin); } dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testInsert() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); QueryRunner queryRunner = new QueryRunner(dataSource); String sql = "insert into admin values(NULL,?,?)"; int rows = queryRunner.update(sql, "xiaojiu", "123456"); if (rows > 0) { System.out.println("插入成功"); } else { System.out.println("插入失败"); } dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testUpdate() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); QueryRunner queryRunner = new QueryRunner(dataSource); String sql = "update admin set username = 'xiaoqi' where id = ?"; int rows = queryRunner.update(sql, 4); if (rows > 0) { System.out.println("修改成功"); } else { System.out.println("修改失败"); } dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testDelete() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); QueryRunner queryRunner = new QueryRunner(dataSource); String sql = "delete from admin where id = ?"; int rows = queryRunner.update(sql, 6); if (rows > 0) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } } 注意问题: BeanHandler,查询到的单个数据封装成一个对象 BeanListHandler,查询到的多个数据封装成一个List<对象> ArrayHandler,查询到的单个数据封装成一个数组 ArrayListHandler,查询到的多个数据封装成一个集合,集合里面的元素是数组 MapHandler,查询到的单个数据封装成一个map MapListHandler,查询到的多个数据封装成一个集合,集合里面的元素是Map ColumnListHandler KeyedHandler ScalarHandler **2、自定义实现** ResultSetHandler.java import java.sql.ResultSet; import java.sql.SQLException; public interface ResultSetHandler<T> { /** * 定义数据封装的规则 * * @param <T> * @param rs */ T handle(ResultSet rs) throws SQLException; } MyQueryRunner.java import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.DataSource; public class MyQueryRunner { private DataSource dataSource = null; public MyQueryRunner() { super(); } public MyQueryRunner(DataSource dataSource) { super(); this.dataSource = dataSource; } public <T> T query(String sql, ResultSetHandler<T> handler, Object... args) { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); preparedStatement = connection.prepareStatement(sql); ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData(); for (int i = 0; i < parameterMetaData.getParameterCount(); i++) { preparedStatement.setObject(i + 1, args[i]); } ResultSet resultSet = preparedStatement.executeQuery(); return (T) handler.handle(resultSet); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement); } return null; } public int update(String sql, Object... args) { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); preparedStatement = connection.prepareStatement(sql); ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData(); for (int i = 0; i < parameterMetaData.getParameterCount(); i++) { preparedStatement.setObject(i + 1, args[i]); } return preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(connection, preparedStatement); } return 0; } } Admin.java public class Admin { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Admin [id=" + id + ", username=" + username + ", password=" + password + "]"; } } MyQueryRunnerTest.java import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; public class MyQueryRunnerTest { @Test public void testQueryOne() { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); MyQueryRunner queryRunner = new MyQueryRunner(dataSource); String sql = "select * from admin where id = ?"; Admin admin = queryRunner.query(sql, new ResultSetHandler<Admin>() { @Override public Admin handle(ResultSet rs) throws SQLException { while (rs.next()) { Admin admin = new Admin(); int id = rs.getInt("id"); String username = rs.getString("username"); String password = rs.getString("password"); admin.setId(id); admin.setUsername(username); admin.setPassword(password); return admin; } return null; } }, 1); System.out.println(admin); dataSource.close(); } @Test public void testQueryAll() { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); MyQueryRunner queryRunner = new MyQueryRunner(dataSource); String sql = "select * from admin"; List<Admin> admins = queryRunner.query(sql, new ResultSetHandler<List<Admin>>() { @Override public List<Admin> handle(ResultSet rs) throws SQLException { List<Admin> admins = new ArrayList<Admin>(); while (rs.next()) { Admin admin = new Admin(); int id = rs.getInt("id"); String username = rs.getString("username"); String password = rs.getString("password"); admin.setId(id); admin.setUsername(username); admin.setPassword(password); admins.add(admin); } return admins; } }); for (Admin admin : admins) { System.out.println(admin); } dataSource.close(); } @Test public void testInsert() { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); MyQueryRunner queryRunner = new MyQueryRunner(dataSource); String sql = "insert into admin values(NULL,?,?)"; int rows = queryRunner.update(sql, "xiaoqiang", "123456"); if (rows > 0) { System.out.println("插入成功"); } else { System.out.println("插入失败"); } dataSource.close(); } @Test public void testUpdate() { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); MyQueryRunner queryRunner = new MyQueryRunner(dataSource); String sql = "update admin set username = 'mingming' where id = ?"; int rows = queryRunner.update(sql, 4); if (rows > 0) { System.out.println("修改成功"); } else { System.out.println("修改失败"); } dataSource.close(); } @Test public void testDelete() { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest"); dataSource.setUser("root"); dataSource.setPassword("root"); MyQueryRunner queryRunner = new MyQueryRunner(dataSource); String sql = "delete from admin where id = ?"; int rows = queryRunner.update(sql, 7); if (rows > 0) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } dataSource.close(); } }
相关 学习JDBC这一篇就够了 目录 第一章 概述 第二章 数据库连接 第三章 数据库事务 第四章 数据库连接池 4.1、DBC 一时失言乱红尘/ 2023年03月03日 14:29/ 0 赞/ 27 阅读
相关 学习Maven这一篇就够了 目录 第一章 Maven简介 1.1、Maven概述 1.2、Maven特点 1.3、Maven官网 1.4、 ╰+哭是因爲堅強的太久メ/ 2022年12月28日 05:28/ 0 赞/ 689 阅读
相关 学习JavaScript这一篇就够了 目录 第一章 JavaScript简介 1.1、JavaScript的起源 1.2、JavaScript的组成 1.3、Ja 痛定思痛。/ 2022年12月17日 15:55/ 0 赞/ 268 阅读
相关 学习JavaWeb这一篇就够了 目录 第一章 开发工具 1.1、JDK安装 1.2、Tomcat安装 1.3、IDEA安装 1.4、IDEA集 忘是亡心i/ 2022年12月06日 04:14/ 0 赞/ 185 阅读
相关 学习Tomcat这一篇就够了 目录 第一章 Tomcat概述 1.1、Tomcat概述 1.2、Tomcat历史 1.3、T 短命女/ 2022年12月04日 08:37/ 0 赞/ 449 阅读
相关 学习FastDFS这一篇就够了 目录 第一章 FastDFS简介 1.1、FastDFS的简介 1.2、FastDFS的发展历史 ╰+攻爆jí腚メ/ 2022年12月04日 07:40/ 0 赞/ 659 阅读
相关 学习Nginx这一篇就够了 目录 第一章 Nginx概述 1.1、Nginx概述 1.2、Nginx官网 1.3、Ngin 叁歲伎倆/ 2022年12月02日 04:24/ 0 赞/ 403 阅读
相关 学习Oracle这一篇就够了 目录 第一章 数据库概述 1.1、数据库的好处 1.2、数据库的常见概念 1.3、数据库的存储 缺乏、安全感/ 2022年11月27日 03:13/ 0 赞/ 424 阅读
相关 学习JavaScript这一篇就够了 [https://blog.csdn.net/qq\_38490457/article/details/109257751?utm\_medium=distribute.pc\ 左手的ㄟ右手/ 2022年11月21日 03:34/ 0 赞/ 305 阅读
相关 学习JDBC这一篇就够了 文章目录 一、JDBC简介 二、获取数据库连接 准备工作 1、导入驱动jar包 2、加载与注册JDBC驱 痛定思痛。/ 2022年11月18日 01:42/ 0 赞/ 353 阅读
还没有评论,来说两句吧...