1.JDBC简介html
JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操做,开发人员无须接触底层数据库驱动程序的差别性,数据库自己是个独立运行的应用程序,你撰写的应用程序是利用通讯协议对数据库进行指令交换,以进行数据的增删查找。一般你的应用程序会利用一组专门与数据库进行通讯协议的连接库,以简化与数据库沟通时的程序撰写。有时候,更换数据库的需求并非没有,应用程序跨平台也是常常的需求,JDBC基本上就是用来解决这些问题的。JDBC是Java联机数据库的标准规范。具体而言,它定义了一组标准类与接口,应用程序须要联机数据库时调用这组标准API,而标准API中的接口由数据库厂商操做,一般称为JDBC驱动程序。JDBC标准主要分为两个部分:JDBC应用程序开发者接口以及JDBC驱动程序开发者接口。java
2.链接数据库git
为了要链接数据库系统,必需要有厂商操做的JDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档。正则表达式
3.使用Statement、ResultSetsql
Connection
是数据库链接的表明对象,接下来要执行SQL的话,必须取得java.sql.Statement
操做对象,它是SQL描述的表明对象。Statement
的execute()
能够用来执行SQL,并能够测试SQL是执行查询或更新,返回true
表示SQL执行将返回ResultSet
做为查询结果。视需求而定,Statement
或者ResultSet
在不使用时,可使用close()
将之关闭,以释放相关资源。Statement
关闭时,所关联的ResultSet
也会自动关闭。数据库
4.使用PreparedStatement
、CallableStatement
数组
若是有些操做只是SQL语句当中某些参数会有所不一样,其他的SQL子句皆相同,则可使用java.sql.PreparedStatement
。可使用Connection
的PreparedStatement()
方法创建好预先编译的SQL语句,当中参数会变更的部分,先指定“?”这个占位字符。在JDBC里要表示日期,是使用java.sql.Date
,其日期格式是“年、月、日”,要表示时间的话则是使用java.sql.Time
,其时间格式为“时、分、秒”,若是要表示“时、分、秒、微秒”的格式,你可使用java.sql.Timestamp
。网络
2、JDBC进阶架构
1.使用ResultSet
卷动、更新数据ide
在ResultSet
时,默承认以使用next()
移动数据光标至下一笔数据,然后使用getXXX()
方法来取得数据。结果集类型能够指定3种设定:ResultSet.TYPEFORWARDONLY
(默认)、ResultSet.TYPESCROLLINSENSITIVE
、ResultSet.TYPESCROLLSENSITIVE
。更新设定能够有两种指定:ResultSet.CONCURREADONLY
(默认)、ResultSet.CONCUR_UPDATABLE
。若是要使用ResultSet进行数据修改,则有些条件限制:必须选取单一表格、必须选取主键、必须选取全部NOT NULL的值。
2.批次更新
每一次执行executeUpdate
(),其实都会向数据库发送一次SQL,若是大量更新的SQL有一万笔,就等于经过网络进行了一万次的信息传送,网络传送信息实际上必须打开I/O、进行路由等动做。因此最好就是全部收集的SQL,最后会串为一句SQL,而后传送给数据库,既然是批次更新,顾名思义,就是仅用在更新上,因此批次更新的限制是,SQL不能是SELECT,不然会抛出异常。
3.Blob与Clob
若是要将文档写入数据库,能够在数据库表格字段上使用BLOB或CLOB数据类型,BLOB用于存储大量二进制数据,像是图档、影音档等,CLOB用于存储大量的文字数据。
4.交易简介
交易的四个基本要求是原子性、一致性、隔离行为与持续性。当多个交易并行时,可能引起的数据不一致问题有哪些呢?(1)更新遗失:基本上就是指某个交易对字段进行更新的信息,因另外一个交易的介入而遗失更新效力。(2)脏读:两个交易同时进行时,其中一个交易更新数据但未确认,另外一个交易就读取数据,就有可能发生脏读问题。(3)没法重复的读取:某个交易两次读取同一字段的数据并不一致。(4)幻读:同一交易期间,读取到的数据笔数不一致。
5.metadata简介
Metadata即“诠读数据的数据”,数据库是用来存储数据的地方,然而数据库自己产品名称为什么?数据库中有几个数据表格?表格名称为什么?表格中有几个字段等?这些都是metadata
。
6.RowSet简介
JDBC定义了java.sql.RowSet
接口,用以表明数据的列集合,这里的数据并不必定是数据库中的数据,能够是电子表格数据、XML数据或任何具备列集合概念的数据源。RowSet
定义了列集合基本行为,其下有JdbcRowSet
、CachedRowSet
、FilteredRowSet
、JoinRowSet
,WebRowSet
五个标准列集合子接口。JdbcRowSet
是联机式的RowSet
,也就是操做JdbcRowSet
期间,会保持与数据库的联机,可视为取得、操做ResultSet
的行为封装,可简化JDBC程序的撰写,或做为JavaBean
使用。CachedRowSet
为脱机式的RowSet
,在查询并填充完数据后,就会断开与数据源的联机,而不用占据相关联机资源,必要时也能够再与数据源联机进行数据同步。
P509的代码
Connection使用尝试自动关闭资源语法,因此执行完try区块后,Connection的close()就会被调用。
A . 不匹配
B . 'Hello'
C . "World"
D . 'Hello',"World"
解释:反向引用 \1 表明第一个()中的匹配内容
2.正则表达式 zo* 匹配(ABCD)
:
A . z
B . zo
C . zoo
D . zooooooooooooooooooooooooo
解析:* 能够是0次
3.Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如咱们有一个名为names的String对象数组,下面哪一个for循环不能遍历数组中的每个元素?)
:(C)
A .
for(int i = 0; i < names.length; i++)
B .
for(String name : names)
C .
for(int i = 0; i < names.length(); i++)
D .
none of these will correctly process each element(以上都不能遍历)
E .
all of these will correctly process each element(以上都能遍历)
解析:因为语法错误,选择c不能正确处理每一个元素。长度变量不是方法,所以在它以后没有圆括号。选择b是使用foreach循环处理数组的示例,而且选择a是循环的正确。
4.正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是(D)
A .
"rat".matcher("r.t")
B .
"r.t".matcher("rat")
C .
Pattern.compile("rat").matcher("r.t")
D .
Pattern.compile("r.t").matcher("rat")
5.Which of the statements is true about the following code snippet?(对于下面的代码段,说法正确的是?)(D)
int[] array = new int[25]; array[25] = 2;
A .
The integer value 2 will be assigned to the last index in the array.(整数2会赋给数组中最后一个元素)
B .
The integer value 25 will be assigned to the second index in the array.(整数25会赋给数组中的第2个索引)
C .
The integer value 25 will be assigned to the third value in the array. (整数25会赋给数组中的第3个元素)
D .
This code will result in a compile-time error.(代码会产生编译时错误)
E .
This code will result in a run-time error. (代码会产生运行时错误)
解析:此代码将抛出一个对象的大小时抛出,由于这个数组中最后一个指数是24。这会致使运行时错误。
注册Driver的操做对象
操做Driver
接口的对象是JDBC进行数据库存取的起点。Connection
接口的操做对象是数据库联机表明对象,要取得Connection操做对象,能够经过DriverManager的getConnection()
:Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
除了基本的用户名称、密码以外,还必须提供JDBC URL
,其定义了链接数据库时的协议、自协议、数据源识别。
主机名能够市本机或其余联机主机名、地址,MySQL
端口默认为3306。
取得Connection
对象以后,可使用isClosed()
方法测试与数据库的连接是否关闭。
在操做完数据库以后,若肯定再也不须要链接,则必须使用close()
来关闭与数据库的链接,以释放链接时相关的必要资源,像是联机相关对象、受权资源等。
我知道第16章、第17章和第18章跟以前同样,仍是介绍一些类的应用,因而我采起和以前同样的办法,一边看书,一边总结,看书上总共介绍了多少种API,每一种API的架构是什么,每一种API的做用与注意事项是什么。就这样有系统的去学习,感受效率十分高!并且头脑思绪清晰。娄老师课上强调了数据库这一章节内容的重要性,由于这部分知识与咱们大三要学习的内容息息相关,因而我刻意的在16章花更多的时间,更仔细的敲代码,发现问题。其实这些知识不是难,咱们只是感到陌生而已。同窗们有了畏难情绪和厌学情绪,固然就学不进去了,还谈什么效率!这三章的知识不像以前的对象、封装、继承、多态那些概念那么抽象难懂,都是活生生的具体的例子,接受起来其实也挺快的。娄老师说的很对,重要的不是要你学多少java知识,而是经过不断的学习过程,来总结出一套适合本身的良好的学习方法,这将受用一辈子。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 10/10 | |
第二周 | 100/100 | 2/2 | 19/25 | |
第三周 | 200/278 | 1/3 | 10/26 | |
第四周 | 660/938 | 1/4 | 10/36 | |
第五周 | 1100/2100 | 1/5 | 18/54 | |
第六周 | 740/2840 | 1/6 | 23/77 | |
第七周 | 352/3192 | 2/8 | 20/97 | |
第八周 | 631/3805 | 1/9 | 20/117 | |
第九周 | 2/11 | 20/137 |
计划学习时间:30小时
实际学习时间:20小时
改进状况:这周又作了实验,感受本身对IDEA的理解比之前深刻了,好比一些小插件像junit这些能够辅助咱们实现更高水平的代码。
无0.0