JDBC核心API

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 Statement Statement执行查询 创建Statement的方式:Connect...
    骇客与画家阅读 247评论 0 0
  • 一.连接池(数据源) 1.直接使用DriverManager的问题 它没有管理连接上限,并发量大时很容易导致数据库...
    smallnumber阅读 298评论 0 0
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,715评论 0 4
  • 关注我吧给我一个机会写进你心里 我是影子这里是我们的微风清酒 付出的人都抢着先认输时过境迁后享受孤独 文丨影子图丨...
    微风清酒阅读 244评论 0 16
  • 我也不知道该怎样给你惊喜,我也不知道这算不算惊喜,我也不知道你会不会喜欢… 说来也惭愧,马上快四年了,这应该是陪你...
    爆seed哥阅读 230评论 0 0