① JDBC中的幾種結果集ResultSet,RowSet求解
獲得可滾動的結果集:
Statement stat = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);獲得可更新的結果集:
Statement stat = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATE);ResultSet中的Type取值:
TYPE_FORWARD_ONLY 不可滾動
TYPE_SCROLL_INSENSITIVE 結果集可滾動,但對資料庫變化不敏感
TYPE_SCROLL_SENSITIVE 結果集可滾動,但對資料庫變化敏感
ResultSet中的Concurrency取值:
CONCUR_READ_ONLY 結果集不能用於更新資料庫
CONCUR_UPDATEABLE 結果集可以用於更新資料庫
元數據的概念
通過java.sql.DatabaseMetaData可以獲取資料庫結構和表的詳細信息。
可滾動的結果集雖然強,但交換過程,必須始終與資料庫保持連接。如果一個操作要持續很久,則佔用了寶貴的資料庫連接資源。這時可以考慮使用行集,即RowSet。
RowSet繼承自ResultSet,但不必始終保持與資料庫的連接。
② 如何使用Java中的RowSet
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES"); CachedRowSet crs = new CachedRowSetImpl(); //也可以是WebRowSetImpl,FilteredRowSetImpl,JoinRowSetImpl,因為他們均繼承自CachedRowSetImpl crs.populate(rs); 運行populate()方法後,ResultSet對象rs中的數據就被填充到crs對象中了。 (3)用XML填充 如果您打算將XML作為數據交換格式在客戶端和你的伺服器之間傳輸數據並且向實現數據離線編輯、或者向使用XML格式的數據的話,可以使用WebRowSet介面來用XML填充數據。 WebRowSet wrs = new WebRowSetImpl(); wrs.readXml(new FileReader(new File("D:\\employees.xml"))); 運行readXml()方法後,employees.xml文件的數據就被填充到wrs對象中了。employees.xml 文件的格式參見附錄。 (4)用其他方法填充 如果形用其他方式填充,比如csv、excel、text、http等格式或方法填充數據,那麼就需要自己編寫代碼實現RowSet。 4、操作RowSet中的數據及元數據 除了ResultSet提供的操作數據和元數據方法外,RowSet介面沒有提供太多額外的方法。 1)更新數據 rs.absolute(5); rs.updateInt(1, 10); rs.updateInt(2, 1000); rs.updateString(3, "John"); rs.updateRow(); (2)插入數據 rs.moveToInsertRow(); rs.updateInt(1, 10); rs.updateInt(2, 1000); rs.updateString(3, "John"); rs.insertRow(); (3)刪除數據 rs.absolute(5); rs.deleteRow(); (4)設置屬性 rs.setCommand("select id, salary, name from employees where id = ?"); rs.setInt(1, 1); rs.execute(); (5)元數據 RowSetMetaData rsmd = (RowSetMetaData)rs.getMetaData(); int count = rsmd.getColumnCount(); int type = rsmd.getColumnType(2); 5、事務與更新底層數據源 RowSet本身只代表具體數據,事務以及底層數據源的更新是與底層數據源密切相關的概念。對於JDBC數據源,相應的標准介面JdbcRowSet通過與資料庫相關的方法來來實現,如commit(),rollback()等。對於標准介面的中非連接rowset,如CachedRowSet,則在對RowSet中的數據改動後,通過運行acceptChanges()方法,在內部調用 RowSet 對象的 writer 將這些更改寫入數據源,從而將 CachedRowSet 對象中的更改傳播回底層數據源。 6、可序列化非連接RowSet 使用CachedRowSet 對象的主要原因之一是要在應用程序的不同組件之間傳遞數據。因為 CachedRowSet 對象是可序列化的,所以可使用它(舉例來說)將運行於伺服器環境的企業 JavaBeans 組件執行查詢的結果通過網路發送到運行於 web 瀏覽器的客戶端。 由於CachedRowSet 對象是非連接的,所以和具有相同數據的 ResultSet 對象相比更為簡潔。
③ java中JdbcRowSetImpl類訪問限制怎麼回事
JdbcRowSetImpl
是內部專用API,在未來發行版中可能會刪除,所以使用它會出現警告,不過在保證其餘正確的情況下可以繼續運行程序,程序不會報錯誤的!
④ 為什麼用CachedRowSet的acceptchange()方法會提示無法確認表名
要不把這句String sql="select Book_User.* from Book_User";改成:String sql="select * from Book_User";先試試
⑤ java 使用RowSet這一套東西後,資料庫連接怎麼管理
需要自己管理,自己編寫代碼進行連接池管理。不過,現在還會有人會用rowset這一套嗎?最起碼也會用諸如spring之類的資料庫管理框架吧。
⑥ java使用CachedRowSet 進行離線操作
import java.sql.*;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.util.*;
public class try_0822 {
public static void main(String[] args) {
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn; conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/tw","root","123");
System.out.println("資料庫鏈接成功");
PreparedStatement statl;
String sql="insert into tt values (?,?)";
statl=conn.prepareStatement(sql);
statl.setString(1,"fd");
statl.setString(2,"fdf");
int x=statl.executeUpdate();
}
catch(SQLException SQLe){
System.out.println("資料庫錯誤!");
}
catch(Exception h){}
// TODO, add your application code
// System.out.println("Hello World!");
}
}
上面的123是你自己的密碼,我這里有個表叫做tt,根據自己的改變吧
⑦ Java程序進行編譯的時候。提示找不到符號 類:cachedrowsetimpl。
樓主,你有使用CachedRowSetlmpl但沒見有CachedRowSetlmpl的類的定義