网站建设大约多少费用,中国建筑工程总公司招聘,用wordpress还是php,遂溪手机网站建设公司目录 JDBC的层次结构前言Collection角色Statement角色ResultSet角色JDBC工作的基本流程JDBC的层次结构 前言 JDBC API提供了以下接口和类#xff1a; DriverManager: 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连… 目录 JDBC的层次结构前言Collection角色Statement角色ResultSet角色JDBC工作的基本流程 JDBC的层次结构 前言 JDBC API提供了以下接口和类 DriverManager: 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。Driver: 此接口处理与数据库服务器通信。很少直接直接使用驱动程序Driver对象一般使用DriverManager中的对象它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息ConnectionDriver 或者 DriverManager根据连接的url 和参数信息创建Connection实例用来维持和数据库的数据通信如果没有销毁或者调用close()对象此对象和数据库的对象会一直保持连接StatementConnection创建Statement对象表示需要执行的sql语句或者存储过程ResultSet 表示Statement执行完SQL语句后返回的结果集。SQLException: 这个类用于处理发生在数据库应用程序中的任何错误。 总体而言JDBC包含以下几大角色 : Driver、DriverManager、Connection、Statement、ResultSet。这几大角色之间的层次关系如下图所示 Collection角色 在一般实际使用情况下我们关注的Connection的功能有以下几点 1.创建可以执行sql语句或者存储过程的对象statement用来和数据库进行交互 比如以下代码创建了几种不同类型的Statement //加载Oracle数据库驱动
Class.forName(oracle.jdbc.driver.OracleDriver);
//根据特定的URL返回可以接受此URL的数据库驱动对象
Driver driver DriverManager.getDriver(URL);
//使用数据库驱动创建数据库连接Connection会话
Connection connection driver.connect(URL, props);
//创建静态的sql语句 Statement 对象来将 SQL 语句发送到数据库。
Statement staticStatement connection.createStatement();
//创建CallableStatement 对象来调用数据库存储过程。
CallableStatement callableStatement connection.prepareCall(sqlString);
//创建参数化的Statement对象
PreparedStatement preparedStatement connection.prepareStatement(sqlString); 2.控制sql语句的事务 Connection默认情况下对于创建的statement执行的sql语句都是自动提交的即在statement语句执行完后自动执行commit操作将结果影响到物理数据库。为了满足更好地事务控制需求我们也可以手动地控制事务手动地对statement 的sql语句执行进行提交(commit)或者回滚(rollback)。 String sqlStringinsert into tableName(column1,column2) values(value1,value2);
//加载Oracle数据库驱动
Class.forName(oracle.jdbc.driver.OracleDriver);
//根据特定的URL返回可以接受此URL的数据库驱动对象
Driver driver DriverManager.getDriver(URL);
//使用数据库驱动创建数据库连接Connection会话
connection driver.connect(URL, props);
//使用自定义的事务要设置connection不自动提交
connection.setAutoCommit(false);
//创建静态的sql语句 Statement 对象来将 SQL 语句发送到数据库。
Statement staticStatement connection.createStatement();
try{
//执行插入操作
staticStatement.execute(sqlString);
staticStatement.getConnection().commit();//和上面的connection等价statement只有一个创建自身的connection的引用
}catch(Exception e)
{
//有异常则rollback
staticStatement.getConnection().rollback();
} 3.获取数据库连接的元数据即数据库的整体综合信息。 连接的数据库整体信息被封装在了一个 DatabaseMetaData类型的对象上可以通过以下代码获得 DatabaseMetaData databaseMetaData connection.getMetaData() 具体DatabaseMetaData内包含了什么信息请查看 JDK 的API对DatabaseMetaData的描述。 Statement角色 Statement 的功能在于根据传入的sql语句将传入sql经过整理组合成数据库能够识别的sql语句(对于静态的sql语句不需要整理组合而对于预编译sql语句和批量语句则需要整理)然后传递sql请求之后会得到返回的结果。 对于查询sql结果会以ResultSet的形式返回。 SQL语句可以分为增删改查CRUDCreateReadUpdateDelete四种形式JDBC 从对数据更新与否的角度上看将上面的四种形式分为两类查询类别和更新类别。即 查询类别select 语句更新类别Insert 、update、delete语句对应地Statement执行sql的几种形式 对sql语句类型不进行区分执行sql语句的方法; statement提供了execute(String sql)方法支持此种形式定义如下 如果是执行的sql是查询类型的select语句此方法会返回true需要自己再调用 statement.getResultSet() 方法来获取 Resultset结果集如果是执行的更新类的sql语句如 updatedeleteinsert语句此方法会返回false自己调用statement.getUpdateCount() 返回sql语句影响的行数。对查询类型的sql语句的执行方法 statement提供了executeQuery(String sql)方法支持此形式定义如下 对更新类的sql语句 的执行方法 statement提供了executeUpdate(String sql)方法支持此形式定义如下批量sql的执行方法 有时候需要将一些sql语句一起提交给数据库批量执行statement提供了一些方法对批量sql的支持 ResultSet角色 当Statement查询sql执行后会得到ResultSet对象ResultSet对象是sql语句查询的结果作为数据库结果的映射其映射关系如下图所示。ResultSet对从数据库返回的结果进行了封装使用迭代器的模式逐条取出结果集中的记录。其遍历结果集的基本形式如下 while(resultSet.next()) { //传入列明或者列索引获取记录中对应列的值 resultSet.getXXX(param); } ResultSet游标的移动和定位 Resultset 提供了很多游标定位的方法部分方法已经在下面列出部分方法详情查API ResultSet结果集的元数据信息 元信息是指关于 ResultSet 对象中列的类型和属性信息的对象。可以通过以下方法获取 ResultSet.getXXX(param) 、ResultSet.updateXXX()的XXX问题 JDBC中定义了数据库中的数据类型和java数据类型的映射用于数据库和Java数据类型之间的转换。在使用ResultSet去记录中的某一列值的时候用户要根据数据库对应列的数据类型地应的java数据类型否则的话有可能抛出异常。下图定义了数据库和Java类型之间的映射 JDBC工作的基本流程 一个基本的JDBC工作流程分为以下几步 加载特定数据库驱动器实现类并注册驱动器Driver会注册到DriverManager中根据特定的URL返回可以接受此URL的数据库驱动对象Driver使用数据库驱动 Driver 创建数据库连接Connection会话使用 Connection对象创建 用于操作sql的Statement对象statement对象 .执行 sql语句返回结果ResultSet 对象处理ResultSet中的结果关闭连接释放资源。以下是一个简单的案例: package com.sxt.reflectdemo05;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class DBConnection {static final String URL jdbc:oracle:thin:127.0.0.1:1521:xe;static final String USER_NAME xyr;static final String PASSWORD 123456;public static void main(String[] args) {connectionTest();
}public static void connectionTest() {Connection connection null;Statement statement null;ResultSet resultSet null;try {// 1.加载类并注册驱动器Driver会注册到DriverManager中// 加载Oracle数据库驱动Class.forName(oracle.jdbc.driver.OracleDriver).newInstance();// 2.根据特定的URL返回可以接受此URL的数据库驱动对象Driver driver DriverManager.getDriver(URL);Properties props new Properties();props.put(user, USER_NAME);props.put(password, PASSWORD);// 3.使用数据库驱动创建数据库连接Connection会话connection driver.connect(URL, props);// 4.获得Statement对象statement connection.createStatement();// 5.执行 sql语句返回结果resultSet statement.executeQuery(select * from emp);// 6.处理结果取出数据while (resultSet.next()) {System.out.println(resultSet.getString(2));}// 7.关闭链接释放资源} catch (ClassNotFoundException e) {System.out.println(加载Oracle类失败);e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {// 使用完成后管理链接释放资源释放顺序应该是 ResultSet -Statement -Connectiontry {resultSet.close();} catch (SQLException e) {e.printStackTrace();}try {statement.close();} catch (SQLException e) {e.printStackTrace();}try {connection.close();} catch (SQLException e) {e.printStackTrace();}}
}
} 以上 Fzxey转载于:https://www.cnblogs.com/fzxey/p/10946762.html