本文共 2625 字,大约阅读时间需要 8 分钟。
在 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 之前,需要先去获取相关数据库的驱动程序,获取到相应 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();%>
分页显示数据库中的数据:
转载地址:http://qpdws.baihongyu.com/