Java JDBC
来源:互联网 发布:剑灵灵剑士卡刀宏数据 编辑:程序博客网 时间:2024/05/17 23:39
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编程步骤:
- 加载驱动
- 获得数据库连接
- 创建Statement对象
- 对结果集进行处理
- 关闭相关的连接对象
加载与注册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 接口的常用方法:
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):指示是否自动为指定列进行编号,这样这些列仍然是只读的。
- JAVA JDBC
- java--jdbc
- Java JDBC
- java jdbc
- JAVA JDBC
- Java JDBC
- java JDBC
- Java Jdbc
- Java JDBC
- java jdbc
- java JDBC
- JAVA JDBC
- JAVA JDBC
- JAVA JDBC
- JAVA JDBC
- Java--JDBC
- JAVA JDBC
- java jdbc
- Unity Editor 基础篇(十一):MenuItem属性
- Qt学习笔记第1篇(Qt简介)
- 获取View的坐标和各种距离
- 样式和主题(Style and Theme)详解
- es6语法快速上手
- Java JDBC
- while...break 实例
- 博客tag
- ES6笔记
- iOS小demo之将图片压缩到指定尺寸
- win系统 重新启动Apache
- iOS版本更新
- Dagger2
- es6的十大特性