20175216 《Java程序设计》第九周学习总结
教材学习内容总结
第11章-JDBC与MySQL数据库
要点
MySQL数据库管理系统
连接MySQL数据库
查询操作(基础)
更新、添加、删除(基础)
预处理语句(重点)
通用查询(难点)
事务
笔记
1. 查询操作
基本操作:
与数据库取得连接(不同数据库仅在这一句中的链接和代码中的驱动forname不同):String uri = "jdbc:mysql://localhost:3306/<所键表格的名字>?useSSL=true";
向已连接的数据库发送SQL语句创建查询对象(置于代码中):
try{ Statement sql=con.createStatement();
}
catch(SQLException e ){}
处理SOL语句返回的结果(两种方式选一即可):getString(int columnIndex)
getString(String columnName)
友好关闭数据库:con.close()
三种查询方式:
顺序查询
控制游标
得到可滚动的结果集:Statement stmt = con.createStatement(int type ,int concurrency);
条件与排序查询where
子句:select
字段from
表名 where
条件
排序:用order by子语句对记录排序
2. 更新、添加、删除
更新:update
表 set
字段 = 新值where
添加:insert into
表(字段列表) values
(对应的具体的记录)或insert into
表 values
(对应的具体的记录)
删除:delete from
表名where
3. 使用预处理语句
使用通配符
常用预处理语句设置通配符?的值的方法:
void setData(int parameterIndex,Data x)
void setDouble(int parameterIndex,double x)
void setFloat(int parameterIndex,float x)
void setInt(int parameterIndex,int x)
void setLong(int parameterIndex,long x)
void setString(int parameterIndex,string x)
4. 通用查询
编写一个类,只要用户将数据库名,SQL语句传递给该类对象,那么这个对象就用一个二维数组返回查询的记录(eg. 运行结果是个表格),使用的是返回到程序中的结果集来获取相关信息
具体步骤:
结果集的元数据对象:ResultSetMetaData = rs.getMetaData();
调用getColumnCount()
方法返回结果集rs中的列的数目:int columnCount = metaData.getColumnCount()
想要返回第i列的数据就用:string columnCount = metaData.getColumnCount(i)
5. 事务
JDBC事务处理步骤
关闭自动提交模式方法:setAutoCommit(booean b)
处理事务方法:commit()
处理事务失败:rollback()
教材学习中的问题和解决过程
问题一:在学习P328中11.5 连接数据库时有些疑惑为什么用JDB连接数据库?
问题一解决方案:就像是接口一样,想要用这个接口,就要实现这个接口里的方法,jdbc也一样,它实现了某些特定功能的接口,也就是那些个能连接数据库的方法,所以,你必须用它。但也可以不用JDBC,也可以用hibernate,ibatis。
问题二:在查询上个问题的时候看到了hibernate,疑惑hibernate和jdbc连接数据库的区别?
问题二解决方案:
1、Hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库。
2、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合。
3、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。
Hibernate毕竟是基于JDBC的技术,高度的封装提高了开发效率,从运行效率上来说如果正确使用JDBC那一定是比HB高的。
- 代码量截图:
上周考试错题总结
上周考试无错题。
其他(感悟、思考等,可选)
虚拟机一定记得备份,否则虚拟机崩了之后就会丢失,非常麻烦。
在学习教材的时候,发现其实自己编一遍代码与对着书编代码还是有很大区别的,自己编一遍的话,会发现很多只对着书编所察觉不到的细节,而这些细节也正是我们全面认识这个代码的关键点所在
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 32/32 | 1/1 | 12/12 | |
第二周 | 302/334 | 1/2 | 10/22 | |
第三周 | 771/1105 | 1/3 | 15/37 | |
第四周 | 540/1645 | 1/4 | 14/51 | |
第五周 | 399/2044 | 1/5 | 13/64 | |
第六周 | 1112/3156 | 1/6 | 13/77 | |
第七周 | 653/3809 | 1/7 | 13/90 |
计划学习时间:15小时
实际学习时间:13小时
改进情况:
这周学习了第十一章知识,通过运行代码明白各代码的具体含义,体会到了娄老师上课一直提到的“做中学,学中做”。