• 数据库实践 Hw09


    1.1

    MySQL Connector/J是一个JDBC( )驱动 D

    A、
    Type 1

    B、
    Type 2

    C、
    Type 3

    D、
    Type 4

    1.2

    使用Class类的forName()加载驱动程序需要捕获( )异常。 b

    A、
    SQLException

    B、
    ClassNotFoundException

    C、
    IOException

    D、
    DBException

    1.3

    使用Connection接口的(C )方法可以建立一个PreparedStatement对象

    (5.0分)
    A、
    createPrepareStatement()

    B、
    createPreparedStatement()

    C、
    PrepareStatement()

    D、
    PreparedStatement()

    1.4

    在JDBC编程中执行下列SQL语句"SELECT id,name FROM employee",获取结果集rs的第2列数据的代码是 B

    A、
    rs.getString(1)

    B、
    rs.getString(2)

    C、
    rs.getString(name)

    D、
    rs.getString(“id”)

    1.5

    如果要创建带参数的SQL查询语句,应该使用( )对象 B

    (5.0分)
    A、
    Statement

    B、
    PreparedStatement

    C、
    PrepareStatment

    D、
    CallableStatement

    1.6

    下面描述中不属于连接池的功能的是 C
    A、
    可以缓解连接频繁的关闭和创建所造成的系统性能下降

    B、
    可以限制客户端的连接数量

    C、
    可以大幅度提高查询语句的执行效率

    D、
    可以提高系统的伸缩性

    1.7

    下面关于PreparedStatement的说法错误的是( B)

    (5.0分)
    A、
    PreparedStatement继承Statement

    B、
    PreparedStatement不能用于批量更新操作

    C、
    PreparedStatement可以防止SQL注入,更加安全

    D、
    PreparedStatement可以存储预编译的Statement,从而提升执行效率

    2.1

    加载JDBC驱动,使用Java连接university数据库,查询instructor表中salary大于70000的教师信息,按照dept_name的升序排列后用System.out.println()输出,各列数据之间用|分隔。

    ID|name|dept_name|salary

    将编写的Java类代码贴在下方输入框中。

    package test.jdbc;
    
    import java.math.BigDecimal;
    import java.sql.*;
    
    public class Exer1 {
       public static void main(String arg[]){
           try {
               Class.forName("com.mysql.cj.jdbc.Driver");
           }catch(ClassNotFoundException e){
               System.out.println("加载数据库驱动时抛出异常!");
               e.printStackTrace();
           }
           try {
    
               String url="";
               String user="root";
               String password="";
               Connection conn = DriverManager.getConnection(url,user,password);
               Statement stmt = conn.createStatement();
    
               String sql = "select ID,name,dept_name,salary from instructor where salary > 70000 order by dept_name";
               ResultSet rs = stmt.executeQuery(sql);
    
               int id;
               String name,dept_name;
               BigDecimal salary;
    
               System.out.println("id" + " | " +"name" + " | "+"dept_name"+ " | "+"salary");
               while(rs.next()){
                   id = rs.getInt(1);
                   name = rs.getString(2);
                   dept_name = rs.getString(3);
                   salary=rs.getBigDecimal(4);
                   System.out.println(id + " | " +name + " | "+dept_name+ " | "+salary);
               }
               rs.close();
               stmt.close();
               conn.close();
           } catch (SQLException ex) {
               ex.printStackTrace();
           }
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    
    import java.math.BigDecimal;
    import java.sql.*;
    
    public class Main
    {
        public static void main(String[] args) throws ClassNotFoundException, SQLException
        {
    
            //System.out.println("Hello world!");
            // 1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2。获取链接
            String url = "jdbc:mysql://127.0.0.1:3306/university?Unicode=true&character" +
                    "Encoding=utf8&useSSL=true&serverTimezone=UTC";
            String username = "root";
            String password = "";
            Connection conn = DriverManager.getConnection(url, username, password);
    
            // 3. sql sentence
            String sql = "select * from instructor where salary > 70000 order by dept_name asc;";
    
            // 4. 获取执行sql的对象
            //Statement stmt = conn.createStatement();
            PreparedStatement pstmt = conn.prepareStatement(sql);
            //pstmt.setInt(1, 3);
            //CallableStatement cstmt = conn.prepareCall(sql);
            //cstmt.setInt(1, 3);
    
            // 5.执行sql
            ResultSet rs  = pstmt.executeQuery(sql);
                //受影响的行数
            // 6。处理结果
            //System.out.println(count);
            while(rs.next())
            {
                ResultSetMetaData rsmd = rs.getMetaData();
                int col = rsmd.getColumnCount();
                for(int i = 1; i < col ; i++)
                {
                    String name = rsmd.getColumnName(i);//起始是1
                    System.out.print(rs.getString(name) + "|");
                }
                System.out.println(rs.getString(rsmd.getColumnName(col)));
            }
            // 7. 释放资源
            pstmt.close();
            conn.close();
            System.out.println("You've finished the program successfully!\n");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    2.2

    查阅资料学习JDBC CallableStatements执行存储过程的方法:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-statements-callable.html

    (1)在Univerisity中编写一个带输入参数和输出参数的存储过程demoSp,功能自定,给出存储过程定义。

    (2)编写Java代码调用存储过程,指定输入参数,获取输出参数后输出。给出调用存储过程的关键代码。

    drop procedure demoSp;
    delimiter //
    create procedure demoSp
    (
     in a varchar(5),
        out c varchar(20)
    )
    begin
        set c = (select name from instructor where id = a);
    end
    //
    delimiter ;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    import java.sql.*;
    
    public class calla {
        public static void main(String[] args) throws ClassNotFoundException, SQLException
        {
            Class.forName("com.mysql.cj.jdbc.Driver");
    
            String url = "jdbc:mysql://127.0.0.1:3306/university?Unicode=true&character" +
                    "Encoding=utf8&useSSL=true&serverTimezone=UTC";
            String username = "root";
            String password = "1234";
            Connection conn = DriverManager.getConnection(url, username, password);
    
            String sql = "call demoSp(?, ?)";
            CallableStatement cstmt = conn.prepareCall(sql);
            cstmt.setString(1, "22222");
            cstmt.registerOutParameter(2, Types.VARCHAR);
            cstmt.execute();
            String str = cstmt.getString(2);
            System.out.println(str);
            /*
            //ResultSet rs = cstmt.getResultSet();
            while(rs.next())
            {
                System.out.println(rs.getString(2));
            }
            */
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    java计算机毕业设计线上远程教学及自主学平台的设计与实现源程序+mysql+系统+lw文档+远程调试
    最全Dubbo面试题和答案详解。
    微信小程序-2
    【SkyWalking】SkyWalking是如何实现跨进程传播链路数据?
    使用Flink完成流数据统计
    激光雷达发射的PCB布局
    Docker+nginx在CVM的机器远程发布hellogin
    ONLYOFFICE 8.0:引领数字化办公新纪元
    操作系统:进程与线程(三)死锁
    turtle模块练习
  • 原文地址:https://blog.csdn.net/JamSlade/article/details/128064031