20145313张雪纯 《Java程序设计》第9周学习总结
2016-04-29 19:00
459 查看
20145313张雪纯 《Java程序设计》第9周学习总结
教材学习内容总结
JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层数据库驱动程序的差异性。厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型:
Type 1:JDBC-ODBC Bridge Driver
Type 2:Native API Driver
Type 3:Native Protocol Driver
数据库操作相关的JDBC接口或类都位于java.sql包中。要连接数据库,可以向DriverManager取得Connection对象。Connection是数据库连接的代表对象,一个Connection对象就代表一个数据库连接。SQLException是在处理JDBC时经常遇到的一个异常对象,为数据库操作过程发生错误时的代表对象。
取得联机等与数据库来源相关的行为规范在javax.sql.DateSource接口,实际如何取得Connection则由操作接口的对象来负责。
Connection是数据库连接的代表对象,接下来要执行SQL的话,必须取得java.sql.Statement对象,它是SQL语句的代表对象,可以使用Connection的createStatement()来创建Statement对象。
在使用Connection、Statement或ResultSet时,要将之关闭以释放相关资源。
Statement的executeQuery()方法则是用于SELECT等查询数据库的SQL,executeUpdate()会返回int结果,表示数据变动的笔数,executeQuery()会返回java.sql.ResultSet对象,代表查询的结果,查询的结果会是一笔一笔的数据。可以使用ResultSet的next()来移动至下一笔数据,它会返回 true 或 false表示是否有下一笔数据,接着可以使用getXXX()来取得数据。
如果有些操作只是SQL语句中某些参数会有所不同,其余的SQL子句皆相同,则可以使用java.sql.PreparedStatement。可以使用Connection的preparedStatement()方法创建好一个预编译(precompile)的SQL命令,其中参数会变动的部分,先指定“?”这个占位字符。等到需要真正指定参数执行时,再使用相对应的setInt()、setString()等方法,指定“?”处真正应该有的参数。
教材学习中的问题和解决过程
P511 MessageDAO.javapackage cc.openhome; import java.sql.*; import java.util.*; public class MessageDAO { private String url; private String user; private String passwd; public MessageDAO(String url, String user, String passwd) { this.url = url; this.user = user; this.passwd = passwd; } public void add(Message message) { try(Connection conn = DriverManager.getConnection(url, user, passwd); Statement statement = conn.createStatement()) { String sql = String.format( "INSERT INTO t_message(name, email, msg) VALUES ('%s', '%s', '%s')", message.getName(), message.getEmail(), message.getMsg()); statement.executeUpdate(sql); } catch(SQLException ex) { throw new RuntimeException(ex); } } public List<Message> get() { List<Message> messages = new ArrayList<>(); try(Connection conn = DriverManager.getConnection(url, user, passwd); Statement statement = conn.createStatement()) { ResultSet result = statement.executeQuery("SELECT * FROM t_message"); while (result.next()) { Message message = toMessage(result); messages.add(message); } } catch(SQLException ex) { throw new RuntimeException(ex); } return messages; } private Message toMessage(ResultSet result) throws SQLException { Message message = new Message(); message.setId(result.getLong(1)); message.setName(result.getString(2)); message.setEmail(result.getString(3)); message.setMsg(result.getString(4)); return message; } }
范例中对Connection与Statement使用了尝试自动关闭资源语法,如何确定哪些相关资源被关闭了?
代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 20/20 | 编写简单程序 |
第二周 | 350/550 | 1/2 | 30/30 | 用IDE调试修改程序 |
第三周 | 500/1050 | 1/3 | 35/85 | |
第四周 | 500/1550 | 1/4 | 30/115 | |
第五周 | 500/2050 | 1/5 | 30/145 | |
第六周 | 700/2750 | 2/7 | 30/175 | |
第七周 | 300/3050 | 2/9 | 20/195 | |
第八周 | 300/3350 | 2/11 | 20/215 | |
第八周 | 300/3650 | 2/13 | 20/235 |
参考资料
Java学习笔记(第8版)《Java学习笔记(第8版)》学习指导
相关文章推荐
- java排序之堆排序
- 图片裁剪缩略处理小工具类
- Java使用poi操作cexel
- Spring MVC工程结构及配置整理
- Java常见问题-高亮
- YAML 技术研究
- Java打印整数的二进制表示(代码与解析)
- Java ClassLoader 深入理解
- Ehcache缓存结合Spring AOP实现接口数据缓存
- java 单例模式
- Java中extends和implements的区别
- 20145236 《Java程序设计》实验四实验报告
- ASM技术研究
- Java学习-20天
- Java将科学计数法数据转为字符串
- Java将科学计数法数据转为字符串
- Java将科学计数法数据转为字符串
- JDK 源码解析 —— ArrayBlockingQueue
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
- 一键清理Eclipse版