《数据库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. js 学习之路7:switch/case语句的使用

    语法格式: switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: n 与 case 1 和 case 2 不同时执行的代 ...

  2. dynalist 配额

    2018-8-29 dynalist 配额 提示有一个G的配额 就是使用的流量用光了.仅有1个G

  3. bat(批处理)命令(tomcat 7.0.75 startup.bat 命令集)

    本文主要介绍tomcat 7.0.75中startup.bat(位置:tomcat目录\bin)中涉及到的bat命令,为tomcat源码研究做准备. startup.bat中涉及到的bat命令如下: ...

  4. 在android中进行单元测试的步骤

    若不知道怎么配上面两个参数 

  5. mybatis中大于等于小于的写法

    第一种写法(1): 原符号 < <= > >= & ' "替换符号 < <= > >= & &apos; " ...

  6. C# — Windows服务安装后自动停止问题

    今天在使用VS创建一个Windows服务时,为了得到一些提示,引用了Windows.Forms程序集,然后使用MessageBox.Show()方法渴望得到一些弹窗提示: 但是最后在安装好服务后,在任 ...

  7. 在Mac OS X下使用Apache、PHP、MySQL、Netbeans、Yii

    本文环境: Mac OS X:10.8.4 Apache:2.2.22 PHP:5.3.15 Netbeans:7.3.1 Yii:1.1.14 Mac OS X是内置了Apache服务器的,不过默认 ...

  8. SQL SERVER数据库修改是否区分大小写(转载)

    昨天去客户,发现程序无法应用,跟踪错误提示,提示的大致意思是“数据库表名和数据库字段名不存在”.查询后发现是SQL Server数据库设置了区分大小写的缘故(一般安装时,Oracle的正确安装下是默认 ...

  9. Golang 入门系列(四)如何理解interface接口

    前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友,可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category ...

  10. 关于Jpa和Mybatis的一些看法

    现在网络上充斥着Jpa和Mybatis的一些对比.其实狭义上来说是hibernate和mybatis之间的比较. 例如:为什么感觉国内比较流行的 mybatis 在国外好像没人用的样子? 下面是一些截 ...