Java数据库编程

1、JDBC概述

(1)JDBC简介
JDBC:Java数据库连接,提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便地实现多种关系型数据库的统一操作,它由一组用Java羽凡编写的类和接口组成。

(2)JDBC驱动分类
针对每一个数据库厂商会提供一个JDBC的驱动程序。
常见的JDBC驱动程序可以分为以下4类:
①JDBC-ODBC 驱动
JDBC-ODBC是SUN提供的一个标准的JDBC操作,直接利用微软的ODBC进行数据库的连接操作,但是这种操作性能较低,故不推荐使用。
②JDBC本地驱动
直接使用各个数据库生产商提供的JDBC驱动程序,但是因为其只能应用在特定的数据库上,会丧失掉程序的可移植性,但是这样操作的性能较高。
开发中使用此种模式最多。
③JDBC网络驱动
这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。
④本地协议纯JDBC驱动
这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从库户籍机器上直接调用DBMS服务器,是Internet访问的一个很实用的解决方法。

(3)JDBC的主要操作类及接口
这里写图片描述
这里写图片描述

2、MySQL数据库

MySQL是一个小型关系型数据库管理系统。
常用命令:
连接mysql数据库:mysql -u 用户名 -p 密码
创建数据库:CREATE DATABASE 数据库名称;
删除数据库:DROP DATABASE 数据库名称;
使用数据库:USE 数据库名称;
创建数据库表:CREATE TABLE 表名称{
字段名称1 字段类型 [DEFAULT 默认值][约束],
字段名称2 字段类型 [DEFAULT 默认值][约束],
字段名称3 字段类型 [DEFAULT 默认值][约束],

}
删除数据库表:DROP TABLE 表名称;
查看表结构:DESC 表名称;
查看全部数据库:SHOW DATABASES;
查看一个数据库的全部表:SHOW TABLES;

3、SQL语法基础

SQL(结构查询语言)是一个功能强大的数据库语言。SQL通常用于与数据库的通讯。SQL是关系数据库管理系统的标准语言。
SQL可以分为:
①DML(数据操作语言):用于检索或修改数据;
②DDL(数据定义语言):用于定义数据的结构,如创建、修改或者删除数据库对象;
③DCL(数据控制语言):用于定义数据库用户的权限。

这里写图片描述
这里写图片描述
增加数据:INSERT INTO 表名称[(字段1,字段2,字段3,…,字段n)] VALUES (值1,值2,值3,…,值n);
删除数据:DELETE FORM 表名称 [删除条件];
更新数据:UPDATE 表名称 SET 字段1=值1,…,字段n=值1 [WHERE 更新条件]
查询数据:SELECT {*|column alias} FORM 表名称 别名 [WHERE condition(s)];

4、JDBC操作步骤

①加载数据库驱动程序;
②连接数据库;
③使用语句进行数据库操作;
④关闭数据库连接。
这里写图片描述

5、连接数据库

(1)配置MySQL数据库的驱动程序
(2)加载驱动程序
(3)连接及关闭数据库
数据库驱动程序可以正常加载的话,可以使用DriverManager类进行连接操作。
其常用方法:
这里写图片描述
在连接的时候需要一个连接地址,这些连接地址将由各个数据库生产商提供的。
在DrvierManager中,提供的主要操作是得到一个数据库的连接,getConnection()
方法就是取得连接对象,此方法返回的类型是Connection,不管使用哪种方式连接,都必须提供一个数据库的连接地址,如果在连接数据库的时候需要用户名和密码,则还需要将用户名和密码设置上。
MySQL数据库的连接地址格式:jdbc:mqsql://IP地址:端口号/数据库名称

Connection接口的常用方法:

通过DriverManager取得Connection对象之后,实际上就表示数据库连接上了,连接上数据库之后就可以进行数据库的更新及查询操作,但是操作的最后数据库连接必须关闭。

6、执行数据库的更新操作

数据库可以连接之后,就可以进行数据库的具体操作了,如果要想对数据库进行操作,则肯定要使用Statement接口完成,此接口可以使用Connection接口中提供的createStatement()方法实例化。
常用方法如下:
这里写图片描述

