如何使用JDBC

JDBC(Java Database Connectivity)

1)下载并配置JDBC驱动

2)获得数据库连接步骤

1、准备一些参数

driver: 数据库产品专用驱动

eg. "oracle.jdbc.driver.OracleDriver"

url: 数据库的定位

eg. "jdbc:oracle:thin:@ip:port:dbName"

dbUser: 数据库用户名

dbPass: 用户密码

2、加载驱动

Class.forName(driver);

3、获得数据库连接


Connection conn = DriverManager.getConnection(url, dbUser, dbPass);


4、生成Statement


Statement stmt = conn.createStatement();


5、执行SQL语句获取结果集


String sql = "select * from emp";

ResultSet rs = stmt.executeQuery(sql);


3)ResultSet对象的结构

1、游标 通过next()方法获得,默认只能前进、不能后退

2、结果集 通过getXXX()方法获得相应列名所指定的数据

4)关闭数据库连接


finally {

    try {

        rs.close();

        stmt.close();

        conn.close();

    } catch (SQLException e) {

        e.printStackTrace();

    }

}


5)通用性的数据库连接封装

for:提供连接对象 负责关闭资源

将连接参数保存在一个单独的文件中,使用properties文件

driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@ip:port:dbName

dbUser=xxxxx

dbPass=xxxxx

6)利用DBConn工具类完成查询工作

1、导入DBConn

2、查询之前的数据库连接工作交给DBConn

3、查询结束或者查询过程中遇到异常时关闭资源的工作也交给DBConn

4、获得数据库元数据信息:

a. 列名、字段类型、总列数等


ResultSetMetaData rsmd = rs.getMetaData();

int count = rsmd.getColumnCount();

String name = rsmd.getColumnName(index);

String type = rsmd.getColumnTypeName(index);


b. 数据库产品版本、产品名等


DataBaseMetaData dbmd = conn.getMetaData();

dbmd.getDatabaseProductVersion();

dbmd.getDatabaseProductName();


 

(一) 语句对象(Statement接口)

1)Statement语句对象的执行有两种形式:

Connection conn = DriverManager.getConnection(url, dbUser, dbPass);

Statement stmt = conn.createStatement();

a.执行DQL语句        

stmt.executeQuery(sql);

b.执行DML语句

stmt.executeUpdate(sql);

2)PreparedStatement语句对象

弥补了Statement的SQL语句频繁拼接不足同时也可以防止一些简单的SQL注入隐患

String sql = "insert into ? values(?, ?, ?, ?, ?)"

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setXXX(index, value);

(二) 事务(transaction)

在数据库中,表示一组SQL语句作为一个整体执行,意味着执行的原子性,即执行的不可分割

JDBC默认自动提交事务

conn.setAutoCommit(false);  // 取消自动提交

conn.commit();        // 提交

conn.rollback();       // 回滚

(三) 批处理

stmt.addBatch();

stmt.executeBatch();

stmt.clearBatch();

 

pstmt.addBatch();

pstmt.executeBatch();

pstmt.clearBatch();

(四) 滚动结果集

stmt = conn.createStatement(); 产生的结果集对象在默认情况下

类型为TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY并发级别

 

结果集类型:

ResultSet.TYPE_FORWARD_ONLY 只进

ResultSet.TYPE_SCROLL_INSENSITIVE 滚动不敏感

ResultSet.TYPE_SCROLL_SENSITIVE 滚动敏感

ResultSet.CONCUR_READ_ONLY 并发只读

ResultSet.CONCUR_UPDATABLE 并发可更新

 

创建滚动结果集对象:

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY); 

rs = stmt.executeQuery(sql);

 

结果集滚动:

rs.next(); // 游标前进一行

rs.rs.relative(10); // 游标从当前位置起前进10行

rs.relative(-5); // 游标从当前位置起后退5行

rs.absolute(100); // 游标移动到第100行

rs.previous(); // 游标后退一行

rs.first(); // 游标移动到第一行

rs.isFirst(); // 判断游标是否在第一行

rs.last(); // 游标移动到最后一行

rs.isLast(); // 判断游标是否在最后一行

rs.getRow(); // 获得游标当前所在行的行号

(五) 利用滚动结果集进行分页查询(缓存分页)

使用于对少量数据进行分页,当数据量过大会造成内存溢出

分页参数:

1)当前页数 int page = ?

2)每页记录数 int pageSize = ?

3)页起始位置 int begin = (page - 1) * pageSize + 1;

 

(六) 基于查询的分页(常用的方法)

1)当前页数 int page = ?

2)每页记录数 int pageSize = ?

3)页起始位置 int begin = (page - 1) * pageSize + 1;

4)页结束位置 int end = begin + pageSize - 1;

你可能感兴趣的:(如何使用JDBC)