您的位置:首页 > 编程语言 > Java开发

20145312 《Java程序设计》第九周学习总结

2016-05-01 22:25 387 查看

20145312 《Java程序设计》第九周学习总结

学习笔记

Chapter 16整合数据库

16.1 JDBC入门

16.1.1 JDBC简介

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。

JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成。

组成JDBC的2个包:

java.sql
javax.sql


开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

16.1.2 连接数据库

注册Driver操作对象

(1)JDBC程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:

DriverManager.registerDriver(new Driver()) DriverManager.getConnection(url, user, password)。

(2)在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:

1)查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。

2)程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。

(3)推荐方式:Class.forName("com.mysql.jdbc.Driver"):

采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。

取得Connection操作对象

(1)Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:

   createStatement():创建向数据库发送sql的statement对象。
   prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
   prepareCall(sql):创建执行存储过程的callableStatement对象。
   setAutoCommit(boolean autoCommit):设置事务是否自动提交。
   commit() :在链接上提交事务。
   rollback() :在此链接上回滚事务。

16.1.3 使用Statement、ResultSet

Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

获取任意类型的数据,例如:

getObject(int index) getObject(string columnName)


获取指定类型的数据,例如:

getString(int index)
getString(String columnName)


ResultSet还提供了对结果集进行滚动的方法:

   next():移动到下一行
   Previous():移动到前一行
   absolute(int row):移动到指定行
   beforeFirst():移动resultSet的最前面。
   afterLast() :移动到resultSet的最后面。


Statement在执行executeQuery()、executeUpdate()时,如果有些部分是动态的数据,必须用+连字符串接字符串以组成完整的SQL语句。

如果有些操作只是SQL语句当中某些参数不同,其余SQL子句皆相同,使用java.sql.PrepareStatement,使用Connection的preparedStatement()方法建立好预先编译好的SQL语句,用“?”代替参数中会变动的部分,需要真正指定参数执行时,再使用setInt()、setString()等方法指定“?”处应有的参数。

执行executeQuery()或executeUpdate()方法后,可以调用clearParameters()清除设置的参数,之后就能再次使用这个PreparedStatement实例。

java.sql.CallableStatement的API使用与PreparedStatement差别不大,除了必须调用prepareCall()建立CallableStatement异常之外,一样是使用setXXX()设定参数,查询操作使用executeQuery(),更新操作使用executeUpdate(),使用registerOutParameter()注册输出参数。

日期在JDBC中,并不是使用java.util.Date,这个对象可代表的日期格式是“年、月、日、时、分、秒、毫秒”,JDBC表示日期,用java.sql.Date,日期格式是“年、月、日”,表示时间使用java.sql.Time,时间格式为“时、分、秒”,java.sql.Timestamp格式“时、分、秒、微秒”。

16.2 JDBC进阶

16.2.1 使用DataSource取得联机

MessageDAO依赖于javax.sql.DataSource接口,可以通过其自定义的getConnection()方法取得Connection。

16.2.32使用ResultSet卷动、更新

ResultSet时可默认使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据。

使用Connection的createStatement()或prepareStatement()方法建立Statement或PreparedStatement实例时,可以指定结果集类型与并行方式。

使用absolute()、afterlast()、beforeFirst()、first()、last()进行绝对位置移动,使用relative()、previous()、next()进行相对位置移动,成功返回true,使用isAfterLast()、isBeforeFirst()、isFirst()、isLast()判断目前位置。

结果集类型可以指定3种设定:

ResultSet.TYPE_FORWARD_ONLY(默认)
ResultSet.TYPE_SCROLL_INSENSITIVE
ResultSet.TYPE_SCROLL_SENSITIVE


更新设定有两种指定:

ResultSet.CONCUR_READ_ONLY(默认)
ResultSet.CONCUR_UPDATABLE


16.2.3 批次更新

使用addBatch()方法来收集SQL,并使用executeBatch()方法将所收集的SQL传送出去.

SQL的执行顺序就是addBath()时的顺序.

16.2.4 Blob与Clob

文档写入数据库,可以在数据库表格字段上使用BLOB(Binary Large Object),用于存储大量的二进制数据或CLOB数据类型(Character Large Object),用于储存大量的文字数据.

JDBC中提供了java.sql.Blob与java.sql.Clob两个类分别代表BLOB与CLOB数据.

通过PreparedStatement的setBlob()来设定Blob对象,读取数据时,可以通过ResultSet的getBlob()取得Blob对象。

16.2.5 交易简介

JDBC可以操作可以操作Connection的setAutoCommit()方法,给它false自变量,提示数据库开始交易。

下达一连串的SQL语句后,自行调用Connection的commit(),提示数据库确认操作,中间发生错误,调用rollback(),提示数据库撤销所有的执行。

隔离行为的支持上,JDBC可以通过Connection的getTransactionIsolation()取得数据库目前的隔离行为设定,通过setTransactionIsolation()可提示数据库设定指定的隔离行为,可设定常数是定义在Connection上。

16.2.6 metadata简介

JDBC,通过Connection的getMetaData()方法取得DatabasemetaData对象,通过该对象提供的方法取得数据库整体信息,Result表示查询到的数据。

16.2.7 RowSet简介

RowSet定义了列列集合基本行为,其下有JdbcRowSet(联机式的)、CachedRowSet(脱机式的)、FilteredRowSet、JoinRowSet与WebRowSet五个标准列操作子接口,定义在javax.sql.rowset。

代码托管截图



学习进度条

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: