博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
六 JDBC
阅读量:4297 次
发布时间:2019-05-27

本文共 2625 字,大约阅读时间需要 8 分钟。

JDBC

在 JDK 1.1 版本之前,Java 语言对数据库访问的支持有限,所以开发人员通常使用 ODBC(Open DataBase Connectivity)函数访问数据库,这限制了 Java 程序的跨平台发布能力。

JDBC(Java DataBase Connectivity)主要有 3 种作用:连接数据库、发送 SQL 语句、处理语句执行结果。

JDBC API 屏蔽了不同数据库程序之间的差别,使得程序设计人员可以使用标准的数据库程序接口。

JDBC Driver Manager 则用来加载具体的数据库驱动程序,从而提交 SQL 语句。

数据库驱动程序是 JDBC API 访问数据库的桥梁,其由数据库厂商提供。其实际上是一套实现了 JDBC 定义的接口的类集,主要分为四种。

  • JDBC-ODBC 桥驱动程序,使客户端能够通过 JDBC 调用连接到一个使用 ODBC 驱动程序的数据库。
  • 部分本地 API Java 驱动程序,将 JDBC 调用转换为特定的数据库调用。
  • JDBC 纯网络 Java 驱动程序,将 JDBC 调用转换为独立于数据库的网络协议。
  • 本地协议的纯 Java 驱动程序,将 JDBC 调用转换为数据库能够直接使用的网络协议。

在使用 JDBC 之前,需要先去获取相关数据库的驱动程序,获取到相应 jar 包后,配置相应的环境变量。当然,如果需要,也可以根据 JDBC 和数据库已制定的协议,自己编写驱动程序。

以 MySql 为例,下载安装后,配置好环境变量,并导入相应的驱动程序。

使用命令 mysqladmin -u root -p create myDataBase 创建一个数据库,而后在 JSP 中进行连接。

<%@ page import="java.sql.*" %><%Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDataBase","root","888888");%>

然后便可以通过 Statement 类和 ResultSet 类发送 SQL 语句并获得相应的结果。

使用 Connection 的实例对象方法 createStatement() 获取 Statement 实例后,除了调用其 executeQuery() 和 executeUpdate() 方法查询和更新数据库外,还可以使用 execute() 方法执行存储过程或动态生成的语句,但是需要根据返回值以及 getMoreResults() 方法对结果分情况处理。

使用 Statement 的子类 PreparedStatement 预编译 SQL 语句,重复使用,可以提高性能。

DatabaseMetaData 实例对象中包含有连接到的数据库的相关信息,如获取数据库是否支持存储过程。

DatabaseMetaData data = connection.getMetaData();boolean isSupport = data.supportsStoredProcedures();if (isSupport) {	CallableStatement call = connection.prepareCall("{?=call procedureName(?,?)}");	call.registerOutParameter(1, Types.BOOLEAN);	call.setInt(1, 10);	call.setBigDecimal(3, BigDecimal.TEN);	call.registerOutParameter(3, Types.DECIMAL,5);	call.execute();}

在上面的存储过程中,有 3 个参数,分别为输出型、输入型和输入输出型参数,在执行之前,需要进行参数设置。

在获取结果集 ResultSet 时,可以根据需要指定获取的结果集是否是可以随意访问或可更新的。

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

数据库连接池,数据库的连接是一件性能消耗大的操作,为了提高性能,使用数据库连接池来负责分配、管理和释放连接,从而允许一个连接可以被重复使用。

要使用数据库连接池,需要先配置相应的数据源,在 server.xml 文件中的 Context 上下文中配置一个 javax.sql.DataSource 类型的资源,其包含数据库驱动类名、连接地址、用户名、密码、最大和最小连接数等信息。

服务器的资源配置好后,需要在 web.xml 文件中引用相应的资源,如此,服务器启动时,才会加载相应的资源。

jdbc/mydb
javax.sql.DataSource
Container

最后,在 JSP 中以如下方式使用连接池,来获取数据库连接。

<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %><%Context context = new InitialContext();DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/mydb");Connection connection = dataSource.getConnection();%>

分页显示数据库中的数据:

  • 查询所有的数据,使用游标获取指定行数的数据,丢弃其他数据,如果数据很多,则十分低效,耗费内存。
  • 缓存所有的查询结果集,每次请求不同页时,从缓存中获取相应数据,得到的数据可能是过期数据,且查询所有结果,数据很多时,非常耗时。
  • 使用数据库提供的定位集的 SQL 语句,但不同的数据库的语句不同,这会降低可移植性。

转载地址:http://qpdws.baihongyu.com/

你可能感兴趣的文章
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day05
查看>>
学习笔记_vnpy实战培训day06
查看>>
聚合搜索引擎
查看>>
Python super钻石继承
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
python之偏函数
查看>>