當前位置:首頁 » 服務存儲 » java存儲過程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java存儲過程

發布時間: 2022-01-19 00:37:46

『壹』 java中怎麼用存儲過程

存儲過程是資料庫的,可以通過觸發器來調用,存儲過程類似於方法

『貳』 java演算法 和存儲過程實現

用Set集合就行了, Set集合不允許重復值
1 用到函數split()
2 Set集合
3 List (可能用到)
如果不行我給你寫

『叄』 java代碼怎麼調用存儲過程

方法如下:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;/***LoadJDBCDriver*最基本的方法通過JDBC連接資料庫*@authorJacob**/publicclassLoadByPrimary{publicstaticvoidmain(String[]args)throwsClassNotFoundException{Stringdriver="oracle.jdbc.OracleDriver";Connectioncn=null;/***Class.forName手動載入一個類到方法區,Driver類中包含自動注冊驅動的靜態代碼塊*會自動在DriverManager中注冊驅動*/Class.forName(driver);Stringurl="jdbc:oracle:thin:@localhost:1521:ORACLE";//1521代表埠號,默認的Stringuser="用戶名";Stringpwd="密碼";try{/**Connection是介面,返回值是一個引用對象,是Oracle驅動提供實現類ojdbc7.jar*使用JDBCAPI介面,實際上是驅動實現類*/cn=DriverManager.getConnection(url,user,pwd);Statementstmt=cn.createStatement();Stringsql="SELECT*FROMstu_empWHEREdeptno=10";ResultSetrs=stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getInt("empno")+""+rs.getString("ename")+""+rs.getString("job"));}rs.close();stmt.close();}catch(SQLExceptione){e.printStackTrace();}finally{try{if(cn!=null){cn.close();}}catch(SQLExceptione2){e2.printStackTrace();}}}}這是通過preparedstatement實現更新數據,這里我把連接資料庫的方法進行了封裝,每次直接調用了。publicstaticvoidmain(String[]args){PreparedStatementDemopsd=newPreparedStatementDemo();psd.updateSalary("JACOB",3000);psd.selectSalary("JACOB");}publicvoipdateSalary(Stringename,doublesal){Stringsql="Updatestu_empsetsal=?Whereename=?";Connectioncn=null;PreparedStatementps=null;try{cn=DBPUtil.getConnection();ps=cn.prepareStatement(sql);ps.setDouble(1,sal);ps.setString(2,ename);intnum=ps.executeUpdate();System.out.println("提示:總共有"+num+"條數據已經更新!");}catch(SQLExceptione){e.printStackTrace();}finally{DBUtil.stmtClose(ps);DBUtil.connClose(cn);}}publicvoidselectSalary(Stringname){Stringsql="Select*Fromstu_empWhereename=?";Connectioncn=null;PreparedStatementps=null;ResultSetrs=null;try{cn=DBPUtil.getConnection();ps=cn.prepareStatement(sql);ps.setString(1,name);rs=ps.executeQuery();while(rs.next()){System.out.println(rs.getString("ename")+"的工資是:"+rs.getInt("sal"));}}catch(SQLExceptione){e.printStackTrace();}finally{DBUtil.stmtClose(ps);DBUtil.rsClose(rs);DBUtil.connClose(cn);}}}

『肆』 在JAVA中怎麼調用帶參數的存儲過程啊

JDBC調用存儲過程: CallableStatement
在Java裡面調用存儲過程,寫法那是相當的固定:
Class.forName(....
Connection conn = DriverManager.getConnection(....
/**
*p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替
*其餘地方寫法固定
*/
CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");
/**
*告訴JDBC,這些個參數,哪些是輸出參數,輸出參數的類型用java.sql.Types來指定
*下面的意思是,第3個?和第4個?是輸出參數,類型是INTEGER的
*Types後面具體寫什麼類型,得看你的存儲過程參數怎麼定義的
*/
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
/**
*在我這里第1個?和第2個?是輸入參數,第3個是輸出參數,第4個既輸入又輸出
*下面是設置他們的值,第一個設為3,第二個設為4,第4個設置為5
*沒設第3個,因為它是輸出參數
*/
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
//執行
cstmt.execute();
//把第3個參數的值當成int類型拿出來
int three = cstmt.getInt(3);
System.out.println(three);
//把第4個參數的值當成int類型拿出來
int four = cstmt.getInt(4);
System.out.println(four);
//用完別忘給人家關了,後開的先關
cstmt.close();
conn.close();

JDBC調用存儲過程,掌握這一個程序足夠了.
以下是上面程序使用的存儲過程的代碼,我用的是Oracle資料庫,不過不論是什麼資料庫,對於你的程序,JDBC這一端寫法都是一樣的.

create or replace procere p
(v_a in number,v_b number,v_ret out number,v_temp in out number)
is
begin
if(v_a > v_b) then
v_ret := v_a;
else
v_ret := v_b;
end if;
v_temp := v_temp + 1;
end;

『伍』 JAVA中如何調用存儲過程

Connection conn = null;
CallableStatement cStmt = null;
PreparedStatement pStmt = null;
ResultSet rs = null;

conn = ConnectionManagerDao.getConn();
//關鍵代碼
cStmt = conn.prepareCall("{call proc_PagingVie(?,?,?,?,?,?,?,?,?) }");
//call 存儲過程名(?,?,?)-問號的是參數

『陸』 Java中是如何調用存儲過程的(詳細代碼)

//存儲過程create or replace Procere countBySal(
p_sal emp.sal%type,
p_count OUT number
)as
begin
select count(*) into p_count from emp where sal >= p_sql;
end countBySal; //調用步奏import java.sql.CallableStatement; //帶哦用存儲過程所必須的語句借口
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(?,?)}";//調用存儲過程的語句,call後面的就是存儲過程名和需要傳入的參數
CallableStatement cst=cn.prepareCall(sql);
cst.setDouble(1, sal);//設置in參數的值
cst.registerOutParameter(2, Types.INTEGER);//注冊out參數的類型
cst.execute();
int result = cst.getInt(2);
cst.close();
cn.close();
return result;
}

public static void main(String[] args) {
int count;
try {
count = EmpUtil.countBySal(3000);
System.out.println("工資在3000元以上的人數為:"+count);
} catch (Exception e) {
e.printStackTrace();
}

}

}

