prepareCall和prepareStatement有什么區(qū)別
通常來說createStatement方法用于簡(jiǎn)單的SQL語句(不帶參數(shù))、prepareStatement方法用于帶一個(gè)或多個(gè)IN參數(shù)的SQL語句或經(jīng)常被執(zhí)行的簡(jiǎn)單SQL語句,而prepareCall方法用于調(diào)用已儲(chǔ)存過程。
java中如何調(diào)用數(shù)據(jù)庫的存儲(chǔ)過程
Java調(diào)用存儲(chǔ)過程的方法是通過調(diào)用Connection的實(shí)例方法prepareCall,prepareCall方法返回CallableStatement對(duì)象用于填充存儲(chǔ)過程的參數(shù)。prepareCall方法形參是調(diào)用存儲(chǔ)過程的sql語句,此參數(shù)的語法格式如下:
{callstoredProcedureName(parameter-list)}其中,storedProcedureName是存儲(chǔ)過程名稱,parameter-list是存儲(chǔ)過程參數(shù)列表。
例如,存儲(chǔ)過程名為usp_test,有兩個(gè)輸入?yún)?shù)a,b。則調(diào)用代碼看起來如下所示:
CallableStatementcallableStatement=connection.prepareCall("{callusp_test(?,?)}");
callableStatement.tObject("a","value-1");
callableStatement.tObject("b","value-2");
callableStatement.execute();
在java中怎么創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表
JDBC連接數(shù)據(jù)庫
•創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫的程序,包含7個(gè)步驟:
1、加載JDBC驅(qū)動(dòng)程序:
在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫的驅(qū)動(dòng)到JVM(Java虛擬機(jī)),
這通過java.lang.Class類的靜態(tài)方法forName(String className)實(shí)現(xiàn)。
例如:
try{
//加載MySql的驅(qū)動(dòng)類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅(qū)動(dòng)程序類 ,加載驅(qū)動(dòng)失敗!");
e.printStackTrace() ;
}
成功加載后,會(huì)將Driver類的實(shí)例注冊(cè)到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接數(shù)據(jù)庫時(shí)的協(xié)議、子協(xié)議、數(shù)據(jù)源標(biāo)識(shí)。
•書寫形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標(biāo)識(shí)
協(xié)議:在JDBC中總是以jdbc開始
子協(xié)議:是橋連接的驅(qū)動(dòng)程序或是數(shù)據(jù)庫管理系統(tǒng)名稱。
數(shù)據(jù)源標(biāo)識(shí):標(biāo)記找到數(shù)據(jù)庫來源的地址與連接端口。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?uUnicode=true&characterEncoding=gbk ;
uUnicode=true:表示使用Unicode字符集。如果characterEncoding設(shè)置為
gb2312或GBK,本參數(shù)必須設(shè)置為true 。characterEncoding=gbk:字符編碼方式。
3、創(chuàng)建數(shù)據(jù)庫的連接
•要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象,
該對(duì)象就代表一個(gè)數(shù)據(jù)庫的連接。
•使用DriverManager的getConnectin(String url , String urname ,
String password )方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和
密碼來獲得。
例如:
//連接MySql數(shù)據(jù)庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String urname = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , urname , password ) ;
}catch(SQLException ){
System.out.println("數(shù)據(jù)庫連接失敗!");
.printStackTrace() ;
}
4、創(chuàng)建一個(gè)Statement
•要執(zhí)行SQL語句,必須獲得java.sql.Statement實(shí)例,Statement實(shí)例分為以下3
種類型:
1、執(zhí)行靜態(tài)SQL語句。通常通過Statement實(shí)例實(shí)現(xiàn)。
2、執(zhí)行動(dòng)態(tài)SQL語句。通常通過PreparedStatement實(shí)例實(shí)現(xiàn)。
3、執(zhí)行數(shù)據(jù)庫存儲(chǔ)過程。通常通過CallableStatement實(shí)例實(shí)現(xiàn)。
具體的實(shí)現(xiàn)方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
Java中是如何調(diào)用存儲(chǔ)過程的?
//存儲(chǔ)過程create or replace Procedure countBySal(
p_sal emp.sal%type,
p_count OUT number
)as
begin
lect count(*) into p_count from emp where sal >= p_sql;
end countBySal; //調(diào)用步奏import java.sql.CallableStatement; //帶哦用存儲(chǔ)過程所必須的語句借口
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;public class EmpUtil {
public static int countBySal(double sal) throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:test";
Connection cn=DriverManager.getConnection(url, "scott", "tiger");
String sql="{call countBySal(?,?)}";//調(diào)用存儲(chǔ)過程的語句,call后面的就是存儲(chǔ)過程名和需要傳入的參數(shù)
CallableStatement cst=cn.prepareCall(sql);
cst.tDouble(1, sal);//設(shè)置in參數(shù)的值
cst.registerOutParameter(2, Types.INTEGER);//注冊(cè)out參數(shù)的類型
cst.execute();
int result = cst.getInt(2);
cst.clo();
cn.clo();
return result;
}
public static void main(String[] args) {
int count;
try {
count = EmpUtil.countBySal(3000);
System.out.println("工資在3000元以上的人數(shù)為:"+count);
} catch (Exception e) {
e.printStackTrace();
}
}
}
java中調(diào)用存儲(chǔ)過程有什么作用
ResultSet rs = stmt.executeQuery("{call dbo.ProcedureName}");
調(diào)用帶參數(shù)存儲(chǔ)程必須結(jié)合 SQLServerConnection 類 prepareCall 使用 call SQL 轉(zhuǎn)義序列
CallableStatement cstmt = con.prepareCall("{call dbo.ProcedureName(?, ?)}");
cstmt.tInt(1, java.sql.Types.INTEGER);
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(1));
System.out.println("MANAGER NAME: " + cstmt.getInt(2));
3 SAF NTSD overspd 運(yùn)行期間電梯 1LS/2LS 實(shí)際速度超相應(yīng) NTSD 設(shè)定值 SHUTDOWN 電梯預(yù)定減速度減速停止復(fù)位