• JAVA 第九周学习总结


    20175308 2018-2019-2 《Java程序设计》第九周学习总结

    教材学习内容总结

    准备工作

    下载MYSQL数据库管理系统

    前往MYSQL官网的下载页面,选择相应平台的MYSQL版本,单击“No thanks,just start my download.”超链接开始下载、安装。

    下载MYSQL客户端管理工具

    在客户端管理工具中,娄老师的教程给的是XAMPP,但经学长推荐,我最后选择了Navicat,一个缺点就是正版的Navicat需要支付昂贵的费用,所以需要进行一步破解的操作。按照教材中的步骤操作,成功链接数据库。

    下载JDBC

    JDBC:

    教材中的JDBC下载链接已经不存在,新的页面链接为https://dev.mysql.com/downloads/connector/j/ 选择平台独立版本,下载解压后按照教材中的步骤放好jar文件,然后在IDEA中导入即可。

    测试是否可以连接

    娄老师在Intellj IDEA 简易教程中已经给出了测试代码。我们运行一下代码,即可测试数据库是否已经成功连接。(注意将数据库名修改为自己的数据库名,如果有设定密码要写入密码

    到此为止,准备工作就基本完成了。

    教材学习

    连接数据库的步骤

    1. 加载驱动:代码如下
    try { Class.forName("com.mysql.jdbc.Driver");
    }
    catch(Exception e){}
    

    2.连接数据库:

    Connection con;
    String uri="jdbc:mysql://localhost:3306/students?useSSL=true";
    String user="root";
    String password ="";
    try{
     con = DriverManager.getConnection(uri,user,password);
     }
     catch(SQLException e){}
    

    查询操作

    • 发送查询语句
    //使用Statement声明一个SQL语句对象,然后让一创建的连接对象con调用方法createStatement()创建这个SQL语句对象
    try { Statement sql=con.createStatement();
    }
    catch(SQLException e){}
    
    • ResultSet对象声明结果集
    ResultSet rs = sql.excuteQuery("SELECT * FROM students");
    

    获得数据后通过getXXXX方法获得字段值。
    ResultSet 对象一次只能看到一个数据行,使用next()移到下一个数据行

    • 关闭连接:con.close();

    条件与排序查询

    where子语句

    一般格式:select 字段 from 表名 where 条件
    与固定值比较:select name,height from mess where name='李四'
    在某个区间范围:select * from mess where height>1.60 and height<=1.8
    使用某些特殊的日期函数:select * from where year(birthday)<1980 and month(birthday)<=10
    like进行模式匹配,用%代替0个或多个字符,用下划线代替一个字符:select * from mess where name like '%林%'

    排序

    使用order by子语句,例如:

    select * from mess order by height;
    select * from where name like '%林%' order by name;
    

    更新、添加与删除

    Statement对象调用方法public int executeUpdate(String sqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作。

    • 更新:update 表 set 字段 = 新值 where <条件子句>
    • 添加:insert into 表(字段列表) values (对应的具体记录)
    • 删除:delete from 表名 where <条件子句>

    预处理语句

    • 通过事先将SQL语句解释为数据库底层的内部命令,直接让数据库去执行,减轻了数据库的负担,也提高了访问数据库的速度。
    • Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象中

    事务及处理

    事务处理的目的

    应用程序为了确保事务中的SQL语句要么全部都执行,要么一个都不执行,例如转款操作,转款方的转出和收款方的收入一定都要执行,不能只执行某一个操作。

    事务处理的步骤
    • setAuteCommit(boolean b)方法关闭自动提交模式
    • 进行操作后用commit()提交操作
    • rollback()方法处理事务失败

    教材学习中的问题和解决过程

    本周的学习中我花了很长的时间来细致地读教材。在研究教材代码的时候诚然有很多处代码没有理解,但很快就会在下文或者仔细回看一下上文发现答案,大多不值一晒。需要费力解决的主要问题集中于代码调试过程中。

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

    运行Example11_3出现问题

    出现如图所示报错。

    解决:

    分析报错,“You have an error in your SQL synatx.....”发现错误出在SQL的语法里,但具体出在哪里不得而知。仔细比对教材代码,并未发现明显异常。但当我不抱希望的给一处and添了一个空格,程序运行正常!似乎SQL语句对于语法的要求格外严苛。

    运行Example11_6出现问题

    问题1


    刘伟同学有点抢镜

    解决:

    刘伟的记录是在Example11_5中进行添加的,在调试11_5代码时运行了几次,虽然代码中控制有number值不能重复的try-catch语句,但是只针对代码内部添加过程,不能控制代码运行多次导致重复的错误。我起初在Navicat中试图删除记录,但刷新后发现并没有变化,于是尝试通过编写代码删除

    import java.sql.*;
    public class Delete {
        public static void main(String[] args) {
            Connection con;
            Statement sql;
            ResultSet rs;
            con=GetDBConnection.connectDB("Fomalhaut","root","这里被我打码了");
            if(con==null) return;
            String sqlStr="delete from mess where name = '刘伟'";
            try{
                sql=con.createStatement();
                int ok=sql.executeUpdate(sqlStr);
            }
            catch (SQLException e){
                System.out.println(e);
            }
    
        }
    }
    
    

    成功删去“刘伟”的记录。

    问题2

    仔细看,这段运行结果的错误不止一处

    并没有得到正确的列表名

    解决

    查阅API文档

    注意到这两个相类似的方法后我马上回去看代码,果然发现自己将.getColumnName()打成了getColumnClassName(),修改后,程序正确

    零碎问题

    • :横向制表(HT) (跳到下一个TAB位置)。
    • rs.getString(1234)中的数字代表列索引1234,在数据表中分别指number ameirthdayheight

    代码托管

    感悟

    这周的学习任务其实不算很多,但是有些复杂。第一次接触到数据库和SQL语句,花了很长的时间去消化。短短一周的学习固然不能吃透这一章的内容,但也尽力囫囵着学了个大概,尽力抓住细节。Navicat最新版本还没有发现破解教程,还要抽时间寻找教程破解,漏下的内容也觉得有些多,头痛头痛。

  • 相关阅读:
    java代码split分割数字类
    P1330 封锁阳光大学
    1022 舞会2
    1626 爱在心中
    P2024 食物链(two)
    P1196 银河英雄传说
    P1892 团伙
    P1546 最短网络(最小生成树)
    烦人的幻灯片(拓扑)
    例4.15 奖金(拓扑排序)
  • 原文地址:https://www.cnblogs.com/darklord0604/p/10781066.html
Copyright © 2020-2023  润新知