JDBC学习总结(三)

1、ResultSet光标控制 
   在创建Statement或PreparedStatement时使用的是Connection的无参数createStatement()方法或preparedStatement()方法。这样获取到的Statement或PreparedStatement对象在执行SQL后所得到的ResultSet只能使用next()方法来逐条取得查询到的每条结果记录。
    在建立Statement对象时,是可以指定结果集类型的:
        · ResultSet.TYPE_FORWARD_ONLY:只能前进的结果集。即结果集ResultSet中的光标只能向前移动(只能调用它的next方法),每移动一次可获取一条结果记录。(默认)
        · ResultSet.TYPE_SCROLL_INSENSITIVE:可滚动的结果集,但其中的数据不受其他会话中用户对数据库更改的影响。
        · ResultSet.TYPE_SCROLL_SENSITIVE:可滚动的结果集,当其他会话中用户更改数据库表的数据时,这个结果集的数据也会同步改变。
    在指定了结果集的类型时,也需要同时指定结果集的并发策略,可以指定的类型如下:
        · ResultSet.CONCUR_READ_ONLY:只读的结果集。结果集中的数据是只读的,不能修改。(默认)
        · ResultSet.CONCUR_UPDATEBLE:可修改的结果集。结果集中的数据可以修改,修改后会同步到数据库中。
package com.yyq.resultset;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * Created by gao on 16-4-13.
 */
public class ResultSetTest {
    public static void testPager(int firstResult, int maxResults) {
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String sql = "select id,name,score,class from student";
        try {
            //可滚动的,只读的结果集
            pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = pstmt.executeQuery();
            //光标移到最后一行
            rs.absolute(-1); //rs.last();
            //获取总记录数
            int count = rs.getRow();
            System.out.println("Recorder SUM:" + count);
            //光标移到指定行的前一行
            rs.absolute(firstResult - 1);
            for (int i = 0; i < maxResults; i++) {
                if (rs.next()) {
                    System.out.println(rs.getInt(1) + ", " + rs.getString(2) + ", " + rs.getString(4) + ", " + rs.getInt(3));
                } else {
                    break;
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            CloseFactory.close(pstmt, conn);
        }
    }
    public static void main(String[] args) {
        ResultSetTest.testPager(6, 12);
    }
}
 
2、ResultSetMetaData结果集元数据
    ResultSetMetaData表示的是所查询到的数据背后的数据描述——如表名称、列名称、列类型等。ResultSetMetaData提供了很多的方法,用来获取查询到的数据的描述数据。
package com.yyq.resultset;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import java.sql.*;
/**
 * Created by gao on 16-4-13.
 */
public class ResultSetMetaDataTest {
    public static void test() {
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String sql = "select * from student";
        try {
            //可滚动的,只读的结果集
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            //在结果集上获取元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            int count = rsmd.getColumnCount(); //获取总列(字段)数
            System.out.println("ColumnCount:" + count);
            for (int i = 1; i <= count; i++) {
                System.out.println("No:" + i);
                System.out.println("Catalog Name:" + rsmd.getCatalogName(i));
                System.out.println("Data Type Class:" + rsmd.getColumnClassName(i));
                System.out.println("ColumnDisplaySize:" + rsmd.getColumnDisplaySize(i));
                System.out.println("ColumnLabel:" + rsmd.getColumnLabel(i));
                System.out.println("Column Type:" + rsmd.getColumnType(i));
                System.out.println("Column Type Name:" + rsmd.getColumnTypeName(i));
                System.out.println("Precision:" + rsmd.getPrecision(i));
                System.out.println("Scale"+rsmd.getScale(i));
                System.out.println("SchemaName:"+rsmd.getSchemaName(i));
                System.out.println("Table Name:"+rsmd.getTableName(i));
                System.out.println("IsAutoIncrement:"+rsmd.isAutoIncrement(i));
                System.out.println("IsCurrency:"+rsmd.isCurrency(i));
                System.out.println("IsNullable:"+rsmd.isNullable(i));
                System.out.println("IsReadOnly:"+rsmd.isReadOnly(i));
                System.out.println("isSearchable:"+rsmd.isSearchable(i));
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            CloseFactory.close(pstmt, conn);
        }
    }
    public static void main(String[] args) {
        ResultSetMetaDataTest.test();
    }
}

 

posted @ 2016-04-13 15:29  我是一名老菜鸟  阅读(446)  评论(0编辑  收藏  举报