资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
使用配置文件config/jdbc.properties来存放连接时需要的参数:DRIVER=oracle.jdbc.driver.OracleDriverURL=jdbc:oracle:thin:localhost:1521:orclUSER=lixuPASS=lixu使用方法:public class JdbcTest private static Properties ps = new Properties(); static try /利用输入流 InputStream is = JdbcTest.class.getClassLoader().getResourceAsStream(jdbc.properties);ps.load(is);is.close();Class.forName(ps.getProperty(DRIVER); catch (ClassNotFoundException e) e.printStackTrace();目录1、简介12、JDBC的操作步骤13、JDBC中特殊类型的处理54、JDBC事物的类型65、JDBC的批处理66、元数据71、简介JDBC 是一种用于执行 SQL 语句的 JavaTM API(有意思的是,JDBC 本身是个商标名而不是一个缩写字;然而,JDBC常被认为是代表 Java数据库连接 (Java Database Connectivity)。2、JDBC的操作步骤首先-导入jar包a. 新建lib的source folderb. 将jar包拷贝到lib中c. 右键包,builde path-add to path(1) 注册驱动 (需要在项目中导入不同数据库厂商提供的jar文件)第一种方式 new 数据库完整限定名称的驱动类(); 在new之前完成驱动的装载 通过数据库厂商提供的驱动类显示的实例化完成驱动注册第二种方式(推荐使用)Class.forName(com.mysql.jdbc.Driver); 通过反射完成驱动注册,推荐这种方式,不会对具体的驱动类产生依赖第三种方式DriverManager.registerDriver(驱动实例); (2) 建立与数据库间的连接 建立连接是通过java.sql.DriverManager类中的getConnection()方法来完成连接的获得,最终会将返回的实例用于实现java.sql.Connection接口。获得连接的方式有以下3种。第一种:(推荐)DriverManager.getConnection(url, user, password);第二种: DriverManager.getConnection(url);第三种: DriverManager.getConnection(url,Properties);URL格式:jdbc:mysql:/localhost:3306/test?user=root&password=rootjdbc:oracle:thin:localhost:1521:orcl(3) 创建能发送SQL语句的对象建立JDBC向数据库发送语句的对象有以下3种方式:第一种:Statement对象用于执行静态的SQL语句 Statement stmt = conn.createStatement();第二种:PreparedStatement对象用于发送带有一个或多个输入参数(IN参数)的SQL语句。PreparedStatement pstmt = conn.prepareStatement(sql);第三种:CallableStatement对象用于执行SQL储存程序一组可通过名称来调用(就象函数的调用那样)的SQL语句。CallableStatement cstmt = conn.callableStatement(sql);不过通常来说createStatement方法用于简单的SQL语句(不带参数)、prepareStatement方法用于带一个或多个IN参数的SQL语句或经常被执行的简单SQL语句,而prepareCall方法用于调用已存在的储存过程。 (4) 执行语句使用Statement执行:Statement 是 Java 执行数据库操作的一个重要对象,用于在已经建立数据库连接的基础上,向数据库发送要执行的静态的SQL语句。Statement接口执行SQL语句常用的方法:int executeUpdate(String sql):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL(数据定义语言)语句,例如:CREATE TABLE和DROP TABLE等。此方法返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATE TABLE或DROP TABLE等不操作行的语句,executeUpdate的返回值总为零。 stmt = conn.createStatement(); int result = stmt.executeUpudate(“insert into users(null , tony)”); ResultSet executeQuery(String sql):用于产生单个结果集的语句,例如:SELECT语句。stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(“select * from users”); 使用PreparedStatement执行:PreparedStatement表示预编译的 SQL 语句的对象。 通过Connection中的prepareStatement方法获得,获得时,需要传递一条SQL语句。Statement是其父接口。 PreparedStatement接口执行SQL语句常用的方法: int executeUpdate():与Statement功能相同 ResultSet executeQuery():与Statement功能相同 参数绑定与清除 使用?号完成对参数值的绑定,使用setXXX(int parameterIndex , xxx)完成对参数的赋值,值得注意的是parameterIndex必须从1开始。 使用void clearParameters()清除当前绑定的参数值。PreperedStatement相对Statement的优点:Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。没有SQL注入的问题。 (如:select or 1=1)使用CallableStatement CallableStatement表示执行 SQL 存储过程的接口。 通过Connection中的callableStatement方法获得,获得时,需要传递一条能够访问数据库存储过程的格式语句。 PreparedStatement是其父接口。 Oracle中提供了一个OracleCallableStatement接口执行存储过程和函数。 语句格式如下: 过程:“begin 过程名称 (参数.); end; ” 函数:?= call 函数名称(参数.) 代码案例见:CallableStatement_App注意:1. 设置游标参数的方式2. 从结果集获得游标的方式(5) 处理执行结果ResultSet表示数据库结果集的数据表,包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。获得数据行的方法:boolean next():将指针从当前位置下移一行。ResultSet 指针最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。 获得列数据的方法:XXX getXXX(String columnName):使用列名获得指定行对应列的值XXX getXXX(int columnIndex):使用列索引获得指定行对应列的值注意:获得列值必须确保next方法的调用对于getXXX方法,JDBC驱动程序试图将基本数据转换成指定Java类型,然后返回适合的Java值。例如,getString相当于调用数据库中数据类型的VARCHAR2。/介绍不同的取值方式while(rs.next()/第一种,通过列名System.out.println(rs.getInt(pid)+t+rs.getString(pname)+t+rs.getDate(pbirthday);/第二种,使用序号取值(序号从1开始)System.out.println(rs.getInt(1)+t+rs.getString(2)+t+rs.getDate(4);/第三种,通过getObject,忽略类型进行取值System.out.println(rs.getObject(1)+t+rs.getObject(pname)+t+rs.getObject(pbirthday);(6) 释放资源用close()方法释放。注意:释放顺序依次为ResultSet、Statement、Connection3、JDBC中特殊类型的处理 几种特殊且比较常用的类型1.DATA,TIME,TIMESTAMP date,time,datetime 存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts); 取:rs.getDate(i); rs.getTime(i); rs.getTimestamp(i);pstmt.setDate(1, java.sql.Date.valueOf(1989-09-13);pstmt.setTimestamp(2, java.sql.Timestamp.valueOf(2000-12-12 05:20:40); 2.BLOB blob 存:ps.setBinaryStream(i, inputStream, length); 取:rs.getBinaryStream(i); rs.getBlob(i).getBinaryStream(); 3.CLOB text 存:ps.setCharacterStream(index, reader, length); ps.setString(i, s); 取:reader = rs. getCharacterStream(i); reader = rs.getClob(i).g
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号