當前位置:首頁 » 數據倉庫 » 資料庫resultset
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫resultset

發布時間: 2023-03-30 09:19:02

㈠ 為什麼在查詢資料庫得到結果是不能用LIST直接接受而是要用ResultSet現接受

可以這么理解,ResultSet是包含資料庫連接的,在得到ResultSet以後其實裡面並沒有數據,而只是返回了指向數據的指針,這樣的話性能上相當於多了一級緩存,當你用next()方法移動指針的時候才開始讀,只需要取你需要的數據,而不用把所有數據都一次性裝入list里。
上面只是一個方面,另一方面,除了基本的ResultSet用法,在查詢語句滿足一定條件的情況下ResultSet還可以直接更前宴新資料庫里的數據慧如銀,而直接返回list是做不到的。
所以可以看出返回ResultSet比list更加靈活,作為一個底層的方法靈活性是很重要的,如果不需要用到這么多的功能,程序員可以橡缺自己封裝一層返回list也很簡單,這也是java的優點啊

㈡ ResultSet怎麼獲取資料庫中的最後一行記錄的第一個欄位

獲得ResultSet的記錄個數:
因為ResultSet沒有方法可直接得消譽中到虛手記錄數,只有另想方法,可採用拿山如下方法:
Statement stmt = db.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql);
rs.last();//移到最後一行
int count = rs.getRow();
rs.beforeFirst();//移到初始位置

㈢ 如何獲取ResultSet的行數和列數

當我們執行資料庫查詢返回一個ResultSet的時候,很多情況下我們需要知道這個ResultSet的大小,即它的行數和列數。我們知道它的列數可以通過resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API沒有提供直接訪問ResultSet行數的介面。
這個時候,有三個辦法可以解決:
1.改用select count語句,然後直接從ResultSet裡面獲取結果:try{Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select count(*) as rowCount from tableName");
resultSet.next();introwCount = resultSet.getInt("rowCount");}catch(Exception e) {//TODO: handle exception
e.printStackTrace();}但慶斗是,我們執行資料庫查詢不光要知道結果的行數,往往接下來還要用到查詢結果。如果用此方法,還需要再執行一次select語句,才能得到想要的結果集,這樣,就多了一次資料庫查詢,大大降低了執行速度。
2.遍歷Resultset,用一個變數記錄行數。代碼如下:intcount = 0;try{while(resultSet.next()){
count = count + 1;}}catch(SQLException e1) {//TODO Auto-generated catch block
e1.printStackTrace();}這樣獲取的count值就是結果集的行數。然而,這種方法同第一種方法的問題一樣,不能再使用結果集了。因為這時候指針已經移動到結果集的外面了,不再指向任何記錄。
3.知道了第二種方法中問題的原因,我們就知道如何更好地解決這個問題了。第二種方法的問題在於返回的結果集中的指針不能自由移動,幸好java為我們提供了選擇,可以讓我們創建指針可以自由移動的結果集,所需要做的只有一件事,就是在創建Statement的時候,加上兩個參數:try{//Statement statement = connection.createStatement();
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = statement.executeQuery("select * from " + tableName);}catch(Exception e) {//TODO: handle exception
e.printStackTrace();}這樣獲得的結果集,指針就可以譽頌磨在其中自由移動。然後,就可以用如下方法獲取結果集的行數:introwCount = 0;try{resultSet.last();
rowCount = resultSet.getRow();}catch(Exception e) {//TODO: handle exception
e.printStackTrace();}其中resultSet.last()就是將指針移動到結果集的最後一條記錄;然後用resultSet.getRow()獲取指針當前所在的行號(從1開始)
如果接下來你還要使用結果集,別忘了將指針移到第一行:
resultSet.first();
既然結果集是可滾動的,當然可以用absolute()方法訪問指定行櫻備號的記錄:
其中row參數可正可負,具體含義查一下ResultSet的absolute()方法就知道了。

㈣ java資料庫操作,老是提示ResultSet已關閉

