在JDBC中使用RowSet

原文地址: http://www.yiidian.com/jdbc/j...html

1 什麼是JDBC的RowSet?

與ResultSet相比,RowSet默認是可滾動、可更新、可序列化的結果集,並且做爲JavaBean使用,所以能方便的在網絡上傳輸,用於同步兩端的數據,對於離線RowSet而言,程序在建立RowSet時已經把數據從底層數據庫讀取到了內存,所以能夠充分利用計算機的內存,從而下降數據庫服務器的負載,提升程序性能。RowSet接口繼承了ResultSet接口。java

RowSet接口的實現類以下:mysql

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

2 RowSet的好處

使用RowSet的優勢以下:sql

  • RowSet擴展了ResultSet接口,所以它的功能比ResultSet更增強大。
  • RowSet對錶數據的遍歷更加靈活,可先後滾動。
  • RowSet支持緩存數據,即在Connection關閉後也可使用。
  • RowSet支持新的鏈接方式,無需Connection便可鏈接數據庫,還支持讀取XML數據源。
  • RowSet支持Filter(過濾數據)。
  • RowSet還支持表的Join操做。

3 RowSet核心代碼示例

JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("root");

rowSet.setCommand("select * from t_user");
rowSet.execute();

4 沒有事件監聽的RowSet示例

4.1 編寫測試類

NoListenerRowSetDemo:數據庫

package com.yiidian;

import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;
import java.io.*;
import java.sql.*;

/**
 * 一點教程網 - http://www.yiidian.com
 */
public class NoListenerRowSetDemo {
    public static void main(String args[])throws Exception {
        Class.forName("com.mysql.jdbc.Driver");

        JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
        rowSet.setUrl("jdbc:mysql://localhost:3306/test");
        rowSet.setUsername("root");
        rowSet.setPassword("root");

        rowSet.setCommand("select * from t_user");
        rowSet.execute();

        //移動光標,獲取記錄
        while (rowSet.next()) {
            System.out.print("編號: " + rowSet.getInt(1)+"\t");
            System.out.print("名稱: " + rowSet.getString(2)+"\t");
            System.out.print("密碼: " + rowSet.getString(3));
            System.out.println();
        }

    }
}

4.2 運行測試

file

5 有事件監聽的RowSet示例

要使用JdbcRowSet執行事件處理,您須要在JdbcRowSet的addRowSetListener() 方法中添加RowSetListener的實例。segmentfault

RowSetListener接口提供3種必須實現的方法:緩存

public void cursorMoved(RowSetEvent event);
public void rowChanged(RowSetEvent event);
public void rowSetChanged(RowSetEvent event);

5.1 編寫測試類

HasListenerRowSetDemo:服務器

package com.yiidian;

import javax.sql.RowSetEvent;
import javax.sql.RowSetListener;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;
import java.io.*;
import java.sql.*;

/**
 * 一點教程網 - http://www.yiidian.com
 */
public class HasListenerRowSetDemo {
    public static void main(String args[])throws Exception {
        Class.forName("com.mysql.jdbc.Driver");

        JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
        rowSet.setUrl("jdbc:mysql://localhost:3306/test");
        rowSet.setUsername("root");
        rowSet.setPassword("root");

        rowSet.setCommand("select * from t_user");
        rowSet.execute();

        //給RowSet添加事件監聽處理
        rowSet.addRowSetListener(new MyListener());

        //移動光標,獲取記錄
        while (rowSet.next()) {
            System.out.print("編號: " + rowSet.getInt(1)+"\t");
            System.out.print("名稱: " + rowSet.getString(2)+"\t");
            System.out.print("密碼: " + rowSet.getString(3));
            System.out.println();
        }

    }
}

//事件監聽處理類
class MyListener implements RowSetListener {
    public void cursorMoved(RowSetEvent event) {
        System.out.println("光標移動...");
    }
    public void rowChanged(RowSetEvent event) {
        System.out.println("光標改變...");
    }
    public void rowSetChanged(RowSetEvent event) {
        System.out.println("RowSet改變...");
    }
}

5.2 運行測試

file

file

歡迎關注個人公衆號::一點教程。得到獨家整理的學習資源和平常乾貨推送。
若是您對個人系列教程感興趣,也能夠關注個人網站: yiidian.com
相關文章
相關標籤/搜索