20165328课上补做

一、相关知识点总结:

  • 顺序查询:即指ResultSrt对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行前面。next()方法向下移动游标,移动成功返回ture,否则返回false。
  • 条件与排序查询:
  • 一般格式:
  • select 字段 form 表名 while 条件

    (1)字段值和固定值比较,例如:

  • selet name,height form mess where name=“李四”

    (2)字段值在某个区间范围,例如:

  • select * form mess where height>1.60 and height<=1.8
    select * form mess where mess>1.7 and name !=“张山”

    (3)使用某些特殊的日期函数,如year、month、day:

  • select * form mess where year(birthday)<1980 and month(birthday)<=10
    select * form mess where year(birthday) between 1983 and 1986

二、课上作业补做截图:

三、第十一章代码分析:

  • 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);
          }
      }
    }

    该代码作用为查询student数据库中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);
          }
      }
    }

    该代码是将数据库连接的代码单独封装到一个GetDatebaseConnection类中,随机查询student数据库中mess表的两条记录

  • 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年或2001以前,月份在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上

  • example10_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数据库管理系统创建了名字是student的数据库,并在数据库中建立chengji表。

原文地址:https://www.cnblogs.com/dky20165328/p/8909180.html

时间: 2024-11-06 19:28:10

20165328课上补做的相关文章

20165204Java第四周课上补做

20165204Java第四周课上补做 反省 课下没有认真理解JDB的具体使用过程,只是在按着老师的博客一步一步进行,而没有真正搞懂这些命令行的作用是什么. 在运行在命令行中赋值的程序时没有搞懂,绕了很多弯路. 在进入方法之后,只是使用了step在一步一步地向前推进,而并未使用next,浪费了非常多的时间. 总体来说还是自己课下练习的不认真,导致了课上的不熟练,进而没有完成课上任务. 补做截图 原文地址:https://www.cnblogs.com/jph596299009/p/8643093

20165337岳源第十周课上补做

课上补做-2 要求:针对下面的Student类,使用Comparator编程完成以下功能: 在测试类StudentTest中新建学生列表,包括自己和学号前后各两名学生,共5名学生,给出运行结果(排序前,排序后) 对这5名同学分别用学号和总成绩进行增序排序,提交两个Comparator的代码 课下提交代码到码云 import java.util.Comparator; public class IDComparator implements Comparator { @Override publi

20165328 第十二周课上补做

一.补做截图: 在上课时的代码检查p300时,我的idea出现了jdk配置错误的问题,我努力了十几分钟依然没有解决,后来使用虚拟机完成了代码运行要求,但规定的20分钟时间已过,特此补上虚拟机运行截图: 原文地址:https://www.cnblogs.com/dky20165328/p/9063523.html

20165337第四周课上补做

p29页测试 JDB调试 书上的题 https://gitee.com/BESTI-IS-JAVA-2018/20165337/tree/master/src 原文地址:https://www.cnblogs.com/y963976867/p/8646979.html

第十周课下补做

20165339第十周课上测试补做 一.相关知识点 创建链表:LinkedList<String> mylist=new LinkedList<String>(); 增加节点:list.add(E obj) 删除节点:list.remove(index) 遍历链表:(迭代器)链表对象用iterator()方法获得一个Iterator对象.用get(int index)方法返回列表中的第index个对象. 排序:public static sort(List<E> lis

20165315 第二次考试课下补做

20165315 第二次考试课下补做 课上内容的补做,结果截图 参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现1!+2!+3!+... + N!的功能,N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值, 提交运行结果的截图(至少五张),注意测试正常,异常,边界情况, 比如java SumofRecur -8,java SumofRecur 0,java Sumo

20165235 第十周课下补做

20165235 祁瑛 第十周课下补做 相关知识点的总结 LinkedList<String> mylist=new LinkedList<String>()来创建一个链表. mylist.add();来添加结点. get(int index)来获取链表中第index个位置的结点的对象. public static sort(List<E>)将链表中的元素升序排列 public static binarySearch(List<T>,T key,Compar

20165308 2017-2018-2 第十周课下补做

20165308 2017-2018-2 第十周课下补做 一.教材十五章代码分析 代码分析有的是以注释的形式写出,对整个代码的理解是写在前面的 1.p442-443 Example15_1.java Cone.java 此类不关心怎么样计算面积,计算面积由后面的类完成,只需调用即可,只关心计算体积. public class Cone<E> { double height; E bottom; //用泛型类E声明对象bottom public Cone(E b) { //参数b是泛型类型 bo

20165315 第四次考试课下补做

20165315 第四次考试课下补做 一.相关知识点的总结 泛型 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构 泛型类声明 可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据 使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对"<>",而且必须要用具体的类型替换"<>"中的泛型 链表