《数据库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
  • 代码如下:
package MySQL;
import java.sql.*;
public class task2 {   
public static void main(String[] args) {       
Connection con;       
Statement sql;       
ResultSet rs;       
con = GetDBConnection.connectDB("world","root","wzh990213");       
if(con == null) return;       
try {           
sql=con.createStatement();           
rs = sql.executeQuery("SELECT * FROM city");           
while (rs.next()) {               
int ID = rs.getInt(1);               
String Name = rs.getString(2);               
String CountryCode = rs.getString(3);               
String District = rs.getString(4);               
int Population =rs.getInt(5);               
if(Population>1017520) {                   
System.out.printf("%d\t", ID);                   
System.out.printf("%s\t", Name);                   
System.out.printf("%s\t", CountryCode);                   
System.out.printf("%s\t", District);                   
System.out.printf("%d\n", Population);               
}           
}           
con.close();       
}       
catch (SQLException e) {           
System.out.println(e);       
}   
}
}
  • 代码说明:在其中的city表中进行查询,当人口大于1017520时,输出该国家city表中的所有信息
  • 运行结果



task3

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

task4

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

额外代码

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

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

三、过程中出现的问题

  • 问题:在完成第四个任务是出下了输出的平均寿命为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. Delphi连接MySql(待测试验证,使用mysql.pas未通过)

    要在一个Delphi程序中调用Mysql数据库,查到有个资料如下,待验证,验证后会给出结果.暂时做个标记 已经验证,验证日期:2018.6.18 验证结果:不可行 验证工具:XE7,mysql5.5. ...

  2. Linux查杀stopped进程

      在Linux系统下面,top命令可以查看查看stopped进程.但是不能查看stopped进程的详细信息.那么如何查看stopped 进程,并且杀掉这些stopped进程呢? ps -e j | ...

  3. 【原】Java学习笔记022 - 字符串

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 字符串 // 定义 ...

  4. A Deep Learning-Based System for Vulnerability Detection

    本篇文献作者提出了一种基于深度学习来检测软件漏洞的方案.       摘要:作者开始基于深度学习的漏洞检测研究,是为了减轻专家手工定义特性的繁琐任务,需要制定一些指导性原则来适用于深度学习去进行漏洞探 ...

  5. 如何在 windows server 2008 上面 挂载NFS

    首先, 你在一台服务器上面配置好NFS 服务器:然后按照一下步骤: mounting the nfs on windows server 2008 r2: open Windows Server 的D ...

  6. webstorm 的 .后缀名-tab快捷键

    if (key) {}//key.if tab if (!key) {}//key.else tab if (key != null) {}//key.notnull tab if (typeof k ...

  7. HTML---引入css,js | 常用标签示例

    一.前端基础包括哪些?如何理解 二.css,js引入_及head中其他标签 三.特殊符号 四.常见的标签 4.1,form表单 4.2,input系列(单选框.复选框.input传文件.重置) 4.3 ...

  8. Kafka设计解析(六)- Kafka高性能架构之道

    本文从宏观架构层面和微观实现层面分析了Kafka如何实现高性能.包含Kafka如何利用Partition实现并行处理和提供水平扩展能力,如何通过ISR实现可用性和数据一致性的动态平衡,如何使用NIO和 ...

  9. 兼容IphoneX

    兼容IphoneX的显示,一般有两种方法,一种通过css的media来做兼容,一种是通过js来做兼容. 一.我们先讲CSS的方法,我们要做两步即可: 1. 全屏覆盖,html使用 <meta n ...

  10. Laravel 入口文件解读及生命周期

    这里只贴index.php的代码, 深入了解的请访问    https://laravel-china.org/articles/10421/depth-mining-of-laravel-life- ...