『柒』 java中怎麼用存儲過程啊

對已儲存過程的調用是CallableStatement對象所含的內容。這種調用是用一種換碼語法來寫的,有兩種形式:一種形式帶結果參,另一種形式不帶結果參數。結果參數是一種輸出(OUT)參數,是已儲存過程的返回值。兩種形式都可帶有數量可變的輸入(IN參數)、輸出(OUT參數)或輸入和輸出(INOUT參數)的參數。問號將用作參數的佔位符。在JDBC中調用已儲存過程的語法如下所示。注意,方括弧表示其間的內容是可選項;方括弧本身並非語法的組成部份。 {call過程名[(?,?,...)]} 返回結果參數的過程的語法為: {?=call過程名[(?,?,...)]} 不帶參數的已儲存過程的語法類似: {call過程名} 通常,創建CallableStatement對象的人應當知道所用的DBMS是支持已儲存過程的,並且知道這些過程都是些什麼。然而,如果需要檢查,多種DatabaseMetaData方法都可以提供這樣的信息。例如,如果DBMS支持已儲存過程的調用,則supportsStoredProceres方法將返回true,而getProceres方法將返回對已儲存過程的描述。 CallableStatement繼承Statement的方法(它們用於處理一般的SQL語句),還繼承了PreparedStatement的方法(它們用於處理IN參)。 CallableStatement中定義的所有方法都用於處理OUT參數或INOUT參數的輸出部分:注冊OUT參數的JDBC類型(一般SQL類型)、從這些參數中檢索結果,或者檢查所返回的值是否為JDBCNULL。 JDBC存儲過程1、創建CallableStatement對象 CallableStatement對象是用Connection方法prepareCall創建的。下例創建CallableStatement的實例,其中含有對已儲存過程getTestData調用。該過程有兩個變數,但不含結果參數:CallableStatementc stmt=con.prepareCall("{callgetTestData(?,?)}");其中?佔位符為IN、OUT還是INOUT參數,取決於已儲存過程getTestData。 JDBC存儲過程2、IN和OUT參數 將IN參數傳給CallableStatement對象是通過setXXX方法完成的。該方法繼承自PreparedStatement。所傳入參數的類型決定了所用的setXXX方法(例如,用setFloat來傳入float值等)。如果已儲存過程返回OUT參數,則在執行CallableStatement對象以前必須先注冊每個OUT參數的JDBC類型(這是必需的,因為某些DBMS要求JDBC類型)。注冊JDBC類型是用registerOutParameter方法來完成的。語句執行完後,CallableStatement的getXXX方法將取回參數值。正確的getXXX方法是為各參數所注冊的JDBC類型所對應的Java類型。換言之,registerOutParameter使用的是JDBC類型(因此它與資料庫返回的JDBC類型匹配),而getXXX將之轉換為Java類型。 作為示例,下述代碼先注冊OUT參數,執行由cstmt所調用的已儲存過程,然後檢索在OUT參數中返回的值。方法getByte從第一個OUT參數中取出一個Java位元組,而getBigDecimal從第二個OUT參數中取出一個BigDecimal對象(小數點後面帶三位數): CallableStatementc stmt=con.prepareCall("{callgetTestData(?,?)}"); cstmt.registerOutParameter(1,java.sql.Types.TINYINT); cstmt.registerOutParameter(2,java.sql.Types.DECIMAL,3); cstmt.executeQuery(); byte x=cstmt.getByte(1); java.math.BigDecimaln=cstmt.getBigDecimal(2,3); CallableStatement與ResultSet不同,它不提供用增量方式檢索大OUT值的特殊機制。JDBC存儲過程3、INOUT參數 既支持輸入又接受輸出的參數(INOUT參數)除了調用registerOutParameter方法外,還要求調用適當的setXXX方法(該方法是從PreparedStatement繼承來的)。setXXX方法將參數值設置為輸入參數,而registerOutParameter方法將它的JDBC類型注冊為輸出參數。setXXX方法提供一個Java值,而驅動程序先把這個值轉換為JDBC值,然後將它送到資料庫中。這種IN值的JDBC類型和提供給registerOutParameter方法的JDBC類型應該相同。然後,要檢索輸出值,就要用對應的getXXX方法。例如,Java類型為byte的參數應該使用方法setByte來賦輸入值。應該給registerOutParameter提供類型為TINYINT的JDBC類型,同時應使用getByte來檢索輸出值。 下例假設有一個已儲存過程reviseTotal,其唯一參數是INOUT參數。方法setByte把此參數設為25,驅動程序將把它作為JDBCTINYINT類型送到資料庫中。接著,registerOutParameter將該參數注冊為JDBCTINYINT。執行完該已儲存過程後,將返回一個新的JDBCTINYINT值。方法getByte將把這個新值作為Javabyte類型檢索。 CallableStatementc stmt=con.prepareCall("{callreviseTotal(?)}"); cstmt.setByte(1,25); cstmt.registerOutParameter(1,java.sql.Types.TINYINT); cstmt.executeUpdate(); byte x=cstmt.getByte(1); 1)返回一個結果集(ResultSet)。2)返回一個特定的值。下面來詳細的說明。1)返回一個結果集(ResultSet),這種類似通常的處理結果集如果事先就有一個類似如下的procere CREATE PROCEDURE getShipQuantity @jsid int ASSELECT jf_js_id,SUM(jf_ship_quantity) AS shipqty FROM tjobsheet_finish f WHERE (jf_js_id=@jsid)GROUP BY jf_js_id 那麼我們將通過如下的代碼來調用 String sql = "{ call getShipQuantity(?) }";Connection con = conn.connection();ResultSet rs = null;BigDecimal shipQuantity = new BigDecimal(0);try{ CallableStatement cs = con.prepareCall(sql); cs.setInt(1,jsoId);//設置輸入參數 rs = cs.executeQuery();//返回結果集 if(rs.next()){ shipQuantity = new BigDecimal(rs.getDouble(2)); } logger.debug("shipQuantity --------------------- "+shipQuantity);}catch(Exception e){ logger.debug(e);}2)返回一個特定的值。也就是說,在procere的定義中已經用output輸出參數了。請看下面的proceercreate procere getSingleWgt @@singleWgt numeric(8,3) output,@jsnum varchar(11) = '0000-0480'asdeclare @stwgt numeric(8,3)select @stwgt = sum(b.stwgt)from js as ainner join jsactdtl as b on a.jsnum = b.jsnumwhere a.completion = 1 and b.stflag = 22and a.jsnum = @jsnumselect @@singleWgt = (@stwgt/orderedqty) from js where jsnum = @jsnum那麼我們將通過如下的代碼來調用String sql = "{ call getSingleWgt(?,?) }";Connection con = getSession().connection();//得到connectiontry{ CallableStatement cs = con.prepareCall(sql);//通過它來執行sql cs.registerOutParameter(1,java.sql.Types.FLOAT);//注冊輸出參數 cs.setString(2,shipment.getJsnum());//指出輸入參數 if(cs.execute()){//執行 float output = cs.getFloat(1);//返回值 }}catch(Exception e){logger.debug(e);}

『捌』 如何創建Java存儲過程

1、操作系統:windows 2000 Server
2、數 據 庫:Oracle 8i R2 (8.1.7) for NT 企業版
3、安裝路徑:C:\ORACLE
實現方法:
1、 創建一個文件為TEST.java
public class TEST
{
public static void main (String args[])
{
System.out.PRintln("HELLO THIS iS A JAVA PROCEDURE");
}
}
2、 javac TEST.java
3、 java TEST
4、 SQL> conn system/manager
SQL> grant create any Directory to scott;
SQL> conn scott/tiger
SQL> create or replace directory test_dir as 'd:\'
目錄已創建。
SQL> create or replace java class using bfile(test_dir,'TEST.CLASS')
2/
Java 已創建。
SQL> select object_name,object_type,STATUS from user_objects;
SQL> create or replace procere test_java
as language java
name 'TEST.main(java.lang.String[])';
/
過程已創建。
SQL> set serveroutput on size 5000
SQL> call dbms_java.set_output(5000);
調用完成。
SQL> execute test_java;
HELLO THIS iS A JAVA PROCEDURE
PL/SQL 過程已成功完成。
SQL> call test_java();
HELLO THIS iS A JAVA PROCEDURE
調用完成。

『玖』 Java如何實現對存儲過程的調用

import java.sql.*;
public class ProcereTest
{
public static void main(String args[]) throws Exception
{
//載入驅動
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//獲得連接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");

//創建存儲過程的對象
CallableStatement c=conn.prepareCall("{call getsum(?,?)}");

//給存儲過程的第一個參數設置值
c.setInt(1,100);

//注冊存儲過程的第二個參數
c.registerOutParameter(2,java.sql.Types.INTEGER);

//執行存儲過程
c.execute();

//得到存儲過程的輸出參數值
System.out.println (c.getInt(2));
conn.close();

}
}