7、ResultSet接口(接收查询结果)

使用SQL中的SELECT语句将数据库的全部结果查询出来,在JDBC的操作中数据库的所有查询记录将使用 ResuleSet进行接收,并使用ResultSet显示内容。
这里写图片描述
注:虽然结果保存在了ResultSet对象中,实际上就是保存在了内存中。所以开发中药限制查询数量。

数据库的更新操作可以使用Statement()接口定义的executeUpdate()方法。
数据库的查询操作可以使用Statement()接口定义的executeQuery()方法,此方法的返回值类型就是一个ResultSet的对象,此对象中存放了所有的查询结果。
通过ResultSet接口依次取出其中的对象。
ResultSet中的所有数据都可以通过getString()方法取得。

8、PreparedStatement接口

PreparedStatement是Statement的子接口,属于预处理操作,与直接使用Statement不同的是,PreparedStatement在操作时,是先在数据表之中准备好了一条SQL语句,但是此SQL语句的具体内容暂时不设置,而之后再进行设置,以插入数据为例,使用PreparedStatement插入数据时,数据表中的指针首先指向最好一条数据之后,但是里面的内容是不知道的,而是等待用户分别设置。
PreparedStatement对象已编译过,所以其执行速度要高于Statement对象。因此,对于需要多次执行SQL语句经常使用PreparedStatement对象操作,以提高效率。

PreparedStatement的基本操作方法
这里写图片描述

注:正常情况下都使用java.util.Date表示日起,但是在PreparedStatement中如果要想使用日起必须使用java.sql.Date类型。

注意:设置日期格式的问题
在PreparedStatement中定义了setDate()方法,此方法可以设置日期内容,但是此方法使用时,后面的Date类型变量是java.sql.Date,而不是java.util.Date,所以如果要想将一个java,util.Date类型的内容变为java.sql.Date类型的内容应用使用如下的语句形式:

String birthdat=2007-12-21”;
java,util.Date temp=null;
temp=new SimpleDateFormat(“yyyy-MM-dd”).parse(birthday);
java.sql.Date bir=new java.sql.Date(temp.getTime());

在开发中很少使用Statement对象进行操作,因为Statement执行的是一个完整的SQL语句,这样在程序中往往要使用拼凑的SQL语句完成,而且如果此时由用户自己输入数据,往往会出现输入非法字符而造成程序出错,也可能引起系统的安全漏洞。
所以开发中不建议使用Statement完成,而都是使用PreparedStatement完成操作。

9、处理大数据对象

大数据处理主要指的是CLOB和BLOB两种类型的字段。在CLOB中可以存储海量文字;在BLOB中可以存储二进制数据。
如果程序中想处理这样的大数据操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本字段中保存和读取。
这里写图片描述

PreparedStatement有如下方法专门用来写入大对象数据。
这里写图片描述

大对象设置到数据库中后,在查询时就需要使用Result将其读取进来,在Result中提供如下方法来读取大对象数据。
这里写图片描述

(1)处理CLOB数据
CLOB表示大文本数据,在MySQL中提供了LONGTEXT表示大文本数据,此字段的最大保存数据量为4GB。

大文本数据内容可以通过ResultSet读取进来;也可以使用ResultSet中提供的getClob()方法,将全部的内容变为Clob对象的内容,直接使用Clob可以方便的取得大文本数据,也可以对这些数据进行一些简单的操作,如截取指定长度的文本等。

(2)处理BLOB数据
BLOB专门用于存放二进制数据,如图片、电影等。
在MySQL中使用LONGBLOB声明,最高可以保存4GB大小的内容。

虽然在JDBC中提供了大对象的操作支持,但是如果内容太大(如电影),则不建议使用以上方式进行保存,可以通过做映射路径的方式保存具体的信息,即在数据库中使用一个VARCHAR的普通字段保存一个文件的文件名称,且文件直接保存在硬盘上。

