zoukankan      html  css  js  c++  java
  • 20145313张雪纯 《Java程序设计》第9周学习总结

    20145313张雪纯 《Java程序设计》第9周学习总结

    教材学习内容总结

    • JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层数据库驱动程序的差异性。
    • 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型:
      1. Type 1:JDBC-ODBC Bridge Driver
      2. Type 2:Native API Driver
      3. 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.java

    package 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

    参考资料

  • 相关阅读:
    javascript中有关this的解析题
    变量声明
    js事件
    js用法
    dom对象
    数据的三大储存格式
    函数
    全局环境
    循环语句及案例
    条件语句
  • 原文地址:https://www.cnblogs.com/entropy/p/5447388.html
Copyright © 2011-2022 走看看