數據庫MySQL(課下作業,必做)
題目要求:
- 下載附件中的world.sql.zip, 參考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,導入world.sql,提交導入成功截圖
- 編寫程序,查詢世界上超過“你學號前邊七位並把最后一位家到最高位,最高位為0時置1”(比如學號20165201,超過3016520;學號20165208,超過1016520)的所有城市列表,提交運行結果截圖
- 編寫程序,查詢世界上的所有中東國家的總人口
- 編寫程序,查詢世界上的平均壽命最長和最短的國家
實現步驟:
導入world.sql
-
下載zip文件,解壓后得到world.sql
-
右鍵點擊數據庫,
運行sql文件
,選擇sql文件,點擊開始
-
刷新數據庫,發現導入world成功
任務一:查詢人口超過1017530的所有城市列表
代碼實現如下:
/**
* MysqlTest1
*
* @author Fomalhaut20175308
* @date 2019/4/29
*/
import java.sql.*;
public class MysqlTest1 {
public static void main(String[] args) {
Connection con;
Statement sql;
ResultSet rs;
con = GetDBConnection.connectDB("world", "root", "**********");
if (con == null) {
return;
}
String sqlStr = "select*from city where population>1017530";
try {
sql = con.createStatement();
rs = sql.executeQuery(sqlStr);
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);
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("Error:" + e);
}
}
}
關鍵解釋:
- 我們打開
country
表查看要返回的數據格式,建立int
類型的id和population(或long類型),String
類型的name、countryCode、district用來存儲得到的信息 - 對應着列索引調用rs.getXXXX()方法獲得信息並輸出
運行截圖:
任務二:查詢中東國家的總人口
代碼實現如下:
/**
* MysqlTest2
*
* @author Fomalhaut20175308
* @date 2019/4/29
*/
import java.sql.*;
public class MysqlTest2 {
public static void main(String[] args) {
Connection con;
Statement sql;
ResultSet rs;
con = GetDBConnection.connectDB("world", "root", "**********");
if (con == null) {
return;
}
String sqlStr = "select Name,Population from country where Region = 'Middle East'";
try {
sql = con.createStatement();
rs = sql.executeQuery(sqlStr);
int total = 0;
while (rs.next()) {
String name = rs.getString(1);
int population = rs.getInt(2);
System.out.printf("%s的人口為%d\n", name, population);
total += population;
}
System.out.println("中東國家的總人口為:" + total);
} catch (SQLException e) {
System.out.println("Error:" + e);
}
}
}
關鍵解釋:
- 此任務要調查中東國家的總人口,我先分別輸出了所有中東國家各自的人口數,最后輸出總和。
- 本任務中地區限定為中東,需要輸出名字和人口數,因此只需在表中獲得名字信息和人口數即可,sql語句為:
String sqlStr = "select Name,Population from country where Region = 'Middle East'";
- 根據sql語句,此次列索引只有兩個,一個用來得到名字,一個用來得到人口數
- 定義total用來得到總人口數,每查找到一個中東國家,就執行
total += population;
運行截圖:
任務三:查詢世界上的平均壽命最長和最短的國家
代碼實現如下:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* MysqlTest3
*
* @author Fomalhaut20175308
* @date 2019/4/30
*/
public class MysqlTest3 {
public static void main(String[] args) {
Connection con;
Statement sql;
ResultSet rs;
con = GetDBConnection.connectDB("world", "root", "************");
if (con == null) {
return;
}
String sqlStr = "select Name,LifeExpectancy from country order by LifeExpectancy";
try {
sql = con.createStatement();
rs = sql.executeQuery(sqlStr);
while (rs.next()) {
float life = rs.getInt(2);
String name = rs.getString(1);
rs.first();
while (life == 0) {
rs.next();
life = rs.getInt(2);
}
name = rs.getString(1);
System.out.println("世界上平均壽命最短的國家為:" + name);
rs.last();
name = rs.getString(1);
System.out.println("世界上平均壽命最長的國家為:" + name);
}
} catch (SQLException e) {
System.out.println("Error:" + e);
}
}
}
關鍵解釋:
- 由於要查詢壽命最長和最短的國家,因此一定要對表中信息進行排序,sql語句
String sqlStr = "select Name,LifeExpectancy from country order by LifeExpectancy";
將會查找按照LifeExpectancy
排序后的列表 rs.first()
和rs.last()
分別控制游標移動到表中第一位和最后一位- 在查找中發現,有數個國家的平均壽命值沒有記錄,會干擾實際有效值,因此需要添加循環語句,如果平均壽命為空繼續向下找
運行截圖:
任務總結
這次的任務完全針對數據庫的操作,剛剛學完數據庫的有關操作,這次的任務即可看作是一次對於學習內容的小測試,也是對於數據庫相關知識的鞏固練習。總體來說不是很難,掌握情況尚可。除了教材中的內容,這次任務第一次實地下載了sql文件進行操作,讓我深感數據庫功能強大。在任務進行中沒有遇到什么大問題,類似壽命為空影響查找的情況在代碼解釋中已有提及,就不單列出闡述了。