课下作业3

课下作业3


课上知识点总结:

  • 参考老师给出的数据库教程完成数据库的链接以及环境配置;
  • 参照课本327至332完成课上作业1;

课上内容补做:

  • Example11—1的补做:

代码分析:

  • 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\t",number);
             System.out.printf("%s\t",name);
             System.out.printf("%s\t",date);
             System.out.printf("%.2f\n",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\t",number);
             System.out.printf("%s\t",name);
             System.out.printf("%s\t",date);
             System.out.printf("%.2f\n",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\t",number);
             System.out.printf("%s\t",name);
             System.out.printf("%s\t",date);
             System.out.printf("%.2f\n",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\t",number);
             System.out.printf("%s\t",name);
             System.out.printf("%s\t",date);
             System.out.printf("%.2f\n",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\t",number);
             System.out.printf("%s\t",name);
             System.out.printf("%s\t",date);
             System.out.printf("%.2f\n",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+"\t");
            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\t",number);
                System.out.printf("%s\t",name);
                System.out.printf("%s\t",date);
                System.out.printf("%.2f\n",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);
    }
}

原文地址:https://www.cnblogs.com/nmsl123/p/8900506.html

时间: 2024-11-08 08:59:38

课下作业3的相关文章

20155317 第八周课下作业(1)

20155317 第八周课下作业(1) 4.47: 冒泡排序实现: X86-64汇编: Y86-64汇编 4.48 实现冒泡排序,要求不使用跳转,且最多使用3次条件传送. X86-64汇编: y86汇编: 4.49 实现冒泡排序,要求不使用跳转,且最多使用1次条件传送. X86-64汇编: y86汇编

2017-2018-1 20155318 《信息安全系统设计基础》第十周课上测试及课下作业

2017-2018-1 20155318 <信息安全系统设计基础>第十周课上测试及课下作业 课上测试 解析:填充消除了冲突不命中,对于x和y数组,只有在引用第0个和第4个元素的时候发生不命中.因而命中率为75%. 解析:高速缓存容量为2048,高速缓存结构为(( 32 ),8,8,32) 解析:不同层之间是以块为大小传输单元在层与层之间复制,空缓存的不命中叫强制性不命中或冷不命中 解析:存储器层次结构的每一层都缓存来自较低一层的数据.缓存存储器是分块的,数据总是以块为基本单位在每一层之间传递,

2017-2018-1 20155330 《信息安全系统设计基础》课堂测试&amp;课下作业

2017-2018-1 20155330 <信息安全系统设计基础>课堂测试&课下作业 stat命令的实现-mysate 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云链接 测试代码,mystat 与stat(1)对比,提交截图 STAT(1)学习 使用man 1 stat命令查看 使用man -k stat | grep 2查找相关函数 man 2 stat查看stat函数 产品

20155332 补交ch12课下作业

20155332 补交ch12课下作业 课下测试提交晚了,我课后补做了一遍,答对13题,答错3题. 试题内容如下所示: 课本内容 1.并发(Concurrency) 访问慢I/O设备:就像当应用程序等待I/O中的数据时内核会切换运行其他进程一样,我们的应用也可以用类似的方式,将I/O请求与其他工作重叠从而挖掘并发的潜能. 推迟工作而减少延迟:我们可以推迟一些耗时工作稍后执行,例如内存分配器不在free时整理碎片,而是将这些琐屑的工作推迟到一个稍后执行的独立"逻辑流"(logical f

# 20155337 2017-2018 1 课上测试、课下作业、实验

20155337 2017-2018 1 课上测试.课下作业.实验 第一周 学习总结 第二周 课堂实践 第三周 学习总结 第四周 学习总结+myod 第五周 学习总结 课堂实践 第六周 学习总结 实验一 第七周 学习总结 实验二 第八周 加分项目pwd 第九周 学习总结 第十周 实验三 第十一周 学习总结

2018.3.8课下作业

2018.3.8课下作业 相关知识点的总结 编写代码 mkdir用于新建文件夹 vi用于编写代码 esc:wq结束编写 上传码云 git add+文件名 git commit -m "说明" git push -f origin master pakeage注意 javac src/Hello.java -d bin编写至bin文件夹 java -cp bin is5227.Hello在bin文件夹中编译 课上内容的补做 作业:p14 结果截图 代码的功能:规定数的求和 作业:带包的代

20165331 课下作业

20165331 课下作业 代码运行效果截图 P14从1加到20165331 P16(1)Person.java (2)2个.class文件,分别为Person.class和Xiti.class (3)只有Xiti.class可以运行 原文地址:https://www.cnblogs.com/violence/p/8546770.html

课下作业(第一周)

课下作业(第一周) 一.相关知识点总结 (一).教材代码完成情况测试P14(相关知识点:运行第一章所有代码并截图) (二).带包的代码编译运行测试 在Ubuntu或Windows 命令行中,建如下目录结构(参考附图) 2016XXXX(学号) src Hello.java bin Hello.java的内容见附件 package isxxxx; (xxxx替换为你的四位学号) 编译运行Hello.java ,提交运行结果截图,要全屏 课上要git add ; git commit ;课下把代码g

课下作业2

课下作业(选做) 课上知识点总结: (详情请戳娄老师给出的使用JDB调试Java程序.) 输入jdb -classpath .:./bin SumofRecur 3方可进入JDB调试(3为函数的输入值): 进入函数不能使用next,要使用step: 想观察某个值,可使用print 你想观察的值语句: 课上内容补做: 首先是递归循环部分,我发现自己并不是从命令行输入,于是在此改了一下: 其次是jdb命令的补做: 原文地址:https://www.cnblogs.com/nmsl123/p/8640

20165306 第四周课下作业

第四周课下作业 一.相关知识点总结 Ctrl+Shift+T 打开三个标签页,Alt+1进入第一个标签页 vim HelloJDB.java编辑调试示例代码 javac -g -d bin src/HelloJDB.java编译,-g 参数为了产生各种调试信息,一定要加上 jdb -classpath .:./bin HelloJDB 调试 stop in方法断点,stop at行断点 run运行,locals查看变量 print i或eval i查看变量i的值 list查看运行到了源代码的什么