JDBC 使用

本文介绍了JDBC的基础知识,包括JDBC简介、架构、常用接口及其编程步骤。讲解了如何加载数据库驱动、建立数据库连接、创建Statement对象,以及如何执行SQL语句和操作结果集。还提到了JDBC的双层和三层架构,强调了PreparedStatement相对于Statement的效率和安全性优势。
摘要由CSDN通过智能技术生成

JDBC 使用

JDBC 简介

JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,由Java 语言编写的类和接口组成,大致分为两类:针对Java程序员的JDBC API和针对数据库开发商的低层的JDBC driver API。而JDBC驱动程序由实施了这些接口的类组成

java数据库连接,即使用java代码发送sql语句的技术,为多种关系型数据库提供统一访问

JDBC 架构

分为双层架构和三层架构

双层 :

Two-tier-Architecture-for-Data-Access

作用 :此架构中,java Applet 或应用直接访问数据源

条件 :要求 Driver 能与访问的数据库交互

机制 :用户命令传给数据库或其他数据源,随之结果被返回

部署 :数据源可以在另一台机器上,用户通过网络连接,称为 C/S 配置

三层 :

Three-tier-Architecture-for-Data-Access

侧架构特殊之处在于,引入中间层服务

流程:命令和结构都会经过该层

吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势

历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视

JDBC 常用接口

Driven 接口(驱动)

Driver: 此接口处理与数据库服务器通信;很少直接直接使用驱动程序(Driver)对象,一般使用DriverManager中的对象,它用于管理此类型的对象;它也抽象与驱动程序对象工作相关的详细信息

装载驱动 :

Mysql驱动装载 : Class.forName(“com.mysql.jdbc.Driver”);

Oracle驱动装载:Class.forName(“oracle.jdbc.friver.OracleDriver”);

DriverManager 接口

DriverManager 是 JDBC 的管理层,作用于用户和驱动程序之间

DriverManager 跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接

Connection 接口

Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果

DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上

连接MYSQL数据库
  • Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:/port/database”,“user”,“password”);
连接ORACLE 数据库
  • Connection con = DriverManager.getConnection(“jdbc:oracle:this:@localhost:port:database”,“user”,“password”);

Statement 接口

  • 用于执行静态SQL语句 并返回它所生成结果的对象
三种Statement类
Statement :
  • 由createStatement 创建 ,用于发送简单的SQL语句
PreparedStatement
  • 继承自Statement接口,有PreparedStatement创建,用于发送含有一个或多个输入参数的SQL语句
  • PreparedStatement 对象比 Statement 对象的_效率更高 _,并且可以防止 _SQL注入 _
CallableStatement
  • 继承自PreparedStatement;由方法prePareCall创建,用于调用存储过程
常用的Statement方法
  • execute() : 运行语句,返回是否有结果集
  • executeQuery :运行select语句,返回ResultSet结果集
  • executeUpdate() : 运行insert / update / delete操作,返回更新的行数

ResultSet 接口

Statement 执行 SQL 语句时返回 ResultSet 结果集

ResultSet 提供的检索不同类型字段的方法,常用的有 :

  • getString() : 获得在数据库里的varchar/char 等数据类型的对象
  • getFloat() : 获得杂数据库里是Float类型的对象
  • getDate() : 获得在数据库里面是Date类型的数据
  • getBoolean() : 获得在数据库里面是 Boolean 类型的数据

JDBC 编程步骤 :

1.加载数据库驱动

加载MySql驱动

Class.forName(“com.mysql.jdbc.Driver”);

加载Oracle驱动

Class.forName(“oracle.jdbc.driver.OracleDriver”)

2.通过DriverManager获得连接

Connection conn = DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/h”,“root”,"")

Connection conn = DriverManager.getConnection(url, user, password);

参数说明 :url——连接数据库url

​ user——连接数据的用户名

​ password——连接数据库密码

3.通过Connection创建Statement对象

Statement stmt = conn.createStatement();

4.使用Statement执行SQL语句

ResultSet rs = stmt.executeQuery(“select * from student”);

5.操作结果集

循环输出数据库信息 :

while(rs.next()){

​ int id = rs.getInt(“id”);

​ String name = rs.getString(“name”);

​ String gender = rs.getString(“gender”);

​ System.out.println(id+","+name+","+gender);

}

6.关闭资源

rs.close();
stmt.close();
conn.close();

常见方法

DriverManager 类的常用方法

方法功能描述
getConnection(String url , String user , String password)指定3个入口参数,依次是连接数据库的URL、用户名、密码,来获取与数据库的连接
setLoginTimeout()获取驱动程序试图登录到某一数据库时可以等待的最长时间,以秒为单位
println(String message)将一条消息打印到当前JDBC日志流中

Connection接口提供的常用方法