在默認情況下,同一時間每個
Statement
對象在只能打開一個
ResultSet
對象。因此,如果讀取一個
ResultSet
對象與讀取另一個交叉,則這兩個對象必須是由不同的
Statement
對象生成的。如果存在某個語句的打開的當前
ResultSet
對象,則
Statement
介面中的所有執行方法都會隱式關閉它。
你的delRecord方法里,rs開始由executeQuery得到,然後在while循環內,又執行了executeUpdate,所以rs被關閉,在執行rs.isAfterLast()時出現異常。。
rs=sql.executeQuery("select
*
from
message");
while(rs.next()){
if(this.number.equals(rs.getString(1).trim()))
{
sql.executeUpdate("delete
from
message
where
number='"+this.number+"'");
break;
}
}

㈤ 請教高手關於資料庫中用盡的ResultSet的問題:

用Statement st=conn.createStatement();的話
默認是與Statement st=conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

如果想要用rs.last()等方法的話,得設置ResultSet為允許滾脊早動(scrollable),即:
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

當然,也可以用:
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

TYPE_SCROLL_INSENSITIVE 和 TYPE_SCROLL_SENSITIVE的鎮禪區別是:
前者不會理會其他程序對ResultSet所做的變動,而櫻旅雀後者會實時更新其他程序造成的ResultSet變動

㈥ java資料庫操作,老是提示ResultSet已關閉

/*
* 直接給你寫了一個工具類,拿去用就行了
* */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Database {

private static Connection conn;
private static Statement stm;
private static ResultSet rs;

private static final String url = "jdbc:sqlserver://127.0.0.1:1433;Database=test";
private static String user = "test";
private static String password = "123456";

public static Connection getConnection() throws SQLException {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return DriverManager.getConnection(url, user, password);
}

public static Statement getStatement() throws SQLException{
conn = getConnection();
stm = conn.createStatement();
return stm;
}

public static ResultSet executeQuery(String sql) throws SQLException{
rs = getStatement().executeQuery(sql);
return rs;
}

public static ResultSet executeQueryById(String id) throws SQLException{
String sql = "select * from message where number=";
rs = getStatement().executeQuery(sql+id);
return rs;
}

public static void del(String id) throws SQLException{
String sql = "delete from message where number=";
getStatement().executeUpdate(sql+id);
}

public static void close(){

try {
if(conn != null) conn.close();
if(stm != null) stm.close();
if(rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
}

㈦ 如何獲取ResultSet總行數

螞滾取得ResultSet行數的方法主要有以下滑畢幾種:
1. 用ResultSet的getRow方法來取得總行數;
2. 利用循環ResultSet元素的方法取得總悶讓余行數 ResultSet rset = stmt.executeQuery(select * from table); int rowCount = 0; while(rset.next()) { ?? rowCount++;} ;
3. 利用SQL語句來取得ResultSet的總行數 ResultSet rset = stmt.executeQuery(select count(*) totalCount from yourTableName); int rowCount = 0; if(rset.next()) { ?? rowCount=rset .getInt(totalCount );}rowCount就是ResultSet的總行數。
ResultSet,資料庫結果集的數據表,通常通過執行查詢資料庫的語句生成。

㈧ 資料庫查詢 報錯 用盡的ResultSet

拋什埋啟纖彎仿么異常了 如何調用的?
是不是這旁態句有問題 strSql = comfun.getStr8859(strSql);

㈨ 在編寫訪問資料庫的JAVA程序時,ResultSet對象的作用是

ResultSet:完成了查詢結果的存儲功能,而且只能讀跡迅拆去一次,不能夠來回的滾昌慎動讀取。

返回的是一個結果集,可以通過方法next()逐一獲取從資料庫取到姿棗的值

㈩ java 資料庫resultset的問題

rs1肯定要關閉啊,你要理解rs1是個對瞎汪老象,通過=號的賦值是對陵緩象引用的賦值, 就是說 rs1和rs指向的是磨升同一塊內存區域。應該先關閉rs。 關閉rs1的時候要判斷 if(rs1 != null){rs1.close()}
------------------另外為什麼要返回ResultSet對象,在方法裡面把rs處理一下,返回map或者list,或者你自己定義的對象豈不是更好?