Java JDBC

2 篇文章 0 订阅

Java JDBC

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。

这里写图片描述

JDBC API

JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。

这里写图片描述

Driver接口

•Java.sql.Driver 接口是所有JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现

•在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现

JDBC编程步骤:
  1. 加载驱动
  2. 获得数据库连接
  3. 创建Statement对象
  4. 对结果集进行处理
  5. 关闭相关的连接对象
加载与注册JDBC 驱动

•加载 JDBC 驱动需调用Class类的静态方法forName(),向其传递要加载的JDBC 驱动的类名

•DriverManager 类是驱动程序管理器类,负责管理驱动程序

•通常不用显式调用DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为Driver接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用DriverManager.registerDriver() 方法来注册自身的一个实例

建立连接

•可以调用DriverManager 类的 getConnection() 方法建立到数据库的连接

•JDBCURL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL 选择正确的驱动程序,从而建立到数据库的连接。

•JDBCURL的标准由三部分组成,各部分间用冒号分隔。

–jdbc:<子协议>:<子名称>

–协议:JDBCURL中的协议总是jdbc

–子协议:子协议用于标识一个数据库驱动程序

–子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息

示例:

//对于 Oracle 数据库连接,采用如下形式: 
jdbc:oracle:thin:@localhost:1521:sid
//对于 SQLServer 数据库连接,采用如下形式:
jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid
//对于 MYSQL 数据库连接,采用如下形式:   
jdbc:mysql://localhost:3306/sid
访问数据库
  • Statement
  • PrepareStatement
  • CallableStatement
Statement

•通过调用 Connection对象的 createStatement 方法创建该对象

•该对象用于执行静态的SQL 语句,并且返回执行结果

•Statement接口中定义了下列方法用于执行SQL 语句:

​ –ResultSet excuteQuery(Stringsql)

​ –int excuteUpdate(Stringsql)

ResultSet

•通过调用 Statement对象的excuteQuery()方法创建该对象

•ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现

•ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next()方法移动到下一行

•ResultSet 接口的常用方法:

Num方法描述
描述byte getByte(int columnIndex)返回指定字段的字节值
Date getDate(int columnIndex)返回指定字段的日期值
3Float getFloat(int columnIndex)返回指定字段的浮点值
4int getInt(int columnIndex)返回指定字段的整数值
5String getString(int columnIndex)返回指定字段的字符串值
6double getDouble(String columnName)返回指定字段的双精度值
7long getLong(String columnName)返回指定字段的long型整值
8boolean next()返回是否还有下一字段
PreparedStatement

•可以通过调用Connection对象的 preparedStatement() 方法获取 PreparedStatement 对象

•PreparedStatement 接口是 Statement的子接口,它表示一条预编译过的SQL 语句

•PreparedStatement 对象所代表的SQL 语句中的参数用问号(?)来表示,调用PreparedStatement 对象的 setXXX() 方法来设置这些参数. setXXX() 方法有两个参数,第一个参数是要设置的SQL 语句中的参数的索引(从 1 开始),第二个是设置的SQL 语句中的参数的值

PreparedStatement vs Statement

•代码的可读性和可维护性.

•PreparedStatement 能最大可能提高性能:

–DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。

–在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.

–(语法检查,语义检查,翻译成二进制命令,缓存)

•PreparedStatement 可以防止 SQL 注入

DatabaseMetaData类

•DatabaseMetaData
类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息:

–getURL():返回一个String类对象,代表数据库的URL。

–getUserName():返回连接当前数据库管理系统的用户名。

–isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

–getDatabaseProductName():返回数据库的产品名称。

–getDatabaseProductVersion():返回数据库的版本号。

–getDriverName():返回驱动驱动程序的名称。

–getDriverVersion():返回驱动程序的版本号。

ResultSetMetaData类

•可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:

–getColumnName(int column):获取指定列的名称

–getColumnCount():返回当前ResultSet 对象中的列数。

–getColumnTypeName(int column):检索指定列的数据库特定的类型名称。

–getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。

–isNullable(int column):指示指定列中的值是否可以为null。

–isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值