20145218 《Java程序设计》第9周学习总结

教材学习内容总结

16.1.1 JDBC简介

  • JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范。具体而言,它定义一组标准类与接口,应用程序需要联机数据库时调用这组标准API。

  • JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口。

  • 举例:应用程序使用JDBC联机数据库:

      Connection conn = DriverManager.getConnection(...);
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuesry(...);
  • JDBC希望达到的目的,是让Java程序这几人员在撰写数据库操作程序时,可以有个统一的接口,无需依赖特定数据库API,希望达到“写一个Java程序,操作所有数据库”的目的。

16.1.2 连接数据库

  • 要连接数据库系统,必须要有厂商操作的JDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档。

  • 基本数据库操作相关的JDBC接口或类是位于java.sql包中。要取得数据库联机,必须要有几个动作:注册Diver操作对象、取得Connection操作对象、关闭Connection操作对象。

  • 操作Driver接口的对象是JDBC进行数据库存取的起点。

  • Connection接口的操作对象是数据库联机代表对象,要取得Connection操作对象,可以通过DriverManager的getConnection():

      Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
  • 在操作完数据库之后,若确定不再需要连接,则必须使用close()来关闭与数据库的连接,以释放连接时相关的必要资源,像是联机相关对象、授权资源等。

16.1.3 使用Statement、ResultSet

  • 使用Connection的createStatement()建立Statement对象:Statement stmt = conn.creatStatement();
  • Statement的execute()用来执行SQL,并可以测试SQL是执行查询或更新,返回true表示SQL执行将返回ResultSet作为查询结果。
  • Statement或ResultSet在不使用时,可以使用close()将之关闭,以释放相关资源。Statement关闭时,所关联的ResultSet也会自动关闭。
  • 接下来以一个简单地留言板作为示范,运行结果如下:

16.1.4 使用PreparedStatement、CallableStatement

  • 可以使用Connection的prepareStatement()方法建立好预先编译的SQL语句,当中参数会变动的部分,先指定“?”这个占位字符。

      PrepareStatement stmt = conn.prepareStatement("INSERT INTO t_message VALUES(?, ?, ?, ?)");
  • 等到需要真正指定参数执行时,再使用相对应的setInt()setString()等方法,指定“?”处真正应该有的参数。

      stmt.setInt(1,2);
    stmt.setString(2,"momor");
    stmt.executeUpdate();

16.2.1 使用DataSource取得联机

  • 当MessageDAO的用户无法告知DriverManager有关JDBC URL、用户名称、密码等信息时,可以让MessageDAO依赖于javax.sql.DataSource接口,通过其定义的getConnection()方法取得Connection。
  • 要取得数据库联机,必须打开网络联机,连接至数据库服务器后,进行协议交换以进行验证名称、密码等确认动作。

16.2.2 使用ResultSet卷动、更新数据

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

  • ResultSet可以使用previous()first()last()等方法前后移动数据光标,还可以调用updatexxx()updateRow()等方法进行数据修改。

  • 结果集类型3种设定:

  •   ResultSet.TYPE_FORWARD_ONLY(默认)(只能前进数据光标)
    ResultSet.TYPE_SCROLL_INSENSITIVE(前后移动数据光标)
    ResultSet.TYPE_SCROLL_SENSITIVE(前后移动数据光标,反映数据库中的数据修改)
  • 更新设定的2种设定:

      ResultSet.CONCUR_READ_ONLY(默认)(进行数据读取)
    ResultSet.CONCUR_UPDATABLE(进行数据读取、更新)
  • 数据光标移动的API:

    绝对位置移动:absolute()、afterLast()、beforeFirst()、first()、last()。

    相对位置移动:relative()、previous()、next()。

    判断目前位置:isAfterLast()、isBeforeFirst()、isFirst()、isLast()。

  • 数据修改的条件限制:必须选取单一表格;必须选取主键。;必须选取所有的NOT FULL的值。

  • 数据更新:调用updatexxx()方法,然后调用updateRow()方法。取消更新:调用cancelRowUpdates()

  • 新增数据:先调用moveToInsertRow(),之后调用updatexxx()设定要新增的数据各个字段,然后调用insertRow()新增数据。

  • 删除数据列:调用deleteRow()

16.2.3 批次更新

  • 每次执行excuteUpdate(),都会向数据库发送一次SQL。批次更新时可以使用addBatch()方法来收集SQL,并使用executeBatch()方法将所收集的SQL传送出去。
  • 所有收集的SQL,最后串为一句SQL,然后传送给数据库。
  • 批次更新的限制是。SQL不能是SELECT,否则会抛出异常。

