zoukankan      html  css  js  c++  java
  • 课下作业(选做)第八周

    课下作业(选做)第八周

    课上内容补做:

    由于我的电脑之前始终不能连接上数据库,无法通过http://localhost来进入,总是显示服务器被拒绝,导致当时我没能做出。后来,查阅了许多资料并在王老师的帮助下,更改了端口、设置等之后,才可以进入数据库并进行操作。但后来在运行代码的过程中,我的电脑只能通过MySQL管理软件进行一些执行,运行其他的就又会有如图错误提示,这个错误是空指针的意思,我的理解是无法连接到数据库,没有解决,只能用同学的电脑来完成。

    相关知识点:

    第一道道题用到的知识点主要是一些操作,就是xampp的安装、MySQL客户端管理工具的安装与使用和在IDEA中配置驱动mysql-connector-java-5.1.41-bin.jar。配置驱动和加入junit.jar的操作类似,配置好即可。第二道题设计的是在数据库中进行寻找、比较、求和的知识。

    第二题代码:
    test1:

    import java.sql.*;
    public class test1 {
        public static void main(String args[]) {
            Connection con=null;
            Statement sql;
            ResultSet rs;
            try{  Class.forName("com.mysql.jdbc.Driver"); //加载JDBC_MySQL驱动
            }
            catch(Exception e){}
            String uri = "jdbc:mysql://localhost:3306/world?useSSL=true";
            String user ="root";
            String password ="";
            try{
                con = DriverManager.getConnection(uri,user,password); //连接代码
            }
            catch(SQLException e){ }
            try {
                sql=con.createStatement();
                rs=sql.executeQuery("SELECT * FROM city"); //查询mess表
                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>8016520){    //20165206
                        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(e);
            }
        }
    }
    
    

    test2:

    import java.sql.*;
    public class test2 {
        public static void main(String [] args) {
            Connection con=null;
            Statement sql;
            ResultSet rs;
            String sqlStr = "select * from country where Region = 'Middle East'";
            try{  Class.forName("com.mysql.jdbc.Driver"); //加载JDBC_MySQL驱动
            }
            catch(Exception e){}
            String uri = "jdbc:mysql://localhost:3306/world?useSSL=true";
            String user ="root";
            String password ="";
            try{
                con = DriverManager.getConnection(uri,user,password); //连接代码
            }
            catch(SQLException e){ }
            try {
                sql=con.createStatement();
                rs = sql.executeQuery(sqlStr);
                int sum=0;
                while(rs.next()) {
                    int population=rs.getInt(7);
                    sum =sum+population;
                }
                System.out.printf("中东国家的总人口为:"+sum);
                con.close();
            }
            catch(SQLException e) {
                System.out.println(e);
            }
        }
    }
    
    

    test3:

    import java.sql.*;
    public class test3 {
        public static void main(String [] args) {
            Connection con=null;
            Statement sql;
            ResultSet rs;
            float smzd=1000.0f,smzc=0.0f;
            String c=new String("");
            String d=new String("");
            String sqlStr =
                    "select * from country order by LifeExpectancy";
            try{  Class.forName("com.mysql.jdbc.Driver"); //加载JDBC_MySQL驱动
            }
            catch(Exception e){}
            String uri = "jdbc:mysql://localhost:3306/world?useSSL=true";
            String user ="root";
            String password ="";
            try{
                con = DriverManager.getConnection(uri,user,password); //连接代码
            }
            catch(SQLException e){ }
            try {
                sql=con.createStatement();
                rs = sql.executeQuery(sqlStr);
                while(rs.next()) {
                    String Name=rs.getString(2);
                    Float LifeExpectancy=rs.getFloat(8);
                    if(LifeExpectancy>smzc) {
                        smzc =LifeExpectancy;
                        c =Name;
                    }
                    else if(LifeExpectancy<smzd){
                        {
                            smzd = LifeExpectancy;
                            d = Name;
                        }
                    }
    
                }
                con.close();
                System.out.printf("世界上平均寿命最长的国家为:"+c+",平均寿命为:"+smzc+"
    ");
                System.out.printf("世界上平均寿命最短的国家为:"+d+",平均寿命为:"+smzd+"
    ");
            }
            catch(SQLException e) {
                System.out.println(e);
            }
        }
    }
    
    

    运行截图:

    在Navicat for MySQL 中添加数据并修改,在idea中运行就可以了。

    导入world.sql,提交导入成功的截图。

    查询世界上超过8016520的所有城市列表的运行截图:

    查询世界上的所有中东国家的总人口的运行截图:

    查询世界上的平均寿命最长和最短的国家的运行截图:

    代码分析:

    • Example11_1
    import java.sql.*; 
    public class Example11_1 {
       public static void main(String args[]) {
          Connection con=null;
          //初始化
          Statement sql; 
          ResultSet rs;     
          //顺序查询,始终保持和数据库的连接,直到将对象中的数据查看完毕
          try{  Class.forName("com.mysql.jdbc.Driver"); //加载JDBC_MySQL驱动
          }
          catch(Exception e){}
          String uri = "jdbc:mysql://localhost:3306/students?useSSL=true";
          String user ="root";
          String password ="";
          try{  
             con = DriverManager.getConnection(uri,user,password); //连接代码
          }
          catch(SQLException e){ }
          try { 
              sql=con.createStatement();
              rs=sql.executeQuery("SELECT * FROM mess"); //查询mess表
              while(rs.next()) {   //读取数据
                 String number=rs.getString(1);
                 String name=rs.getString(2);
                 Date date=rs.getDate(3);
                 float height=rs.getFloat(4);
                 System.out.printf("%s	",number);
                 System.out.printf("%s	",name);
                 System.out.printf("%s	",date); 
                 System.out.printf("%.2f
    ",height);        
              }
              con.close();
          }
          catch(SQLException e) { 
             System.out.println(e);
          }
      }
    }
    

    这段代码的功能是查询students数据库中mess表的全部记录。

    • Example11_2
    import java.sql.*; 
    public class Example11_2 {
       public static void main(String args[]) {
          Connection con;
          Statement sql; 
          ResultSet rs;
          con = GetDBConnection.connectDB("students","root","");   //连接数据库
          if(con == null ) return;
          //若数据为空
          try { 
              sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                        ResultSet.CONCUR_READ_ONLY);  //为得到一个可滚动的结果集
              rs = sql.executeQuery("SELECT * FROM mess ");
              //根据参数ResultSet.TYPE_SCROLL_SENSITIVE和ResultSet.CONCUR_READ_ONLY的情况,sql返回相应类型的结果集
              rs.last();
              int max = rs.getRow();
              System.out.println("表共有"+max+"条记录,随机抽取2条记录:");
              int [] a =GetRandomNumber.getRandomNumber(max,2);//得到1-max之间2个不同随机数
              for(int i:a){
                 rs.absolute(i);//油标移动到第i行
                 String number = rs.getString(1);
                 String name = rs.getString(2);
                 Date date = rs.getDate(3);
                 float h = rs.getFloat(4);
                 System.out.printf("%s	",number);
                 System.out.printf("%s	",name);
                 System.out.printf("%s	",date); 
                 System.out.printf("%.2f
    ",h);
              }
              con.close();
          }
          catch(SQLException e) { 
             System.out.println(e);
          }
      }
    }
    

    Example11_2的功能是随机查询students数据库mess表中的2条记录。

    • Example11_3
    import java.sql.*; 
    public class Example11_3 {
       public static void main(String args[]) {
          Connection con;
          Statement sql; 
          ResultSet rs;
          con = GetDBConnection.connectDB("students","root","");//连接数据库
          if(con == null ) return;
          //若数据为空
          String c1=" year(birthday)<=2000 and month(birthday)>7";
          //条件1:若出生的年份在2000年或者2000年之前,月份在7月之后
          String c2=" name Like '张_%'";
          //条件2:学生姓张
          String c3=" height >1.65";
          //条件3:身高大于1.65
          String sqlStr =
          "select * from mess where "+c1+" and "+c2+" and "+c3+"order by birthday";
          //通过where查找和通过order by排序
          try { 
              sql=con.createStatement();
              rs = sql.executeQuery(sqlStr);
              while(rs.next()) { 
                 String number=rs.getString(1);
                 String name=rs.getString(2);
                 Date date=rs.getDate(3);
                 float height=rs.getFloat(4);
                 System.out.printf("%s	",number);
                 System.out.printf("%s	",name);
                 System.out.printf("%s	",date); 
                 System.out.printf("%.2f
    ",height);
              }
              con.close();
          }
          catch(SQLException e) { 
             System.out.println(e);
          }
      }
    }
    

    这段代码的功能是查询mess表中姓张,身高大于1.65,出生的年份在2000年或者2000年之前,月份在7月之后的学生,并按照出生日期排序。

    • Example11_4
    import java.sql.*; 
    public class Example11_4 {
       public static void main(String args[]) {
          Connection con;
          Statement sql; 
          ResultSet rs;
          con = GetDBConnection.connectDB("students","root","");   //连接数据库
          if(con == null ) return;
          String jiLu="('R11q','王三','2000-10-23',1.66),"+
                      "('R10q','李武','1989-10-23',1.76)";    //插入的2条记录
          String sqlStr ="insert into mess values"+jiLu;
          //通过insert into mess values语句进行插入记录
          try { 
              sql=con.createStatement(); 
              int ok = sql.executeUpdate(sqlStr);
              rs = sql.executeQuery("select * from mess");
              while(rs.next()) { 
                 String number=rs.getString(1);
                 String name=rs.getString(2);
                 Date date=rs.getDate(3);
                 float height=rs.getFloat(4);
                 System.out.printf("%s	",number);
                 System.out.printf("%s	",name);
                 System.out.printf("%s	",date); 
                 System.out.printf("%.2f
    ",height);
              }
              con.close();
          }
          catch(SQLException e) { 
             System.out.println("记录中number值不能重复"+e);
          }
      }
    }
    

    这段代码的功能是向mess中插入两条记录。

    • Example11_5
    import java.sql.*; 
    public class Example11_5 {
       public static void main(String args[]) {
          Connection con;
          PreparedStatement preSql;  //预处理语句对象preSql
          ResultSet rs;
          con = GetDBConnection.connectDB("students","root","");  //连接数据库
          if(con == null ) return;
          String sqlStr ="insert into mess values(?,?,?,?)";
          //在对SQL进行预处理时可以使用通配符?来代替字段的值
          try { 
              preSql = con.prepareStatement(sqlStr);//得到预处理语句对象preSql
              preSql.setString(1,"A001");       //设置第1个?代表的值
              preSql.setString(2,"刘伟");       //设置第2个?代表的值
              preSql.setString(3,"1999-9-10"); //设置第3个?代表的值
              preSql.setFloat(4,1.77f);        //设置第4个?代表的值   
              int ok = preSql.executeUpdate();
              sqlStr="select * from mess where name like ? ";
              preSql = con.prepareStatement(sqlStr);//得到预处理语句对象preSql
              preSql.setString(1,"张%");       //设置第1个?代表的值
              rs = preSql.executeQuery();
              while(rs.next()) { 
                 String number=rs.getString(1);
                 String name=rs.getString(2);
                 Date date=rs.getDate(3);
                 float height=rs.getFloat(4);
                 System.out.printf("%s	",number);
                 System.out.printf("%s	",name);
                 System.out.printf("%s	",date); 
                 System.out.printf("%.2f
    ",height);
              }
              con.close();
          }
          catch(SQLException e) { 
             System.out.println("记录中number值不能重复"+e);
          }
      }
    }
    
    

    这段代码的功能是使用预处理语句向mess表添加记录并查询了姓张的记录。

    • Example11_6
    import javax.swing.*;
    public class Example11_6 {
       public static void main(String args[]) {
          String [] tableHead;
          String [][] content; 
          JTable table ;//定义表格
          JFrame win= new JFrame();
          Query findRecord = new  Query();
          findRecord.setDatabaseName("students");
          findRecord.setSQL("select * from mess");
          content = findRecord.getRecord();
          //返回二维数组,即查询的全部记录
          tableHead=findRecord.getColumnName();
          //返回全部字段名
          table = new JTable(content,tableHead); 
          //表格JTable
          win.add(new JScrollPane(table));
          win.setBounds(12,100,400,200);
          win.setVisible(true); 
          win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
    }
    
    

    这段代码的功能是将数据库的名字以及SQL语句传递给Query类的对象,用表格显示查询到的记录。

    • Example11_7
    import java.sql.*; 
    public class Example11_7{
        public static void main(String args[]){
           Connection con = null;
           //初始化
           Statement sql;
           ResultSet rs; 
           String sqlStr;
           con = GetDBConnection.connectDB("students","root","");  //连接数据库
           if(con == null ) return;
           try{ float n = 0.02f;
                con.setAutoCommit(false);       //关闭自动提交模式
                sql = con.createStatement();
                sqlStr = "select name,height from mess where number='R1001'";
                rs = sql.executeQuery(sqlStr);
                rs.next();
                float h1 = rs.getFloat(2);
                System.out.println("事务之前"+rs.getString(1)+"身高:"+h1);
                sqlStr = "select name,height from mess where number='R1002'"; 
                rs = sql.executeQuery(sqlStr);
                rs.next();
                float h2 = rs.getFloat(2);
                System.out.println("事务之前"+rs.getString(1)+"身高:"+h2);  
                h1 = h1-n;  //R1001的height的值减少n
                h2 = h2+n;  //将减少的n增加到字段是R1002的height上
                sqlStr = "update mess set height ="+h1+" where number='R1001'";
                sql.executeUpdate(sqlStr);
                sqlStr = "update mess set height ="+h2+" where number='R1002'";
                sql.executeUpdate(sqlStr);
                //更新数据
                con.commit(); //开始事务处理,如果发生异常直接执行catch块
                con.setAutoCommit(true); //恢复自动提交模式
                String s = "select name,height from mess"+
                          " where number='R1001'or number='R1002'";
                rs = 
                sql.executeQuery(s);
                while(rs.next()){
                   System.out.println("事务后"+rs.getString(1)+
                                      "身高:"+rs.getFloat(2));  
                }
                con.close();
             }
             catch(SQLException e){
                try{ con.rollback();          //撤销事务所做的操作
                }
                catch(SQLException exp){}
             }
        }
    }
    

    这段代码的功能是进行事物处理,将mess表中number字段是R1001的height的值减少n,并将减少的n增加到字段是R1002的height上。

    • Example11_8
    import java.sql.*;
    public class Example11_8 {
       public static void main(String[] args) {
          Connection con =null;
          Statement sta = null;
          //初始化
          ResultSet rs;
          String SQL;
          try { 
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");//加载驱动
          }
          catch(Exception e) {
            System.out.println(e);  
            return;
          }
          try { 
             String uri ="jdbc:derby:students;create=true";
             con=DriverManager.getConnection(uri);  //连接数据库
             sta = con.createStatement();
          }
          catch(Exception e) {
            System.out.println(e);  
            return;
          }
          try { SQL = "create table chengji(name varchar(40),score float)";
                sta.execute(SQL);//创建表
          }
          catch(SQLException e) { 
             //System.out.println("该表已经存在"); 
          }
          SQL ="insert into chengji values"+
                "('张三', 90),('李斯', 88),('刘二', 67)";
                //向表中添加三条新的记录
          try {
             sta.execute(SQL);
             rs = sta.executeQuery("select * from chengji "); // 查询表中的记录
             while(rs.next()) {
                String name=rs.getString(1);
                System.out.print(name+"	");
                float score=rs.getFloat(2);
                System.out.println(score);
             }
             con.close();
          } 
          catch(SQLException e) {
              System.out.println(e);  
          }
      }
    }
    

    这段代码的功能是使用Derby数据库管理系统创建了名为students的数据库,并在数据库中建立了chengji表。

    第十一章的编程题目

    • test1
    import java.sql.*;
    public class test1 {
        public static void main(String args[]) {
            Connection con;
            Statement sql;
            ResultSet rs;
            con = GetDBConnection.connectDB("students","root","");//连接数据库
            if(con == null ) return;
            String sqlStr =
                    "select * from mess "+"order by birthday";
            //通过order by排序
            try {
                sql=con.createStatement();
                rs = sql.executeQuery(sqlStr);
                while(rs.next()) {
                    String number=rs.getString(1);
                    String name=rs.getString(2);
                    Date date=rs.getDate(3);
                    float height=rs.getFloat(4);
                    System.out.printf("%s	",number);
                    System.out.printf("%s	",name);
                    System.out.printf("%s	",date);
                    System.out.printf("%.2f
    ",height);
                }
                con.close();
            }
            catch(SQLException e) {
                System.out.println(e);
            }
        }
    }
    
    • GetDBConnection
    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+"?useSSL=true&characterEncoding=utf-8";
          try{  Class.forName("com.mysql.jdbc.Driver");//加载JDBC-MySQL驱动
          }
          catch(Exception e){}
          try{  
             con = DriverManager.getConnection(uri,id,p); //连接代码
          }
          catch(SQLException e){}
          return con;
       }
    }
    
    

    -Query

    import java.sql.*;
    public class Query {
       String databaseName="";    	//数据库名
       String SQL;        		//SQL语句
       String [] columnName;        //全部字段(列)名
       String [][] record;          //查询到的记录
       public Query() {
          try{  Class.forName("com.mysql.jdbc.Driver");//加载JDBC-MySQL驱动
          }
          catch(Exception e){}
       }
       public void setDatabaseName(String s) {
          databaseName=s.trim();
       }
       public void setSQL(String SQL) {
          this.SQL=SQL.trim();
       }
       public String[] getColumnName() {
           if(columnName ==null ){
               System.out.println("先查询记录");
               return null;
           }
           return columnName;
       }
       public String[][] getRecord() {
           startQuery();
           return record;
       }
       private void startQuery() { 
          Connection con;
          Statement sql;  
          ResultSet rs;
          String uri = 
         "jdbc:mysql://localhost:3306/"+
          databaseName+"?useSSL=true&characterEncoding=utf-8";
          try { 
            con=DriverManager.getConnection(uri,"root","");
            sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                    ResultSet.CONCUR_READ_ONLY);
            rs=sql.executeQuery(SQL);
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();//字段数目 
            columnName=new String[columnCount]; 
            for(int i=1;i<=columnCount;i++){
                columnName[i-1]=metaData.getColumnName(i);
            } 
            rs.last(); 
            int recordAmount =rs.getRow();  //结果集中的记录数目
            record = new String[recordAmount][columnCount];
            int i=0;
            rs.beforeFirst();
            while(rs.next()) { 
              for(int j=1;j<=columnCount;j++){
                 record[i][j-1]=rs.getString(j); //第i条记录,放入二维数组的第i行
              }
              i++;
            }
            con.close();
          }
          catch(SQLException e) {
            System.out.println("请输入正确的表名"+e);
          }
       }    
    }
    
    • test2
    import javax.management.Query;
    import javax.swing.*;
    public class test2 {
        public static void main (String args[]) {
            String [] tableHead;
            String [] content;
            JTable table;
            JFrame win= new JFrame();
            Query findRecord = new Query();
            findRecord.setDatabaseName(args[0]);
            findRecord.setSQL("select * from "+args[1]);
            content = findRecord.getRecord();
            tableHead=findRecord.getColumnName();
            table = new JTable(content,tableHead);
            win.add(new JScrollPane(table));
            win.setBounds(12,100,400,200);
            win.setVisible(true);
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    
  • 相关阅读:
    记录下我的阿里云centos服务器之路
    git-ftp 用git管理ftp空间
    标准插件写法
    函数防抖 主要用于限制高频触发事件函数的执行间隔
    js 各进制前缀 及 转换
    微信 小程序 canvas
    微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题
    canvas画布在主流浏览器中的尺寸限制
    js的一些坑,持续增加,学习js应该注意的问题
    js => ES6一个新的函数写法
  • 原文地址:https://www.cnblogs.com/brs666/p/8886745.html
Copyright © 2011-2022 走看看