JDBC核心API

作者: 程序员必修课 | 来源:发表于2018-01-18 16:26 被阅读0次

    Statement

    statement执行查询

    创建Statement方式:

    Connection.createStatement();
    

    执行INSERT,UPDATE和DELETE:

    Statement.executeUpdate(sql);
    

    通常执行DDL

    执行SELECT:

    Statement.executeQuery(sql);
    

    通常执行DML

    PreparedStatement

    开发中最常用的是PreparedStatement

    Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句。

    Statement每执行一次都要传入SQL语句编译一次,效率较差。

    PreparedStatement是接口,继承自Statement。

    SQL语句提前编译,executeQuery和executeUpdate不需要传参。可以有一个或多个IN参数:
    IN参数的值在SQL语句创建时未被指定,该语句为每个IN参数保留一个问号作为占位符,每个问号的值必须在语句执行之前,通过适当的setInt活setString方法提供。

    SQL Injection

    对JDBC,SQL注入攻击只对Statement有效,对PreparedStatement无效,因为PreparedStatement不允许在插入参数时改变SQL语句的逻辑结构

    ResultSetMetaData

    数据结果集的元数据,和查询出来的数据集相关,从结果集中获取

    ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
    
    int columnCount = resultSetMetaData.getColumnCount();
    
    String columnName = null;
    
    for (int i = 1; i <= columnCount; i++) {
        columnName = resultSetMetaData.getColumnName(i);
        System.out.println("columnName = " + columnName);
    }
    

    可滚动结果集

    常用的ResultSet,初始指针在第一行之前,只能使用next()方法将指针向后移动,不能反向。可滚动结果的意味着,指针可以在结果集中任意移动。
    会发生大量的IO,性能差,所以不常用。

    创建方法如下:

    Statement stmt = conn.createStatement(type,concurrency);
    PreparedStatement stmt = conn.prepareStatement(sql, type, concurrency)
    type取值:
    TYPE_FORWARD_ONLY:只能向前移动,默认参数 
    TYPE_SCROLL_INSENSITIVE:可滚动,不感知数据变化
    TYPE_SCROLL_SENSITIVE:可滚动,感知数据变化
    concurrency 取值:
    CONCUR_READ_ONLY:只读
    CONCUR_UPDATABLE:可更新
    

    相关文章

      网友评论

        本文标题:JDBC核心API

        本文链接:https://www.haomeiwen.com/subject/ruuwoxtx.html