《数据库MySQL》

一、题目要求

  • 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截图
  • 编写程序,查询世界上超过“你学号前边七位并把最后一位家到最高位,最高位为0时置1”(比如学号20165201,超过3016520;学号20165208,超过1016520)的所有城市列表,提交运行结果截图
  • 编写程序,查询世界上的所有中东国家的总人口
  • 编写程序,查询世界上的平均寿命最长和最短的国家

二、具体步骤

task1

首先现将附件下载好,由于数据库下载的是书上给出的Navicat for MySQL,因此和老师博客中给出的导入方法不同,在此简单给出操作步骤:

  • 导入前的数据库

  • 在数据库名字上右击选择“运行SQL文件”

  • 在弹出的对话框中选择你的导入路径,点击“开始”开始导入,当进度条全部变绿并且上部百分比为100%时导入完成,点击“关闭”

  • 重启数据库后即可看到成功导入的文件(注意一定要关闭数据库再重新打开,开始时因为没有重启所以没有显示导入好的数据库,一直在反复导入)

  • 导入成功图片

task2

  • 待查询的人口数为大于1017520
  • 代码如下:
  1. package MySQL;
  2. import java.sql.*;
  3. public class task2 {   
  4. public static void main(String[] args) {       
  5. Connection con;       
  6. Statement sql;       
  7. ResultSet rs;       
  8. con = GetDBConnection.connectDB("world","root","wzh990213");       
  9. if(con == null) return;       
  10. try {           
  11. sql=con.createStatement();           
  12. rs = sql.executeQuery("SELECT * FROM city");           
  13. while (rs.next()) {               
  14. int ID = rs.getInt(1);               
  15. String Name = rs.getString(2);               
  16. String CountryCode = rs.getString(3);               
  17. String District = rs.getString(4);               
  18. int Population =rs.getInt(5);               
  19. if(Population>1017520) {                   
  20. System.out.printf("%d\t", ID);                   
  21. System.out.printf("%s\t", Name);                   
  22. System.out.printf("%s\t", CountryCode);                   
  23. System.out.printf("%s\t", District);                   
  24. System.out.printf("%d\n", Population);               
  25. }           
  26. }           
  27. con.close();       
  28. }       
  29. catch (SQLException e) {           
  30. System.out.println(e);       
  31. }   
  32. }
  33. }
  • 代码说明:在其中的city表中进行查询,当人口大于1017520时,输出该国家city表中的所有信息
  • 运行结果



task3

  • 代码如下
  1. package MySQL;
  2. import java.sql.*;
  3. public class task3 {   
  4. public static void main(String[] args) {       
  5. Connection con;       
  6. Statement sql;       
  7. ResultSet rs;       
  8. con = GetDBConnection.connectDB("world","root","wzh990213");       
  9. if(con == null) return;       
  10. String sqlStr = "select * from country where Region = 'Middle East'";       
  11. try {           
  12. sql = con.createStatement();           
  13. rs = sql.executeQuery(sqlStr);           
  14. long totalpopulation = 0;           
  15. while(rs.next()) {               
  16. int Population = rs.getInt(7);               
  17. totalpopulation +=Population;           
  18. }    
  19. System.out.println("中东国家的总人口为"+totalpopulation);           
  20. con.close();       
  21. }       
  22. catch (SQLException e) {           
  23. System.out.println(e);       
  24. }   
  25. }
  26. }
  • 代码说明:在country表中进行查询通过where Region = 'Middle East' 作为判断条件进行查询,并对人口进行累加
  • 运行结果

task4

  • 代码如下
  1. package MySQL;
  2. import java.sql.*;
  3. public class task4 {   
  4. public static void main(String[] args) {       
  5. Connection con;       
  6. Statement sql;       
  7. ResultSet rs;       
  8. con = GetDBConnection.connectDB("world","root","wzh990213");       
  9. if(con == null) return;       
  10. String sqlStr = "select * from country order by LifeExpectancy";       
  11. try {           
  12. sql = con.createStatement();           
  13. rs = sql.executeQuery(sqlStr);           
  14. rs.first();           
  15. String highcountry,lowcountry;           
  16. float number1 = rs.getInt(8);           
  17. while(number1 == 0) {               
  18. rs.next();               
  19. number1 = rs.getInt(8);           
  20. }           
  21. lowcountry = rs.getString(2);           
  22. System.out.println("世界上平均寿命最短的国家为:"+lowcountry+" 寿命为"+number1);           
  23. rs.last();           
  24. float number2 = rs.getInt(8);           
  25. highcountry = rs.getString(2);           
  26. System.out.println("世界上平均寿命最长的国家为:"+highcountry+" 寿命为"+number2);           
  27. con.close();       
  28. }       
  29. catch (SQLException e) {           
  30. System.out.println(e);       
  31. }   
  32. }
  33. }
  • 代码说明:首先通过order by LifeExpectancy 对country表进行排序,然后将游标指向第一行判断对应位置的内容是否为空,为空则下移直到找到第一个不是空的进行输出;再将游标移至最后一行进行输出
  • 运行结果

