Java調用存儲過程的方法是通過調用Connection的實例方法prepareCall,prepareCall方法返回CallableStatement對象用於填充存儲過程的參數。prepareCall方法形參是調用存儲過程的sql語句,此參數的語法格式如下:
{callstoredProcereName(parameter-list)}
其中,storedProcereName是存儲過程名稱,parameter-list是存儲過程參數列表。
例如,存儲過程名為usp_test,有兩個輸入參數a,b。則調用代碼看起來如下所示:
=connection.prepareCall("{callusp_test(?,?)}");
callableStatement.setObject("a","value-1");
callableStatement.setObject("b","value-2");
callableStatement.execute();
B. JAVA 關於調用資料庫
<%
DbConnect
db
=
DbConnect.getInstance();//獲取一個連接實例
Connection
conn
=
db.getConnect();//取得一個連接
String
sql="select
*from
(select
*from
notice_hanchao
order
by
insert_time
desc)";//一個查詢字元串
PreparedStatement
ps
=
conn.prepareStatement(sql);//把查詢字元串構造成一個語句對象
ResultSet
rs
=
ps.executeQuery();//執行語句,並返回一個結果集
%>
C. java如何訪問資料庫
Java可以使用JDBC訪問資料庫,也可以使用各類ORM框架訪問資料庫,但這些框架最終還是通過JDBC訪問資料庫,它們只是封裝了資料庫操作,而使得開發者可以減少這部分消耗。因此,本文只講解JDBC訪問方式。
JDBC訪問一般分為如下流程:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url,String username,String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
•ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。
•使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1); // 此方法比較高效(列是從左到右編號的,並且從列1開始)
}
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
D. java中連接資料庫的方式,有JDBC還有什麼
這是老師發給我們的資料,共享給你:x0dx0aType 1: jdbc-odbc橋 x0dx0aJdbc-odbc 橋 是sun公司提供的,是jdk提供的的標准api. 這種類型的驅動實際是把所有 jdbc的調用傳遞給odbc ,再由odbc調用本地資料庫驅動代碼.( 本地資料庫驅動代碼是指 由資料庫廠商提供的資料庫操作二進制代碼庫,例如在oracle for windows中就是oci dll 文 件) x0dx0ax0dx0ajdbc-odbc橋|odbc|廠商DB代碼---資料庫Serverx0dx0ax0dx0a只要本地機裝有相關的odbc驅動那麼採用jdbc-odbc橋幾乎可以訪問所有的資料庫,jdbc- odbc方法對於客戶端已經具備odbc driver的應用還是可行的.x0dx0ax0dx0a但是,由於jdbc-odbc先調用 odbc再由odbc去調用本地資料庫介面訪問資料庫.所以,執行效率比較低,對於那些大數據量 存取的應用是不適合的.而且,這種方法要求客戶端必須安裝odbc 驅動,所以對於基於 internet ,intranet的應用也是不合適的.因為,你不可能要求所有客戶都能找到odbc driver. x0dx0ax0dx0a=====一般ACCESS用到的比較多,初學者用。實際項目是不用的。x0dx0ax0dx0aType 2: 本地Api驅動 x0dx0ax0dx0a本地api驅動直接把jdbc調用轉變為資料庫的標准調用再去訪問資料庫.x0dx0ax0dx0a這種方法需要本地 資料庫驅動代碼. 本地api驅動|廠商DB代碼---資料庫Server這種驅動比起jdbc-odbc橋執行效率大大提高了.但是,它仍然需要在客戶端載入資料庫廠商 提供的代碼庫.這樣就不適合基於internet的應用.並且,他的執行效率比起3,4型的jdbc驅動 還是不夠高. x0dx0ax0dx0aType3:網路協議驅動 這種驅動實際上是根據我們熟悉的三層結構建立的. jdbc先把對數局庫的訪問請求傳遞給網 絡上的中間件伺服器. 中間件伺服器再把請求翻譯為符合資料庫規范的調用,再把這種調用 傳給資料庫伺服器.如果中間件伺服器也是用java開法的,那麼在在中間層也可以使用1,2型 jdbc驅動程序作為訪問資料庫的方法. 網路協議驅動--中間件伺服器---資料庫Server x0dx0ax0dx0a由於這種驅動是基於server的.所以,它不需要在客戶端載入資料庫廠商提供的代碼庫.而且 他在執行效率和可升級性方面是比較好的.因為大部分功能實現都在server端,所以這種驅動 可以設計的很小,可以非常快速的載入到內存中. 但是,這種驅動在中間件層仍然需要有配置 其它資料庫驅動程序,並且由於多了一個中間層傳遞數據,它的執行效率還不是最好. x0dx0ax0dx0aType4 純JAVA驅動 x0dx0a這種驅動直接把jdbc調用轉換為符合相關資料庫系統規范的請求.由於4型驅動寫的應用可 以直接和資料庫伺服器通訊.這種類型的驅動完全由java實現,因此實現了平台獨立性. 本地協議驅動---------資料庫Server x0dx0ax0dx0a由於這種驅動不需要先把jdbc的調用傳給odbc或本地資料庫介面或者是中間層伺服器.所 以它的執行效率是非常高的.而且,它根本不需要在客戶端或伺服器端裝載任何的軟體或驅動. 這種驅動程序可以動態的被下載.但是對於不同的資料庫需要下載不同的驅動程序. x0dx0ax0dx0a以上對四種類型的jdbc驅動做了一個說明.那麼它們適合那種類型的應用開發呢? x0dx0ax0dx0aJdbc-odbc橋由於它的執行效率不高,更適合做為開發應用時的一種過度方案,或著對於初學 者了解jdbc編程也較適用. 對於那些需要大數據量操作的應用程序則應該考慮2,3,4型驅動.在intranet方面的應用可以 考慮2型驅動,但是由於3,4型驅動在執行效率上比2型驅動有著明顯的優勢,而且目前開發 的趨勢是使用純java.所以3,4型驅動也可以作為考慮對象. 至於基於internet方面的應用就只有考慮3,4型驅動了. 因為3型驅動可以把多種資料庫驅 動都配置在中間層伺服器.所以3型驅動最適合那種需要同時連接多個不同種類的資料庫, 並且對並發連接要求高的應用. 4型驅動則適合那些連接單一資料庫的工作組應用。x0dx0ax0dx0a現在是純java 開發,所以一般都用type4的jdbc driver。
E. 用Java怎樣訪問資料庫,用什麼代碼
1. 載入一個對應資料庫的JDBC驅動
在建立到一個資料庫的連接之前,必須先載入這個資料庫的JDBC驅動程序,載入之後此driver會自動注冊到JDBC驅動列表中。載入一個JDBC驅動有兩種方法。
a) 在命令行方式下指定驅動器或者用冒號分割驅動器列表:
具體命令如下:
C:\>java –Djdbc.drivers = com.company1.Driver:com.company2.Driver youProject
b)第二種方法,在程序中調用Class.forName()方法。推薦使用。。。。
try
{
String driverName = 「com.imaginary.sql.msql.MsqlDriver」;
Class.forName(driverName).newInstance();
}
Catch(ClassNotFoundException e1)
{
//catch could not find database driver exception.
}
2.連接到資料庫。
根據您後台待連接的資料庫不同,而有小小的差別。
a) 連接到Oracle資料庫。
Connection connection = null ;
try
{
//load the jdbc driver ;
String driverName = 「oracle.jdbc.driver.OracleDriver」;
Class.forName(driverName).newInstance();
//create a connection to the database;
String serverName = 「127.0.0.1」;
String serverPort = 「1521」;
String serverID = 「datebase1」
String userName = 「hello」;
String userPsw = 「world」;
String url = 「jdbc:oracle.thin:@」 + serverName + 「:」 + serverPort + 「:」 + serverID ;
Connection = DriverManager.getConnection(url , userName , userPsw);
}
catch(ClassNotFoundException e1)
{
//catch could not find database driver exception.
}
catch(SQLException e2)
{
//catch could not connect to the database exception.
}
b) 連接到一個SQL Server資料庫。
Connection connection = null ;
try
{
//load the jdbc driver ;
String driverName = 「com.microsoft.jdbc.sqlserver.SQLServerDriver」;
Class.forName(driverName).newInstance();
//create a connection to the database;
String serverName = 「127.0.0.1」;
String serverPort = 「1433」;
String serverID = serverName + serverPort ;
String userName = 「hello」;
String userPsw = 「world」;
String url = 「jdbc:JSQLConnect ://」 + serverID ;
Connection = DriverManager.getConnection(url , userName , userPsw);
}
catch(ClassNotFoundException e1)
{
//catch could not find database driver exception.
}
catch(SQLException e2)
{
//catch could not connect to the database exception.
}
c) 連接到一個MySQL資料庫上。。。。
Connection connection = null ;
try
{
//load the jdbc driver ;
String driverName = 「org.gjt.mm.mysql.Driver」;
Class.forName(driverName).newInstance();
//create a connection to the database;
String serverName = 「127.0.0.1」;
String serverID = 「database」;
String userName = 「hello」;
String userPsw = 「world」;
String url = 「jdbc:mysql ://」 + serverName + 「/」 + serverID ;
Connection = DriverManager.getConnection(url , userName , userPsw);
}
catch(ClassNotFoundException e1)
{
//catch could not find database driver exception.
}
catch(SQLException e2)
{
//catch could not connect to the database exception.
}
綜合上面的三種資料庫連接方式 , 其實大同小異。由於訪問不同的資料庫和所使用的資料庫驅動程序不同,所以導致代碼表面上有小小不同,但透過表面看來,內部都是
1. 載入一個特定的資料庫JDBC驅動。
2. 連接到一個資料庫。
3. 之後,就可以對一個特定的資料庫進行特定的操作了。
附上各種資料庫的JDBC驅動起可用信息網址:
http://java.sun.com/procts/jdbc
對於Oracle資料庫,請參考:
http://otn.oracle.com.software/content.html
對於MySQL資料庫,請參考:
http://mmMySQL.sourceforge.net
對於SQL Server資料庫,有很多的驅動可選,比較常用的:
http://www.microsoft.com/china/sql/downloads/2000/jdbc.asp
http://www.freetds.org
http://www.datadirect-technologies.com
F. java操作資料庫的方式有哪些
JDBC是java資料庫連接技術的簡稱,它提供了連接各種資料庫的能力,這便使程序的可維護性和可擴展性大大的提高了.JDBC連接資料庫常見的驅動方式有兩種,一種是jdbc-odbc即橋連另外一種是純java驅動.一般在做java開發的時候用第二種.so前一種我就不說了,純java驅動方式連接步驟如下:
1.先把一個jdbc的jar包導入到項目(用MyEclipse開發)的lib中.
2.代碼如下:
[c-sharp]view plain
importjava.sql.*;
/**
*連接資料庫幫助類
*@authorAdministrator
*
*/
publicclassBaseDao{
="com.microsoft.sqlserver.jdbc.SQLServerDriver";
privatestaticfinalStringURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManageSystem";
="sa";
="sa";
/**
*連接資料庫
*@return資料庫連接對象
*@throwsClassNotFoundException
*@throwsSQLException
*/
publicConnectiongetConn()throwsClassNotFoundException,SQLException{
Class.forName(DRIVER);
Connectionconn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
returnconn;
}
/**
*釋放資源
*@paramconn
*@parampstmt
*@paramrs
*@throwsSQLException
*/
publicvoidcloseAll(Connectionconn,PreparedStatementpstmt,ResultSetrs)throwsSQLException{
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
/**
*執行SQL語句,可以進行增、刪、改的操作
*@paramsql
*@return影響條數
*@throwsClassNotFoundException
*@throwsSQLException
*/
publicintexecuteSQL(Stringsql)throwsClassNotFoundException,SQLException{
Connectionconn=this.getConn();
PreparedStatementpstmt=conn.prepareStatement(sql);
intnumber=pstmt.executeUpdate();
this.closeAll(conn,pstmt,null);
returnnumber;
}
}
<Resourcename="jdbc/book"auth="Container"type="javax.sql.DataSource"
maxActive="100"maxIdle="20"maxWait="100"username="sa"password="sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;dataBaseName=book"
/>在config.xml文件中加入Resource標簽,然後對資料庫信息進行配置,當然這個資料庫指的也是sqlserver有疑問可以qq757966892聯系
packageweb.login.;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.sql.DataSource;
publicclassBaseDao{
protectedConnectionconn;
protectedPreparedStatementps;
protectedResultSetrs;
protectedStringsql;
publicConnectiongetConn(){
try{
Contextcontext=newInitialContext();
DataSourceds=(DataSource)context.lookup("java:comp/env/jdbc/user");
returnds.getConnection();
}catch(Exceptione){
e.printStackTrace();
returnnull;
}
}
publicvoidcloseAll(Connectionconn,PreparedStatementps,ResultSetrs){
try{
if(rs!=null){
rs.close();
rs=null;
}
if(ps!=null){
ps.close();
ps=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
- 之後便可以建立業務類從而對資料庫進行操作.
從代碼知道首先吧jdbc驅動類裝載java虛擬機中,即Class.forName(DRIVER);其次載入驅動並建立於資料庫的連接Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);;然後發送SQL語句並的到結果集.之後處理結果,最後要關閉資料庫的連接,釋放資源.當然我說的這樣連接資料庫的方式使用的軟體是sql和MyEclipse.
使用配置文件來連接資料庫,當然這樣的連接需要進行一些配置.其實這樣的連接用專業術語來說就是連接池,連接池是負責分配管理和釋放資料庫連接.它允許用用程序重復使用一個現有的資料庫連接不再重復建立連接.釋放空閑時間超過最大空閑時間的資料庫連接以避免因為沒有釋放資料庫而引起的資料庫遺漏.
連接池的創建分為以下幾個步驟:1.配置context.xml文件 這個文件是伺服器(指tomcat)的一個conf文件夾中,拷貝出來放入項目的lib文件夾中,具體配置如下:
[c-sharp]view plain
之後把資料庫的驅動包,這里指的是sql2005的包放入伺服器的lib中,這樣以後如果在你自己的機子上都不用在重新導入這個包了.
然後就是從MyEclipse中取得這樣的連接從而對資料庫進行一些操作具體代碼如下:
[c-sharp]view plain
G. java中使用JDBC完成資料庫操作的基本步驟是什麼
創建一個以JDBC連接資料庫的程序,包含7個步驟: x0dx0a 1、載入JDBC驅動程序: x0dx0a 在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機), x0dx0a 這通過java.lang.Class類的靜態方法forName(String className)實現。 x0dx0a 例如: x0dx0a try{ x0dx0a //載入MySql的驅動類 x0dx0a Class.forName("com.mysql.jdbc.Driver") ; x0dx0a }catch(ClassNotFoundException e){ x0dx0a System.out.println("找不到驅動程序類 ,載入驅動失敗!"); x0dx0a e.printStackTrace() ; x0dx0a } x0dx0a 成功載入後,會將Driver類的實例注冊到DriverManager類中。 x0dx0a 2、提供JDBC連接的URL x0dx0a •連接URL定義了連接資料庫時的協議、子協議、數據源標識。 x0dx0a •書寫形式:協議:子協議:數據源標識 x0dx0a 協議:在JDBC中總是以jdbc開始 x0dx0a 子協議:是橋連接的驅動程序或是資料庫管理系統名稱。 x0dx0a 數據源標識:標記找到資料庫來源的地址與連接埠。 x0dx0a 例如:(MySql的連接URL) x0dx0a jdbc:mysql: x0dx0a //localhost:3306/test?useUnicode=true&characterEncoding=gbk ; x0dx0a useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為 x0dx0a gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。 x0dx0a 3、創建資料庫的連接 x0dx0a •要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象, x0dx0a 該對象就代表一個資料庫的連接。 x0dx0a •使用DriverManager的getConnectin(String url , String username , x0dx0a String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和 x0dx0a 密碼來獲得。 x0dx0a 例如: x0dx0a //連接MySql資料庫,用戶名和密碼都是root x0dx0a String url = "jdbc:mysql://localhost:3306/test" ; x0dx0a String username = "root" ; x0dx0a String password = "root" ; x0dx0a try{ x0dx0a Connection con = x0dx0a DriverManager.getConnection(url , username , password ) ; x0dx0a }catch(SQLException se){ x0dx0a System.out.println("資料庫連接失敗!"); x0dx0a se.printStackTrace() ; x0dx0a } x0dx0a 4、創建一個Statement x0dx0a •要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3 x0dx0a 種類型: x0dx0a 1、執行靜態SQL語句。通常通過Statement實例實現。 x0dx0a 2、執行動態SQL語句。通常通過PreparedStatement實例實現。 x0dx0a 3、執行資料庫存儲過程。通常通過CallableStatement實例實現。 x0dx0a 具體的實現方式: x0dx0a Statement stmt = con.createStatement() ; x0dx0a PreparedStatement pstmt = con.prepareStatement(sql) ; x0dx0a CallableStatement cstmt = x0dx0a con.prepareCall("{CALL demoSp(? , ?)}") ; x0dx0a 5、執行SQL語句 x0dx0a Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate x0dx0a 和execute x0dx0a 1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句 x0dx0a ,返回一個結果集(ResultSet)對象。 x0dx0a 2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或 x0dx0a DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等 x0dx0a 3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的 x0dx0a 語句。 x0dx0a 具體實現的代碼: x0dx0a ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; x0dx0a int rows = stmt.executeUpdate("INSERT INTO ...") ; x0dx0a boolean flag = stmt.execute(String sql) ; x0dx0a 6、處理結果 x0dx0a 兩種情況: x0dx0a 1、執行更新返回的是本次操作影響到的記錄數。 x0dx0a 2、執行查詢返回的結果是一個ResultSet對象。 x0dx0a • ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些 x0dx0a 行中數據的訪問。 x0dx0a • 使用結果集(ResultSet)對象的訪問方法獲取數據: x0dx0a while(rs.next()){ x0dx0a String name = rs.getString("name") ; x0dx0a String pass = rs.getString(1) ; // 此方法比較高效 x0dx0a } x0dx0a (列是從左到右編號的,並且從列1開始) x0dx0a 7、關閉JDBC對象 x0dx0a 操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲 x0dx0a 明順序相反: x0dx0a 1、關閉記錄集 x0dx0a 2、關閉聲明 x0dx0a 3、關閉連接對象 x0dx0a if(rs != null){ // 關閉記錄集 x0dx0a try{ x0dx0a rs.close() ; x0dx0a }catch(SQLException e){ x0dx0a e.printStackTrace() ; x0dx0a } x0dx0a } x0dx0a if(stmt != null){ // 關閉聲明 x0dx0a try{ x0dx0a stmt.close() ; x0dx0a }catch(SQLException e){ x0dx0a e.printStackTrace() ; x0dx0a } x0dx0a } x0dx0a if(conn != null){ // 關閉連接對象 x0dx0a try{ x0dx0a conn.close() ; x0dx0a }catch(SQLException e){ x0dx0a e.printStackTrace() ; x0dx0a } x0dx0a }