10、CallableStatement接口(调用存储过程) 很少使用

CallableStatement主要是调用数据库中的存储过程,CallableStatement接口也是Statement的子接口,在使用CallableStatement时可以接收过程的返回值,此接口的常用方法如下:
这里写图片描述

在JDBC中,如果要想设置过程的返回值类型,可以使用Types完成, 在Types中定义了很多的常量,如果现在返回值类型为Int,则使用Types.INTEGER。

11、JDBC2.0操作

在JDBC2.0中,加强了结果集ResultSet的功能,可以直接使用ResultSet执行更新的操作或者实现双向滚动。
(1)可滚动的结果集
如果要想创建可滚动的结果集,则在创建PrepareStatement(Statement)的时候必须指定了创建的类型。
可滚动的结果集操作本身并不难理解,只是在创建数据库操作对象时加入若干参数即可。

Conn=DriverManager.getConnection(DBURL,DBUSR,DBPASS);
Pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=pstmt.executeQuery();

注:其中的两个常量第一个表示结果集可滚动,第二个表示以只读的形式打开结果集。
(2)使用结果集插入数据
(3)使用结果集更新数据
(4)使用结果集删除数据

(5)批处理
使用批处理可以直接一次完成多个语句的执行。
要完成批处理操作,则要使用addBatch()加入要执行的一条SQL命令以及executeBatch()执行全部命令两个方法完成。

12、事务处理

事务就是保证操作的一致性,所有的操作要么全部成功,要么全部失败。
事务本身具有原子性、一致性、隔离性或独立性、持久性4个特征。

MySQL中提供了如下几个命令,可以进行事务的处理。
这里写图片描述

以上所有操作都是针对于一个session的,在数据库操作中把每一个连接到此数据库上的用户都称为一个session。
在MySQL中,如果要应用事务处理,则必须按照以下的步骤完成:
①取消掉自动提交,执行:SET AUTOCOMMIT=0。这样所有的更新指令并不会立刻发送到数据表中,而之存在于当前的session。
②开启事务,执行:START TRANSACTION或BEGIN。
③编写数据库更新语句,如增加、删除、修改,可以在编写的更新语句之间记录事务的保存点,使用SAVEPOINT指令。
④提交事务,如果确信数据库的修改没有任何的错误,则使用COMMIT提交事务。在提交之前对数据库所做的全部操作都保存在session中。
⑤事务回滚,如果发现执行的SQL语句有错误,则使用ROLLBACK命令全部撤销,或者使用ROLLBACK TO SAVEPOINT记录点,让其回滚到指定的位置。
当一个事务进行时,其他的session是无法看到此事务的操作状态的。即此session对数据库所做的一切修改,如果没有提交事务,则其他session是无法看到此session操作结果的。

JDBC操作事务的步骤:
①取消掉自动提交;
②执行多条SQL语句;
③如果没有异常,则提交事务;
④否则则进行事务的回滚操作。

保存点操作一般来说并不常用。

13、使用元数据分析数据库

(1)DatabaseMetaData
DatabaseMetaData可以得到数据库的一些基本信息,包括数据库的名称、版本,以及得到表的信息。
这里写图片描述

(2)ResultSetMetaData
使用ResultSetMetaData可获取关于ResultSet对象中列的类型和属性信息的对象,ResultSetMetaData存储了ResultSet的MetaData。可以通过以下的方法取得一些ResultSet的信息。
这里写图片描述

注:以上的两个操作在一般的数据的开发底层上比较常用,实际上也就是类似于反射的操作机制,取得一些基本的信息,在正常的开发中基本是不会使用的。

14、使用JDBC连接Oracle数据库

JDBC操作Oracle和MySQL本身没有太大的区别,所以JDBC提供的是一个标准的操作,但是各个数据库本身是有差异的,例如:MySQL中自动增长使用的AUTO_INCREMENT不需要用户调用,而在Oracle中就必须使用手工调用SEQUENCE的形式完成。

如果数据量比较少,可以选择MySQL;而数据量比较大的话,建议使用Oracle。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值