《数据库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. Python爬虫实战之Requests+正则表达式爬取猫眼电影Top100

    import requests from requests.exceptions import RequestException import re import json # from multip ...

  2. LNMP时,出现502 Bad Gateway的错误提示

    因为工作需要,要在ubuntu中安装LNMP环境,在这里,php是最新版本php7.1.一切都进展得很顺利,安装完成后,在浏览器中输入http://127.0.0.1/info.php,出现了502 ...

  3. 能ping通虚拟机,但snmp报文 Destination unreachable(Host administratively prohibited

    如题目,使用virtual box 虚拟机,虚拟机系统为centos6.5, 主机系统为win10 内外设置ip在同一网段后,互相能ping通,centos 系统开启snmp服务,此处说明以下, sn ...

  4. 对java中的equals()方法的总结

    Java的基础学习总结--equals方法 一,等于方法介绍 1.1.通过下面的例子掌握等于的用法 1 package cn.galc.test; 2 3 public class TestEqual ...

  5. LeetCode算法题-Fibonacci Number(Java实现)

    这是悦乐书的第250次更新,第263篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第117题(顺位题号是509).Fibonacci数字,通常表示为F(n),形成一个称为 ...

  6. 转://linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

    转载地址:http://wushank.blog.51cto.com/3489095/1585927 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "s ...

  7. token

    18f9nWvThC274lo3USjgfeldynt0t/r/w0yjLbj9 http://app-static.acc5.com/app/testpost.php

  8. P1546 最短网络 Agri-Net题解(克鲁斯卡尔)

    P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...

  9. AI 生成式对抗网络(GAN)

    生成式对抗网络(Generative Adversarial Network,简称GAN),主要由两部分构成:生成模型G和判别模型D.训练GAN就是两种模型的对抗过程. 生成模型:利用任意噪音(ran ...

  10. Python学习--Python变量类型

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...