方 法 名 称功 能 描 述
createStatement()创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例
prepareStatement()创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理
prepareCall()创建并返回一个CallableStatement实例,通常在调用数据库存储过程时创建该实例
setAutoCommit()设置当前Connection实例的自动提交模式。默认为true,即自动将更改同步到数据库中;如果设为false,需要通过执行commit()或rollback()方法手动将更改同步到数据库中
getAutoCommit()查看当前的Connection实例是否处于自动提交模式,如果是则返回true,否则返回false
setSavepoint()在当前事务中创建并返回一个Savepoint实例,前提条件是当前的Connection实例不能处于自动提交模式,否则将抛出异常
releaseSavepoint()从当前事务中移除指定的Savepoint实例
setReadOnly()设置当前Connection实例的读取模式,默认为非只读模式。不能在事务当中执行该操作,否则将抛出异常。有一个boolean型的入口参数,设为true则表示开启只读模式,设为false则表示关闭只读模式
isReadOnly()查看当前的Connection实例是否为只读模式,如果是则返回true,否则返回false
isClosed()查看当前的Connection实例是否被关闭,如果被关闭则返回true,否则返回false
commit()将从上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connection实例当前拥有的所有数据库锁定
rollback()取当前事务中的所有更改,并释放当前Connection实例拥有的所有数据库锁定。该方法只能在非自动提交模式下使用,如果在自动提交模式下执行该方法,将抛出异常。有一个入口参数为Savepoint实例的重载方法,用来取消Savepoint实例之后的所有更改,并释放对应的数据库琐定
close()立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接

Statement接口常用的方法

方 法 名 称功 能 描 述
executeQuery(String sql)执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例
executeUpdate(String sql)执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
clearBatch()清除位于Batch中的所有SQL语句。如果驱动程序不支持批量处理将抛出异常
addBatch(String sql)将指定的SQL命令添加到Batch中。String型入口参数通常为静态的INSERT或UPDATE语句。如果驱动程序不支持批量处理将抛出异常
executeBatch()执行Batch中的所有SQL语句,如果全部执行成功,则返回由更新计数组成的数组,数组元素的排序与SQL语句的添加顺序对应。数组元素有以下几种情况:①大于或等于零的数:说明SQL语句执行成功,为影响数据库中行数的更新计数;②-2:说明SQL语句执行成功,但未得到受影响的行数③-3:说明SQL语句执行失败,仅当执行失败后继续执行后面的SQL语句时出现。如果驱动程序不支持批量、或者未能成功执行Batch中的SQL语句之一,将抛出异常
close()立即释放Statement实例占用的数据库和JDBC资源

PreparedStatement接口的常用方法

方 法 名 称功 能 描 述
executeQuery()执行前面包含参数的动态SELECT语句,并返回一个永远不能为null的ResultSet实例
executeUpdate()执行前面包含参数的动态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
setInt(int i, int x)为指定参数设置int型值,对应参数的SQL类型为INTEGER
setLong(int i, long x)为指定参数设置long型值,对应参数的SQL类型为BIGINT
setFloat(int i, float x)为指定参数设置float型值,对应参数的SQL类型为FLOAT
setDouble(int i, double x)为指定参数设置double型值,对应参数的SQL类型为DOUBLE
setString(int i, String x)为指定参数设置String型值,对应参数的SQL类型为VARCHAR或LONGVARCHAR
setBoolean(int i, boolean x)为指定参数设置boolean型值,对应参数的SQL类型为BIT
setDate(int i, Date x)为指定参数设置java.sql.Date型值,对应参数的SQL类型为DATE
setObject(int i, Object x)用来设置各种类型的参数,JDBC规范定义了从Object类型到SQL类型的标准映射关系,在向数据库发送时将被转换为相应的SQL类型
setNull(int i, int sqlType)将指定参数设置为SQL中的NULL。该方法的第二个入口参数用来设置参数的SQL类型,并且必须设置,具体值从java.sql.Types类中定义的静态常量中选择
clearParameters()清除当前所有参数的值

ResultSet 接口提供的常用方法

方法功能描述
getInt()以int形式获取此ResultSet对象的当前行中指定列值。如果列值为NULL,则返回值是0
getFloat()以float形式获取此ResultSet对象的当前行的指定列值。如列值是NULL,则返回值是0
getDate()以Data形式获取ResultSet对象的当前行的指定列值。如列值是NULL,则返回值是null
getBoolean()以boolean形式获取ResultSet对象的当前行的指定列值。如列值是NULL,则返回null
getString()以String形式获取ResultSet对象的当前行的指定列值。如列值是NULL,则返回null
getObject()以Object形式获取ResultSet对象的当前行的指定列值。如列值是NULL,则返回null
first()将指针移到当前记录的第一行
last()将指针移到当前记录的最后一行
next()将指针向下移一行
beforeFirst()将指针移到集合的开头(第一行位置)
afterLast()将指针移到集合的尾部(最后一行位置)
absolute(int index)将指针移到ResultSet给定编号的行
isFrist()判断指针是否位于当前ResultSet集合的第一行。如果是返回true,否则返回false
isLast()判断指针是否位于当前ResultSet集合的最后一行。如果是返回true,否则返回false
updateInt()用int值更新指定列
updateFloat()用float值更新指定列
updateLong()用指定的long值更新指定列
updateString()用指定的String值更新指定列
updateObject()用Object值更新指定列
updateNull()将指定的列值修改为NULL
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值