zoukankan      html  css  js  c++  java
  • 数据库MySQL

    数据库MySQL

    要求

    1.下载附件中的world.sql.zip, 参考Intellj IDEA 简易教程:数据库,导入world.sql,提交导入成功截图
    2.编写程序,查询世界上超过“你学号前边七位并把最后一位加到最高位,最高位为0时置1”(比如学号20165201,超过3016520;学号20165208,超过1016520)的所有城市列表,提交运行结果截图
    3.编写程序,查询世界上的所有中东国家的总人口
    4.编写程序,查询世界上的平均寿命最长和最短的国


    实现步骤(根据老师实验博客顺序)

    “测试数据库是否打开代码”的测试

    这一步是为了检验数据库是否连接到了IDEA中,也就是说能否用代码对数据库进行操作。
    个人感觉这一步放在这里有点问题,放在XAMPP配置好并且将数据库导入到IDEA中以后,才会有意义。

    代码如下:

    import static java.lang.System.out;
    import java.sql.*;
    
    public class ConnectionDemo {
        public static void main(String[] args)
                                  throws ClassNotFoundException, SQLException {
            Class.forName("com.mysql.jdbc.Driver");
            String jdbcUrl = "jdbc:mysql://localhost:3306/demo";
            String user = "root";
            String passwd = "";
            try(Connection conn = 
                    DriverManager.getConnection(jdbcUrl, user, passwd)) {
                out.printf("已%s数据库连接%n", 
                        conn.isClosed() ? "关闭" : "打开");
            } 
        }
    }
    

    XAMPP的配备

    • 下载XAMPP后打开文件夹中的xampp-control.exe(最好用管理员权限)
    • 点最上面两个项目对应的start(本次作业中最难的一步)

    网页版数据库更改(自己起的名字)

    划重点
    这一步如果未更改Apache占用端口号直接按下图步骤即可,如果更改则需要更改网站地址(问题解答处会详细说明)*


    接下来你就会和老师的步骤对上了~
    在此直接引用老师的操作步骤~

    配备:

    1.建数据库的SQL语句: CREATE SCHEMA demo;

    2.留言板数据库表的SQL语句是:

    use demo;
    CREATE TABLE t_message (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name CHAR(20) NOT NULL,
    email CHAR(40),
    msg TEXT NOT NULL
    ) CHARSET=UTF8;
    

    以上两组代码输入以后,都要点击执行

    插件安装

    插件是书上提供的,这里我把书上版本的文件下载链接放一下[https://pan.baidu.com/s/1u9CaadJ9wh3DvyywAZlvTQ],提取码:r5dj
    如下图加入即可

    测试阶段

    测试留言(前面输入的SQL语句这里派上用场)

    import java.sql.*;
    import java.util.*;
    
    public class MessageDAO {
        private String url;
        private String user;
        private String passwd;
        
        public MessageDAO(String url, String user, String passwd) {
            this.url = url;
            this.user = user;
            this.passwd = passwd;
        }
    
        public void add(Message message) {
            try(Connection conn = DriverManager.getConnection(url, user, passwd);
                Statement statement = conn.createStatement()) {
                String sql = String.format(
             "INSERT INTO t_message(name, email, msg) VALUES ('%s', '%s', '%s')",  
                      message.getName(), message.getEmail(), message.getMsg());
                statement.executeUpdate(sql);
            } catch(SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
    
        public List<Message> get() {
            List<Message> messages = new ArrayList<>();
            try(Connection conn = DriverManager.getConnection(url, user, passwd);
                Statement statement = conn.createStatement()) {
                ResultSet result = 
                        statement.executeQuery("SELECT * FROM t_message");
                while (result.next()) {
                    Message message = toMessage(result);
                    messages.add(message);
                }
            } catch(SQLException ex) {
                throw new RuntimeException(ex);
            }
            return messages;
        }
    
        private Message toMessage(ResultSet result) throws SQLException {
            Message message = new Message();
            message.setId(result.getLong(1));
            message.setName(result.getString(2));
            message.setEmail(result.getString(3));
            message.setMsg(result.getString(4));
            return message;
        }
    }
    
    import java.io.Serializable;
    
    public class Message implements Serializable {
        private Long id;
        private String name;
        private String email;
        private String msg;
    
        public Message() {}
        
        public Message(String name, String email, String msg) {
            this.name = name;
            this.email = email;
            this.msg = msg;
        }
        
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    
    import static java.lang.System.out;
    import java.util.Scanner;
    
    public class MessageDAODemo {
        public static void main(String[] args) throws Exception {
            MessageDAO dao = new MessageDAO(
                    "jdbc:mysql://localhost:3306/demo?" + 
                    "useUnicode=true&characterEncoding=UTF8",
                    "root", "");
            Scanner console = new Scanner(System.in, "Big5");
            while(true) {
                out.print("(1) 显示留言 (2) 新增留言:");
                switch(Integer.parseInt(console.nextLine())) {
                    case 1:
                        dao.get().forEach(message -> {
                            out.printf("%d	%s	%s	%s%n", 
                                    message.getId(), 
                                    message.getName(), 
                                    message.getEmail(), 
                                    message.getMsg());
                        });
                        break;
                    case 2:
                        out.print("姓名:");
                        String name = console.nextLine();
                        out.print("邮件:");
                        String email = console.nextLine();
                        out.print("留言:");
                        String msg = console.nextLine();
                        dao.add(new Message(name, email, msg));
                }
            }
        }
        
    }
    

    world数据库的插入

    • 如图步骤导入后点执行

    至此,配备阶段结束


    There are 几个程序的代码

    查询人口超过7017510的所有城市列表

    代码比较容易(至少看书来敲是这样的),关键是找到URL的数据位置String url = "jdbc:mysql://localhost:3306/world";

    /**
     * MysqlTest1
     *
     * @author wxh20175105
     * @date 2019/5/4
     */
    
    import java.sql.*;
    
    public class MysqlTest1 {
        public static void main(String[] args) throws SQLException {
            Connection con;
            Statement sql;
            ResultSet rs;
            String url = "jdbc:mysql://localhost:3306/world";
            String user = "root";
            String passwd = "";
            con = DriverManager.getConnection(url, user,passwd);
            if (con == null) {
                return;
            }
            String sqlStr = "select*from city where population>7017510";
            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	", id);
                    System.out.printf("%s	", name);
                    System.out.printf("%s	", countryCode);
                    System.out.printf("%s	", district);
                    System.out.printf("%d
    ", population);
                }
                con.close();
            } catch (SQLException e) {
                System.out.println("Error:" + e);
            }
    
    
        }
    }
    

    查询中东国家的总人口

    /**
     * MysqlTest2
     *
     * @author Wxh20175105
     * @date 2019/5/4
     */
    
    import java.sql.*;
    
    public class MysqlTest2 {
        public static void main(String[] args) throws SQLException {
            Connection con;
            Statement sql;
            ResultSet rs;
            String url = "jdbc:mysql://localhost:3306/world";
            String user = "root";
            String passwd = "";
            con = DriverManager.getConnection(url, user,passwd);
            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
    ", name, population);
                    total += population;
                }
                System.out.println("中东国家的总人口为:" + total);
            } catch (SQLException e) {
                System.out.println("Error:" + e);
            }
    
        }
    }
    

    查询世界上的平均寿命最长和最短的国家

    import java.sql.*;
    
    /**
     * MysqlTest3
     *
     * @author wxh20175105
     * @date 2019/5/4
     */
    public class MysqlTest3 {
        public static void main(String[] args) throws SQLException {
            Connection con;
            Statement sql;
            ResultSet rs;
            String url = "jdbc:mysql://localhost:3306/world";
            String user = "root";
            String passwd = "";
            con = DriverManager.getConnection(url, user,passwd);
            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了,旧SQL的服务把端口占用了。解决方式如下:

    • 判断是否和分析的一样
    • 卸载原服务(也可以按上图中停止服务,不过毕竟留了个祸根,还是卸载的好)
    • 安装新服务
      再点一下❌的地方
      本问题可通过修改端口解决,但本人实践后发现并未解决问题,有兴趣的朋友可以参考问题三对此进行解决

    问题二:

    解决方案:

    原因是以前安装过MYSQL,调用的是旧的软件。更改路径到my.ini(现有的MYSQL调用软件)即可。更改路径后要再重新卸载并安装一下SQL服务(即重复问题一的步骤2、3)

    问题三:(该问题本人未发生,但是搜索其他解决方案时,切实感受到很多人有这种情况,所以写出来作为交流)


    解决方案:修改占用端口(文件中所有80改成81)

    • 可利用word查找替换的方法
      特别注意:修改端口后,如果要网页版数据库更改,需要改变网址。问题与解决方案如下:

    感受:

    本次作业比较简单,耗时间的在软件配置上,不过也努力克服了。最大的改变是写博客的心态上,变得积极主动了希望大家多多关注以后会更用心的~

    再多说一句~

    希望能对你们有帮助,荣幸之至

  • 相关阅读:
    我的插件架构
    .net 处理图片亮度
    封装自己的对称加密模块
    漏洞无处不在之窃取你的QQ信息
    写自己的自动升级模块
    抓到一只网马,发文顺便鄙视下360
    .net 3.5的Socket异步完成端口
    检测本机是否登录了指定QQ账号
    C++/CLR写的Data Blocks
    修改的Vista风格多功能日历Demo
  • 原文地址:https://www.cnblogs.com/wxhblogs/p/10812487.html
Copyright © 2011-2022 走看看