• 第九周java学习总结


    学号 20175206 《Java程序设计》第九周学习总结

    教材学习内容总结

    第十一章:JDBC数据库操作

    主要内容
    MySQL数据库管理系统
    连接MySQL数据库
    JDBC
    连接数据库
    查询操作
    更新、添加与删除操作
    使用预处理语句
    事务
    批处理

    重点和难点
    重点:创建数据源和掌握JDBC连接的方法;实现查询功能
    难点:预处理,事务

    MySQL数据库管理系统
    MySQL数据库管理系统,简称MySQL,是世界上最流行的开源数据库管理系统,其社区版(MySQL Community Edition)是最流行的免费下载的开源数据库管理系统。MySQL最初由瑞典MySQL AB公司开发,目前由Oracle公司负责源代码的维护和升级,Oracle将MySQL分为社区版和商业版,并保留MySQL开放源码这一特点。目前许多应用开发项目都选用MySQL,其主要原因是MySQL的社区版性能卓越,满足许多应用已经绰绰有余,而且MySQL的社区版是开源数据库管理系统、可以降低软件的开发和使用成本。

    JDBC
    Java提供了专门用于操作数据库的API,即JDBC (Java DataBase Connection)。JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库(如图11.15).程序经常使用JDBC进行如下的操作 :
    (1)与一个数据库建立连接。
    (2)向数据库发送SQL语句。
    (3)处理数据库返回的结果。

    连接MySQL数据库
    MySQL数据库服务器启动后(见11.2),应用程序为了能和数据库交互信息,必须首先和MySQL数据库服务器上的数据库建立连接。目前在开发中常用的连接数据库的方式是加载JDBC-数据库驱动(连接器)(用Java语言编写的数据库驱动称作JDBC-数据库驱动),即JDBC调用本地的JDBC-数据库驱动和相应的数据库建立连接,如图11.16所示意。Java运行环境将JDBC-数据库驱动转换为DBMS(数据库管理系统)所使用的专用协议来实现和特定的DBMS交互信息。

    查询操作
    得到SQL查询语句对象
    处理查询结果
    有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中。也就是说SQL查询语句对数据库的查询操作将返回一个ResultSet对象,ResultSet对象是按“列”(字段)组织的数据行构成。
    ResultSet rs = sql.executeQuery("SELECT * FROM students");
    ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,获得一行数据后,ResultSet对象可以使用getXxx方法获得字段值(列值),将位置索引(第一列使用1,第二列使用2等)或列名传递给getXxx方法的参数即可。表11.1给出了ResultSet对象的若干方法。
    无论字段是何种属性,总可以使用
    getString(int columnIndex)或
    getString(String columnName)
    方法返回字段值的串表示

    关闭连接
    ResultSet对象和数据库连接对象(Connection对象)实现了紧密的绑定,一旦连接对象被关闭,ResultSet对象中的数据立刻消失。这就意味着,应用程序在使用ResultSet对象中的数据时,就必须始终保持和数据库的连接,直到应用程序将ResultSet对象中的数据查看完毕

    顺序查询
    所谓顺序查询,是指ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行的前面。next()方法向下(向后、数据行号大的方向)移动游标,移动成功返回true,否则返回false。

    条件与排序查询
    where子语句
    一般格式:
    select 字段 from 表名 where 条件
    排序

    更新、添加与删除操作
    1.更新
    update 表 set 字段 = 新值 where <条件子句>
    2.添加
    insert into 表(字段列表) values (对应的具体的记录)

    insert into 表 values (对应的具体的记录)
    3.删除
    delete from 表名 where <条件子句>

    使用预处理语句
    如果应用程序能针对连接的数据库,事先就将SQL语句解释为数据库底层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。
    Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用下列方法都可以使得该底层内部命令被数据库执行。

    连接SQL Server数据库加载SQL Server驱动程序代码如下:
    try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    }
    catch(Exception e){
    }
    连接的代码如下:
    try{
    String uri=
    "jdbc:sqlserver://192.168.100.1:1433;DatabaseName=warehouse";
    String user="sa";
    String password="dog123456";
    con=DriverManager.getConnection(uri,user,password);
    }
    catch(SQLException e){
    System.out.println(e);
    }

    应用举例
    数据库设计
    在清楚了用户的需求之后,就需要进行数据库设计。数据库设计好之后才能进入软件的设计阶段,因此当一个应用问题的需求比较复杂时,数据库的设计(主要是数据库中各个表的设计) 就显得尤为重要
    数据模型
    程序应当将某些密切相关的数据封装到一个类中,例如,把数据库的表的结构封装到一个类中,即为表建立数据模型。其目的是用面向对象的方法来处理数据
    数据处理者
    程序应尽可能能将数据的存储与处理分开,即使用不同的类。数据模型仅仅存储数据,数据处理者根据数据模型和需求处理数据,比如当用户需要注册时,数据处理者将数据模型中的数据写入到数据库的表中
    视图
    程序尽可能提供给用户交互方便的视图,用户可以使用该视图修改模型中的数据。并利用视图提供的交互事件(例如ActionEvent事件),将模型交给数据处理者

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

    • 问题1:resultset的表

    • 问题2:关闭自动提交模式与撤销操作
    • 问题2解决方案:
    import java.sql.*; 
    public class Example11_7{
        public static void main(String args[]){
           Connection con = null;
           Statement sql;
           ResultSet rs; 
           String sqlStr;
           con = GetDBConnection.connectDB("students","root","");
           if(con == null ) return;
           try{ float n = 0.02f;
                con.setAutoCommit(false);       //关闭自动提交模式
                sql = con.createStatement();
                sqlStr = "select name,height from mess where number='R1001'";
                rs = sql.executeQuery(sqlStr);
                rs.next();
                float h1 = rs.getFloat(2);
                System.out.println("事务之前"+rs.getString(1)+"身高:"+h1);
                sqlStr = "select name,height from mess where number='R1002'"; 
                rs = sql.executeQuery(sqlStr);
                rs.next();
                float h2 = rs.getFloat(2);
                System.out.println("事务之前"+rs.getString(1)+"身高:"+h2);  
                h1 = h1-n;
                h2 = h2+n;
                sqlStr = "update mess set height ="+h1+" where number='R1001'";
                sql.executeUpdate(sqlStr);
                sqlStr = "update mess set height ="+h2+" where number='R1002'";
                sql.executeUpdate(sqlStr);
                con.commit(); //开始事务处理,如果发生异常直接执行catch块
                con.setAutoCommit(true); //恢复自动提交模式
                String s = "select name,height from mess"+
                          " where number='R1001'or number='R1002'";
                rs = 
                sql.executeQuery(s);
                while(rs.next()){
                   System.out.println("事务后"+rs.getString(1)+
                                      "身高:"+rs.getFloat(2));  
                }
                con.close();
             }
             catch(SQLException e){
                try{ con.rollback();          //撤销事务所做的操作
                }
                catch(SQLException exp){}
             }
        }
    }
    

    代码托管

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 3500行 8篇 100小时
    第九周 350/500 2/2 15/20
    第十周 0/500 0/2 0/30
    第十一周 0/1000 0/2 0/25
    第十二周 0/1500 0/2 0/25

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:20小时

    • 实际学习时间:15小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    【华为云技术分享】使用keil5打开GD32F450i的MDK项目出现的问题以及J-Link无法烧录程序对应的解决方案
    【华为云技术分享】不为人知的稠密特征加入CTR预估模型的方法
    205. 判断两个字符串的模式是否相同 Isomorphic Strings
    541. 反转字符串2 Reverse String II
    插入排序,二分查找插入排序,使用二叉树的插入排序
    二分查找,求mid值的类型溢出问题
    二叉搜索树类的C#实现
    二叉搜索树,删除节点
    二叉搜索树的前驱节点和后继节点
    438. 匹配字符串(顺序不同但个数相同的字符串) Find All Anagrams in a String
  • 原文地址:https://www.cnblogs.com/ldc175206/p/10773226.html
Copyright © 2020-2023  润新知