JDBC的一些API
文章目录
- JDBCUtils
- 数据库连接池
- Apache—DBUtils
- BasicDAO
JDBC就是Java做了一套关于数据库操作的接口,交给由不同的数据库产商去具体实现。这样,无论是那种类型的数据库,我们导入相应的 jar包
,只操作这一套接口就可以实现功能。
下面我做了一张JDBC常用API的思维导图:
------- 2023.1.15加更
JDBCUtils
以上是JDBC的一些常用API,但是连接数据库依然很繁琐。连接数据库和关闭资源是必须的操作,我们可以写一个JDBCUtils,封装连接资源和关闭资源。
public class JDBCutils {public static String user;public static String password;public static String url;public static String driver;static {try {Properties properties = new Properties();properties.load(new FileInputStream("D:\\code\\JDBC\\src\\mysql.properties"));user = properties.getProperty("user");password = properties.getProperty("password");url = properties.getProperty("url");driver = properties.getProperty("driver");} catch (IOException e) {throw new RuntimeException(e);}}public static Connection getConnection(){try {return DriverManager.getConnection(url,user,password);} catch (SQLException e) {throw new RuntimeException(e);}}public static void close(ResultSet set, Statement statement,Connection connection){try {if (set != null){set.close();}if (statement != null){statement.close();}if (connection != null){connection.close();}} catch (SQLException e) {throw new RuntimeException(e);}}
}
这样获取连接和关闭资源我们就不用每次都写一大推重复的代码了,调用这个工具类传参数就可以了。
批处理
需要处理大量的sql语句时,我们可以采取批处理的方式,即,把sql语句打个包,发到数据库执行时让其一次性执行多条。而不是收一条处理一条,再收一条再处理一条。这样提高了效率:
public void tran() throws SQLException {Connection connection = JDBCutils.getConnection();String sql = "insert into account01 values (null,?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);try {System.out.println("开始执行");long start = System.currentTimeMillis();for (int i = 0; i < 5000; i++) {preparedStatement.setString(1,"jack" + i);preparedStatement.setString(2,"666");preparedStatement.addBatch();if ((i + 1) % 1000 == 0){preparedStatement.executeBatch();preparedStatement.clearBatch();}}long end = System.currentTimeMillis();System.out.println("批处理耗时:" + (end - start));} catch (SQLException e) {throw new RuntimeException(e);}finally {JDBCutils.close(null, preparedStatement,connection );}}
数据库连接池
频繁连接、断开数据库性能较低,而且访问量突增的情况下会使得数据库瘫痪,因此引入了数据库连接池技术。连接池作为一个缓冲,既提高了效率,又保护了数据库安全。德鲁伊连接池目前性能最好,应用广泛。
public class JDBCUtilsByDruid {private static DataSource ds;static {Properties properties = new Properties();try {properties.load(new FileInputStream("D:\\code\\JDBC\\src\\druid.properties"));ds = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {throw new RuntimeException(e);}}public static Connection getConnection() throws SQLException {return ds.getConnection();}public static void close(ResultSet resultSet, Statement statement, Connection connection) {try {if (resultSet !=null){resultSet.close();}if (statement != null){statement.close();}if (connection != null){connection.close();}} catch (SQLException e) {throw new RuntimeException(e);}}
}
Apache—DBUtils
关闭connection连接后,结果集resultSet也不能再使用了。但是,一直不关连接会浪费资源,因此需要把结果集封装到集合中去。
public ArrayList<Actor> testArraylist(){Connection connection = null;String aql = "select * from actor where id >= ?";
// String aql = "select *from actor";PreparedStatement preparedStatement = null;ResultSet resultSet = null;ArrayList<Actor> list = new ArrayList<>();try {connection = JDBCUtilsByDruid.getConnection();preparedStatement = connection.prepareStatement(aql);preparedStatement.setInt(1,1);resultSet = preparedStatement.executeQuery();while (resultSet.next()) {int id =resultSet.getInt("id");String name = resultSet.getString("name");String sex = resultSet.getString("sex");String brithday = resultSet.getString("brithday");String phone = resultSet.getString("phone");list.add(new Actor(id,name,sex,brithday,phone));}System.out.println("list = " + list);} catch (SQLException e) {throw new RuntimeException(e);} finally {JDBCUtilsByDruid.close(resultSet,preparedStatement,connection);}return list;}
以上是韩老师教我们自己动手封装的办法,相当于是说一下原理和思路。而Apache—DBUtils则提供了一系列办法,我们导入jar包直接调用即可。简化了JDBC开发。开发中我们使用druid和commons.dbutils进行JDBC开发。
BasicDAO
在进一步的使用中,我们封装了BasicDAO类,引入泛型和可变参数进一步提高了通用性和效率。实例见在下的另外一篇文章,满汉楼项目。
public class BasicDAO<T> {private QueryRunner qr = new QueryRunner();public int update(String sql, Object... parameters) {Connection connection = null;try {connection = JDBCUtilsByDruid.getConnection();int update = qr.update(connection, sql, parameters);return update;} catch (SQLException e) {throw new RuntimeException(e);} finally {JDBCUtilsByDruid.close(null,null,connection);}}public List<T> quertMutli(String sql,Class<T> clazz,Object... parameters){return null;}public T quertSingle(String sql,Class<T> clazz,Object... parameters){Connection connection = null;try {connection = JDBCUtilsByDruid.getConnection();return qr.query(connection,sql,new BeanHandler<T>(clazz),parameters);} catch (SQLException e) {throw new RuntimeException(e);} finally {JDBCUtilsByDruid.close(null,null,connection);}}
}
JDBC的一些API相关推荐
- 【JDBC】JDBC 简介 ( JDBC 概念 | JDBC 本质 | 使用 JDBC 操作数据库的好处 | JDBC 提供的 API 组件 )
文章目录 一.JDBC 概念 二.JDBC 本质 三.使用 JDBC 操作数据库的好处 四.JDBC 提供的 API 组件 一.JDBC 概念 JDBC 全称 Java DataBase Connec ...
- 01-JDBC学习手册:JDBC概述之JDBC发展、API、驱动
1 概述 JDBC 从物理结构上说就是 Java 语言访问数据库的一套接口集合.从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议.JDBC 的实现由数据库厂商以驱动程序的形式提供. ...
- jdbc mysql api_JDBC Api详解
一.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口
JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...
- MySQL攻略 - JDBC程序SQL注入,PreparedStatement接口详解与案例练习,JDBC相关API小结
文章目录 SQL注入 Statement详解 基本介绍 Navicat演示SQL注入 JDBC演示SQL注入 PreparedStatement详解 基本介绍 预处理好处 预处理案例(selete语句 ...
- JDBC高级特性3--JNDI,连接池,分布式事务
2019独角兽企业重金招聘Python工程师标准>>> System.out.print(rs.getInt(1)+"\t"); System.out.print ...
- Java JDBC批处理插入数据操作
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
概述 如何获取本地数据连接 示例从DBCP数据源中获取Oracle的本地连接对象 相关接口操作 LobCreator LobHandler 插入LOB类型的数据 以块数据的方式读取LOB数据 以流数据 ...
- sql server java类型_使用基本 JDBC 数据类型 - SQL Server | Microsoft Docs
使用基本数据类型Using basic data types 01/29/2021 本文内容 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC Dr ...
最新文章
- HarmonyOS ScrollView 使用
- 山寨c 标准库中的getline 函数
- Spring是如何运用设计模式的?
- 计算机专业面试国王的问题,阿卜杜拉国王科技大学电气与计算机科学面试经验汇总...
- 我们人类与人工智能技术究竟是怎样的关系?
- 关于windows的version和OS build version
- [oralce] 利用CRT的端口转发功能直接用plsql访问数据库
- [css] 说下你对css样式的这几个属性值initial、inherit、unset、revert的理解
- dpdk的无锁环形队列Ring
- Java中的集合HashSet、LinkedHashSet、TreeSet和EnumSet(二)
- 招C++高手及强力美工
- 【必备知识】线激光扫描三维成像原理
- 三极管NPN和PNP的区别
- 云端服务器上传本地项目
- 第四篇、代理模式详解(三种)
- 码工成长手册:刚毕业的程序员如何快速提升自己?
- 支付宝支付--手机支付
- java-learning:32. ArrayList类应用
- 设计模式简单RPG游戏设计
- 易企秀 背景音乐 下载