JDBC核心类

一、Driver接口

1、说明

 装载驱动程序的管理器,创建和管理应用程序与驱动程序之间的结构

2、常用API

  1. 装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");

  2. 装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

二、Connection接口

1、说明

​ Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定义的数据库Connection连接上。

2、常用API

  1. createStatement()

    创建向数据库发送sql的statement对象。
    
  2. prepareStatement(sql)

    创建向数据库发送预编译sql的PrepareSatement对象。
    
  3. prepareCall(sql)

    创建执行存储过程的callableStatement对象。
    
  4. setAutoCommit(boolean autoCommit)

    设置事务是否自动提交。
    
  5. commit()

    在链接上提交事务。
    
  6. rollback()

    在此链接上回滚事务。
    

三、Statement接口

1、说明

​ 用于执行静态SQL语句并返回它所生成结果的对象

2、Statement类:

  1. Statement

    由createStatement创建,用于发送简单的静态SQL语句(不带参数)。
    
  2. PreparedStatement

    继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的动态SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,一般都使用PreparedStatement
    

    笔记

    // ? 表示占位符 ,相当于 《 '值' 》,这样就能解决sql注入问题
    String sql = "select * from tb_user where username = ? and password = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1,username);
    ps.setString(2,password);
    ResultSet rs = ps.executeQuery();
    

  3. CallableStatement

    继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。
    

3、常用API

方法 说明
execute(String sql) 运行语句,返回是否有结果集
executeQuery(String sql) 运行select语句,返回ResultSet结果集。
executeUpdate(String sql) 运行insert/update/delete操作,返回更新的行数。
addBatch() 将同种操作的sql语句添加到一起(批量处理)
addBatch(String sql) 把多条sql语句放到一个批处理中。
executeBatch() 执行批量处理的多条sql语句

笔记示例1

List<User> users = new ArrayList<>();
...
 /*
 * 实现批量插入的时候  尤其oracle批量处理效率很高
 * mysql  效率不明显
 */
String sql = "INSERT  INTO  TB_USER  (USER_ID, USERNAME,PASSWORD) VALUES (SEQ_TBUSER_USERID.NEXTVAL,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
//创建PreparedStatement对象要传入sql参数,说明批量处理时添加的只能是同种操作的sql语句
for (User user : users) {
  ps.setString(1, user.getUserName());
  ps.setString(2, user.getPassword());
  ps.addBatch();//添加到批量处理
}
int[] ints = ps.executeBatch();//执行批量处理的多条sql语句

示例2

String sql = "INSERT  INTO  TB_USER  (USER_ID, USERNAME,PASSWORD) VALUES (SEQ_TBUSER_USERID.NEXTVAL,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "泷泽萝拉");
ps.setString(2, "123");
ps.addBatch();

ps.setString(1, "小泽玛利亚");
ps.setString(2, "123");
ps.addBatch();
int[] ints = ps.executeBatch();

示例3


//oracle数据库不支持的特性
//动态sql操作跟静态sql批量操作
String sql = "insert into TB_USER (USER_ID, USERNAME, PASSWORD) values (?,?,?) ";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,1);
ps.setString(2,"lrk");
ps.setString(3,"123");
ps.addBatch();//添加动态sql语句(有参数即占位符?)
String sql2 = "insert into TB_USER (USER_ID, USERNAME, PASSWORD) values (2, \"xiaoming\",\"123456\") ";
ps.addBatch(sql2);//添加静态sql语句,(没有占位符?参数)
int[] ints = ps.executeBatch();
System.out.println(ints.length);

说明:oracle数据库不支持,MySql是否支持待验证,暂且没试不知道@TODO

...

四、ResultSet结果集类

1、说明

​ SELECT 语句执行完成后返回的数据结果集(包括行跟列)

2、ResultSet提供检索不同类型字段的方法

  1. getString(int index)、getString(String columnName)

    获得在数据库里是varchar(varchar2)、 char等类型的数据对象
    
  2. getFloat(int index)、getFloat(String columnName)

    获得在数据库里是Float类型的数据对象
    
  3. getDate(int index)、getDate(String columnName)

    获得在数据库里是Date类型的数据
    
  4. getBoolean(int index)、getBoolean(String columnName)

    获得在数据库里是Boolean类型的数据。
    
  5. getObject(int index)、getObject(String columnName)

    获取在数据库里任意类型的数据
    

3、ResultSet还提供了对结果集进行滚动的方法

方法 说明
next() 移动到下一行
Previous() 移动到前一行
absolute(int row) 移动到指定行
beforeFirst() 移动resultSet的第一行前面
afterLast() 移动到resultSet的最后一行后面
first() 移动到第一行
last() 移动到最后
isAfterLast() 判断是否是resultSet的最后一行后面
isXxxx()

笔记

使用示例

//遍历结果集for()
PreparedStatement ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
//注意,要设置ResultSet的参数,否则默认只能.next(),不能往前滚动
ResultSet rs = ps.executeQuery();
for(rs.first();!rs.isAfterLast();rs.next()){
  String username = rs.getString("username");
}

五、DatabaseMetaData接口

1、说明

关于数据库结构,数据库系统和驱动程序等的元数据信息

2 、常用API

  1. ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types);

    获取表信息
    
  2. ResultSet getPrimaryKeys(String catalog,String schema,String table);

    获取表主键信息
    
  3. ResultSet getIndexInfo(String catalog,String schema,String table,boolean unique,boolean approximate);

    获取表索引信息
    
  4. ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern);

    获取表列信息
    

    ​....

results matching ""

    No results matching ""