java資料庫查詢,java資料庫查詢顯示日曆

本文目錄一覽:

用JAVA如何來查詢資料庫裡面相關的數據

你的意思就是根據id

找數據本身以及他的葉子節點。

假設你的表叫location

rs

:

ResultSet

stmt:

Statement

public

ResultSet

getLocation(int

id)

{

String

sql

=

“select

id,

name,

pid

from

location

where

id

=

+

id

+

“or

pid

=

+

id;

rs

=

stmt.executeQuery(sql);

}

java 資料庫查詢某一條記錄

1.可以用離線查詢,就是先把數據都取出來,再用list操作。

2.實時查詢,每次查詢5條記錄,即第一條,下一條,當前記錄,前一條,最後一條。這樣就有了每條記錄的id號,再提交按鈕的是後直接用java查詢,重複即可。

如何用Java實現資料庫查詢

import java.sql.*;

public class MSSQLText

{

public static void main(String args[])

{

String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind”;

String user=”sa”;//這裡替換成你自已的資料庫用戶名

String password=”sa”;//這裡替換成你自已的資料庫用戶密碼

String sqlStr=”select CustomerID, CompanyName, ContactName from Customers”;

try

{ //這裡的異常處理語句是必需的.否則不能通過編譯!

Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

System.out.println(“類實例化成功!”);

Connection con = DriverManager.getConnection(url,user,password);

System.out.println(“創建連接對像成功!”);

Statement st = con.createStatement();

System.out.println(“創建Statement成功!”);

ResultSet rs = st.executeQuery(sqlStr);

System.out.println(“操作數據表成功!”);

System.out.println(“—————-!”);

while(rs.next())

{

System.out.print(rs.getString(“CustomerID”) + ” “);

System.out.print(rs.getString(“CompanyName”) + ” “);

System.out.println(rs.getString(“ContactName”));

}

rs.close();

st.close();

con.close();

}

catch(Exception err){

err.printStackTrace(System.out);

}

}

}

Java中的大量數據查詢

問題描述 在通常的三層構架下 客戶通過Browser請求Web伺服器查詢資料庫 而查詢結果是上千條甚至是上百萬條記錄 要求查詢結果傳送到客戶端瀏覽器並分頁顯示

考慮因素

Web伺服器的資源消耗 包括 內存(用來存儲查詢結果) 資料庫相關資源(資料庫連接對象 ResultSet對象等等)

DB伺服器資源的消耗 包括游標 會話等等

網路開銷 包括與資料庫建立會話 傳輸查詢結果等等

JDBC中的幾個重要Class:

A ResultSet object maintains a cursor pointing to its current row of data Initially the cursor is positioned before the first row The next method moves the cursor to the next row and because it returns false when there are no more rows in the ResultSet object it can be used in a while loop to iterate through the result set

ResultSet是直接在資料庫上建立游標 然後通過ResultSet的行位置定位介面來獲得指定行位置的記錄 當用戶通過get方法獲取具體紀錄的內容時 ResultSet才從資料庫把所需數據讀到客戶端

Oracle的ResultSet實現似乎會在本地緩存用戶讀取過的數據 導致內存消耗會隨讀取數據的增加而增加 這樣 如果一次查詢並讀取海量數據 即使讀出數據後馬上丟棄(比如直接寫入文件) 內存消耗也會隨查詢結果的增加而遞增

The RowSet interface extends the standard java sql ResultSet interface A RowSet object may make a connection with a data source and maintain that connection throughout its life cycle in which case it is called a connected rowset A rowset may also make a connection with a data source get data from it and then close the connection Such a rowset is called a disconnected rowset A disconnected rowset may make changes to its data while it is disconnected and then send the changes back to the original source of the data but it must reestablish a connection to do so

RowSet是JDBC 中提供的介面 Oracle對該介面有相應實現 其中很有用的是 oracle jdbc rowset OracleCachedRowSet OracleCachedRowSet實現了ResultSet中的所有方法 但與ResultSet不同的是 OracleCachedRowSet中的數據在Connection關閉後仍然有效

解決方案一 直接使用ResultSet來處理

從ResultSet中將查詢結果讀入collection 緩存在HttpSession或有狀態bean中 翻頁的時候從緩存中取出一頁數據顯示 這種方法有兩個主要的缺點 一是用戶可能看到的是過期數據 二是如果數據量非常大時第一次查詢遍歷結果集會耗費很長時間 並且緩存的數據也會佔用大量內存 效率明顯下降

對上述方法的一種改進是當用戶第一請求數據查詢時 就執行SQL語句查詢 獲得的ResultSet對象及其要使用的連接對象都保存到其對應的會話對象中 以後的分頁查詢都通過第一次執行SQL獲得的ResultSet對象定位取得指定頁的記錄(使用rs last();rs getRow()獲得總計錄條數 使用rs absolute()定位到本頁起始記錄) 最後在用戶不再進行分頁查詢時或會話關閉時 釋放資料庫連接和ResultSet對象等資料庫訪問資源 每次翻頁都只從ResultSet中取出一頁數據 這種方式在某些資料庫(如oracle)的JDBC實現中差不多也是回緩存所有記錄而佔用大量內存 同時速度也非常慢

在用例分頁查詢的整個會話期間 一個用戶的分頁查詢就要佔用一個資料庫連接對象和結果集的游標 這種方式對資料庫的訪問資源佔用比較大 並且其利用率不是很高

優點 減少了資料庫連接對象的多次分配獲取 減少了對資料庫的SQL查詢執行

缺點 佔用資料庫訪問資源-資料庫連接對象 並佔用了資料庫上的資源-游標 會消耗大量內存

解決方案二 定位行集SQL查詢

使用資料庫產品提供的對查詢的結果集可定位行範圍的SQL介面技術 在用戶的分頁面查詢請求中 每次可取得查詢請求的行範圍的參數 然後使用這些參數生產取得指定行範圍的的SQL查詢語句 然後每次請求獲得一個資料庫連接對象並執行SQL查詢 把查詢的結果返回給用戶 最後釋放說有的資料庫訪問資源

這種方式需要每次請求時都要執行資料庫的SQL查詢語句 對資料庫的訪問資源是使用完就立即釋放 不白白佔用資料庫訪問資源 對特定(提供了對查詢結果集可定位功能的)的資料庫產品 如 Oracle(rowid或rownum ) DB (rowid或rownum ()) PostgreSQL(LIMIT 和 OFFSET) mySQL(Limit)等 (MS SQL Server 沒有提供此技術 )

下面是在oracle下的查詢語句示例

SELECT * FROM ( SELECT row_ * rownum rownum_ FROM ( ) row_ WHERE rownum = {pageNumber*rowsPerPage}) WHERE rownum_ {(pageNumber )*rowsPerPage}

優點 對資料庫的訪問資源(資料庫連接對象 資料庫游標等)沒有浪費 這些資源的充分重複的利用

lishixinzhi/Article/program/Java/hx/201311/25890

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304512.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:05
下一篇 2025-01-01 11:05

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論