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

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

学习笔记

Chapter 16整合数据库

16.1 JDBC入门

16.1.1 JDBC简介

  1. SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。
  2. JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成。
  3. 组成JDBC的2个包:
java.sql
javax.sql
  1. 开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

16.1.2 连接数据库

  1. 注册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"):
    采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
  2. 取得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

  1. Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
  2. ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
  3. 获取任意类型的数据,例如:
getObject(int index) getObject(string columnName)
  1. 获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
  1. ResultSet还提供了对结果集进行滚动的方法:
	next():移动到下一行
	Previous():移动到前一行
	absolute(int row):移动到指定行
	beforeFirst():移动resultSet的最前面。
	afterLast() :移动到resultSet的最后面。
  1. Statement在执行executeQuery()、executeUpdate()时,如果有些部分是动态的数据,必须用+连字符串接字符串以组成完整的SQL语句。
  2. 如果有些操作只是SQL语句当中某些参数不同,其余SQL子句皆相同,使用java.sql.PrepareStatement,使用Connection的preparedStatement()方法建立好预先编译好的SQL语句,用“?”代替参数中会变动的部分,需要真正指定参数执行时,再使用setInt()、setString()等方法指定“?”处应有的参数。
  3. 执行executeQuery()或executeUpdate()方法后,可以调用clearParameters()清除设置的参数,之后就能再次使用这个PreparedStatement实例。
  4. java.sql.CallableStatement的API使用与PreparedStatement差别不大,除了必须调用prepareCall()建立CallableStatement异常之外,一样是使用setXXX()设定参数,查询操作使用executeQuery(),更新操作使用executeUpdate(),使用registerOutParameter()注册输出参数。
  5. 日期在JDBC中,并不是使用java.util.Date,这个对象可代表的日期格式是“年、月、日、时、分、秒、毫秒”,JDBC表示日期,用java.sql.Date,日期格式是“年、月、日”,表示时间使用java.sql.Time,时间格式为“时、分、秒”,java.sql.Timestamp格式“时、分、秒、微秒”。

16.2 JDBC进阶

16.2.1 使用DataSource取得联机

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

16.2.32使用ResultSet卷动、更新

  1. ResultSet时可默认使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据。
  2. 使用Connection的createStatement()或prepareStatement()方法建立Statement或PreparedStatement实例时,可以指定结果集类型与并行方式。
  3. 使用absolute()、afterlast()、beforeFirst()、first()、last()进行绝对位置移动,使用relative()、previous()、next()进行相对位置移动,成功返回true,使用isAfterLast()、isBeforeFirst()、isFirst()、isLast()判断目前位置。
  4. 结果集类型可以指定3种设定:
ResultSet.TYPE_FORWARD_ONLY(默认)
ResultSet.TYPE_SCROLL_INSENSITIVE
ResultSet.TYPE_SCROLL_SENSITIVE
  1. 更新设定有两种指定:
ResultSet.CONCUR_READ_ONLY(默认)
ResultSet.CONCUR_UPDATABLE

16.2.3 批次更新

  1. 使用addBatch()方法来收集SQL,并使用executeBatch()方法将所收集的SQL传送出去.
  2. SQL的执行顺序就是addBath()时的顺序.
    16.2.4 Blob与Clob
  3. 文档写入数据库,可以在数据库表格字段上使用BLOB(Binary Large Object),用于存储大量的二进制数据或CLOB数据类型(Character Large Object),用于储存大量的文字数据.
  4. JDBC中提供了java.sql.Blob与java.sql.Clob两个类分别代表BLOB与CLOB数据.
  5. 通过PreparedStatement的setBlob()来设定Blob对象,读取数据时,可以通过ResultSet的getBlob()取得Blob对象。
    16.2.5 交易简介
  6. JDBC可以操作可以操作Connection的setAutoCommit()方法,给它false自变量,提示数据库开始交易。
  7. 下达一连串的SQL语句后,自行调用Connection的commit(),提示数据库确认操作,中间发生错误,调用rollback(),提示数据库撤销所有的执行。
  8. 隔离行为的支持上,JDBC可以通过Connection的getTransactionIsolation()取得数据库目前的隔离行为设定,通过setTransactionIsolation()可提示数据库设定指定的隔离行为,可设定常数是定义在Connection上。
    16.2.6 metadata简介
  9. JDBC,通过Connection的getMetaData()方法取得DatabasemetaData对象,通过该对象提供的方法取得数据库整体信息,Result表示查询到的数据。
    16.2.7 RowSet简介
  10. RowSet定义了列列集合基本行为,其下有JdbcRowSet(联机式的)、CachedRowSet(脱机式的)、FilteredRowSet、JoinRowSet与WebRowSet五个标准列操作子接口,定义在javax.sql.rowset。

代码托管截图

学习进度条

原文地址:https://www.cnblogs.com/yx20145312/p/5451346.html