16.2.4 Blob与Clob

  • 要将文档写入数据库,可以在数据库表格字段上使用BLOB或CLOB数据类型。
  • BLOB用于存储大量的二进制数据,像是图档、影音档等。CLOB用于存储大量的文字数据。
  • java.sql.Blobjava.sql.Clob两个类分别代表BLOB与CLOB数据。

16.2.5 交易简介

  • 交易的四个基本要求ACID:原子性、一致性、隔离行为、持续性。
  • 更新遗失:某个交易对字段进行更新的消息,因另一个交易的介入而遗失更新效力。如果要避免此类问题,可以设定隔离层级为“可读取未确认”,可以通过Connection的setTransactionIsolation()设定为TRANSACTION_UNCOMMITTED来提示数据库确定此隔离行为。
  • 脏读:读取到不干净、不正确的数据。如果要避免此类问题,可以设定隔离层级为“可读取确认”,可以通过Connection的setTransactionIsolation()设定为TRANSACTION_COMMITTED来提示数据库确定此隔离行为。
  • 无法重复的读取:某个交易两次读取同一字段的数据并不一致。如果要避免此类问题,可以设定隔离层级为“可重复读取”,可以通过Connection的setTransactionIsolation()设定为TRANSACTION_REPEATABLE_READ来提示数据库确定此隔离行为。
  • 幻读:同一交易期间读取到的数据笔数不一致。如果要避免此类问题,可以设定隔离层级为“可循序”,可以通过Connection的setTransactionIsolation()设定为TRANSACTION_SERIALIZABLE来提示数据库确定此隔离行为。

16.2.6 metadata简介

  • Metadata即诠读数据的数据。
  • 可以通过Connection的getMetaD()方法取得DatabaseMetadata对象,通过这个对象提供的各种方法可以取得数据库整体信息,而ResultSet表示查询到的数据,而数据本身的字段、类型等信息,可以通过ResulSet的getMetaData对象,通过这个对象提供的相关方法就可以取得域名、字段类型等信息。

16.2.7 RowSet简介

  • javax.sql.RowSet接口用以代表数据的类集合,数据可以是电子表格数据、XML数据或任何具有列集合概念的数据源。可以使用RowSet对列集合进行增删查改。
  • JdcRowSet是联机式的RowSet,在操作期间会保持与数据库的联机,可视为取得、操作的行为封装。
  • CachedRowSet为脱机式的RowSet,在查询并填充完数据后就会断开与数据源的联机。

代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 200/400 1/3 20/40
第三周 500/900 1/4 30/70
第四周 1292/2192 1/5 30/100
第五周 993/3185 1/6 40/140
第六周 1082/4267 2/8 50/190
第七周 656/4923 2/10 30/220
第八周 205/5128 2/12 30/220
第九周 972/6100 2/14 30/250

代码调试中的问题和解决过程

在运行课本第509页ConnectionDemo.java和第513页的MessageDAODemo.java时,会出现以下情况,是因为没有导入MySQL的驱动包,详情见课本第508页。

但之后仍无法正确运行程序,不知如何解决。

参考资料

20145218 《Java程序设计》第9周学习总结的更多相关文章

  1. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  2. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  3. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  4. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  5. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  6. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  7. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  8. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. javascript实现非递归--归并排序

    另一道面试题是实现归并排序,当然,本人很不喜欢递归法,因为递归一般都是没有迭代法好.所以首选都是用迭代法,但是迭代法确实是难做啊,至底而上的思想不好把握. 这是我的实现代码 /* * * 非递归版归并 ...

  2. VM安装失败

    出现:VMware安装失败 “Failed to create the requested registry key Key:installer Error:1021" 解决: 开始--运行 ...

  3. 一、spring——helloWorld

    1.添加jar包,如下图所示: 2.建立spring项目,如下图所示: 3.验证,如下图所示:

  4. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?

    正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?     表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义.我们详细叙述: 1)对于表达式对象的e ...

  5. Create Hierarchical Tree To Control Records In Oracle Forms

    Download Source Code Providing an example form for creating hierarchical trees in Oracle Forms to co ...

  6. Mybatis+SpringMVC+Spring整合

    1,先添加spring支持: applicationContext.xml  配在WEBINF下,四个命名空间:aop,context,tx,p 配Listener:ContextLoaderList ...

  7. nancy的诊断2

    接上文. 一 再看看第二个面板内容 点击带文号 的  Interactive Diagnostics 这个面板 如下 上面的是诊断程序,默认是系统提供的测试用的诊断程序.  你可以 通过实现IDiag ...

  8. Python跳过第一行读取文件内容

    Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: inpu ...

  9. idea编辑器HttpServlet httpServlet = ServletActionContext.getServletContext().getRealPath();方法无法使用

    HttpServlet httpServlet = ServletActionContext.getServletContext().getRealPath(); 前几天在使用idea的时候发现这个方 ...

  10. iOS - Swift Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...