额外代码

在完成该任务时也用到了书上的GetDBConnection代码进行数据库的链节操作,代码如下:

  1. package MySQL;
  2. import java.sql.*
  3. ;public class GetDBConnection {   
  4. public static Connection connectDB(String DBName,String id,String p) {       
  5. Connection con = null;       
  6. String  uri =
  7. "jdbc:mysql://localhost:3306/"+DBName+"?serverTimezone=GMT%2B8&characterEncoding=utf-8";       
  8. try{ 
  9. Class.forName("com.mysql.cj.jdbc.Driver");//加载JDBC-MySQL驱动       
  10. }       
  11. catch(Exception e){}       
  12. try{           
  13. con = DriverManager.getConnection(uri,id,p); //连接代码       
  14. }       
  15. catch(SQLException e){}       
  16. return con;   
  17. }
  18. }

三、过程中出现的问题

  • 问题:在完成第四个任务是出下了输出的平均寿命为0的情况,在数据库中的country表中进行查找该国家后发现该国家的LifeExpectancy为空,因此输出的寿命为0



  • 解决方法:在对country表用关键字LifeExpectancy进行排序后发现前12个国家对应的平均寿命值为空,因此应该控制游标位置输出第一个不为空的国家,更改后的结果如下

四、代码托管

五、感想

本次任务比较简单,之前学习书上的内容时基本都己经完成了对数据库的配置,因此操作起来没有大问题,在完成本次任务时也是按照书上的例子进行部分修改,改成自己需要的条件即可,难度不大

参考资料

《数据库MySQL》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 宇宙第一开发工具:vs2019 开发Python

    1.初步认识 现在人工智能逐步进入人们的视野,人工智能开发也越来越火. 而python语言,被作为大数据库开发的首选语言之一~.前一段时间vs2019预览版发布.相信不少小伙伴已经开始使用,vs201 ...

  2. linux 大小写转化

    (1)sed: cat file | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' (2)tr: cat file | ...

  3. XCopy 小技巧

    使用XCOPY Copy 一个文件时,如果目标地址没有对应的文件, 系统会提示选择是文件,还是目录,如下图所示. 有时我们不想出现这个提示,这是只需要修改目标文件的写法.如下 将 "D:\t ...

  4. errno 的使用

    error是一个包含在<errno.h>中的预定义的外部int变量,用于表示最近一个函数调用是否产生了错误.若为0,则无错误,其它值均表示一类错误. perror()和strerror() ...

  5. websocket 实现单聊群聊 以及 握手原理+加密方式

    WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...

  6. centos7下kubernetes(17。kubernetes-回滚)

    kubectl apply每次更新应用时kubernetes都会记录下当前配置,保存为一个revision(版次),这样就可以回滚到某个特定的revision 默认配置下,kubernetes只会保留 ...

  7. Java获取泛化类型

    @Retention(RetentionPolicy.RUNTIME) public @interface MongodbTable { String name(); } public class A ...

  8. try/catch中finally的执行时间

    前言 由于总是搞不清楚try/catch中的一个执行顺序,返回结果.所以总结一下 1.finally没有return 时,可以看出finally确实在return之前执行了 public static ...

  9. Luogu5058 [ZJOI2004]嗅探器

    $Luogu5058 [ZJOI2004]嗅探器 给定一张 \(n\) 个点, \(m\) 条边的无向图,和两点 \(s,\ t\) ,求 \(s\to t\) 编号最小的必经点(排除 \(s,\ t ...

  10. Linux中断管理

    CPU和外设之间的交互,或CPU通过轮询机制查询,或外设通过中断机制主动上报. 对大部分外设中断比轮询效率高,但比如网卡驱动采取轮询比中断效率高. 这里重点关注ARM+Linux组合下中断管理,从底层 ...