數據庫MySQL(課下作業,必做)


數據庫MySQL(課下作業,必做)

題目要求:

  1. 下載附件中的world.sql.zip, 參考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,導入world.sql,提交導入成功截圖
  2. 編寫程序,查詢世界上超過“你學號前邊七位並把最后一位家到最高位,最高位為0時置1”(比如學號20165201,超過3016520;學號20165208,超過1016520)的所有城市列表,提交運行結果截圖
  3. 編寫程序,查詢世界上的所有中東國家的總人口
  4. 編寫程序,查詢世界上的平均壽命最長和最短的國家

實現步驟:

導入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文件進行操作,讓我深感數據庫功能強大。在任務進行中沒有遇到什么大問題,類似壽命為空影響查找的情況在代碼解釋中已有提及,就不單列出闡述了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM