Java调用Oracle的增删改查存储过程(供初学者学习)(精)
用java调用oracle存储过程总结

用java调用oracle存储过程总结转自:/TrampEagle/archive/2005/12/13/23605.aspx一:无返回值的存储过程存储过程为:CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGININSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);END TESTA;然后呢,在java里调用时就用下面的代码:package com.hyq.src;import java.sql.*;import java.sql.ResultSet;public class TestProcedureOne {public TestProcedureOne() {}public static void main(String[] args ){String driver = "oracle.jdbc.driver.OracleDriver";String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";Statement stmt = null;ResultSet rs = null;Connection conn = null;CallableStatement cstmt = null;try {Class.forName(driver);conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");CallableStatement proc = null;proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");proc.setString(1, "100");proc.setString(2, "TestOne");proc.execute();}catch (SQLException ex2) {ex2.printStackTrace();}catch (Exception ex2) {ex2.printStackTrace();}finally{try {if(rs != null){rs.close();if(stmt!=null){stmt.close();}if(conn!=null){conn.close();}}}catch (SQLException ex1) {}}}}当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。
java调用oracle存储过程精彩总结_百度文库.

1.基本结构CREATE OR REPLACEPROCEDURE 存储过程名字(参数1 IN NUMBER,参数2 IN NUMBERIS变量1 INTEGER :=0;变量2 DATE;BEGINEND 存储过程名字2.SELECT INTO STATEMENT将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND例子:BEGINSELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;EXCEPTIONWHEN NO_DATA_FOUND THENxxxx;END;一:无返回值的存储过程存储过程为:CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2 AS BEGININSERT INTO HYQ.B_ID (I_ID,I_NAME S (PARA1, PARA2;END TESTA;然后呢,在java里调用时就用下面的代码:package com.hyq.src;import java.sql.*;import java.sql.ResultSet;public class TestProcedureOne {public TestProcedureOne( {}public static void main(String[] args {String driver = "oracle.jdbc.driver.OracleDriver";String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";Statement stmt = null;ResultSet rs = null;Connection conn = null;CallableStatement cstmt = null;try {Class.forName(driver;conn = DriverManager.getConnection(strUrl, " hyq ", " hyq "; CallableStatement proc = null;proc = conn.prepareCall("{ call HYQ.TESTA(?,? }";proc.setString(1, "100";proc.setString(2, "TestOne";proc.execute(;}catch (SQLException ex2 {ex2.printStackTrace(;}catch (Exception ex2 {ex2.printStackTrace(;}finally{try {if(rs != null{rs.close(;if(stmt!=null{stmt.close(;}if(conn!=null{conn.close(;}}}catch (SQLException ex1 {}}}}当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME。
JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结在Java中调用Oracle存储过程可以使用JDBC(Java Database Connectivity)技术。
JDBC是一种用于执行SQL语句和数据库操作的API。
在本文中,我们将讨论如何在Java中调用Oracle存储过程。
在调用Oracle存储过程之前,我们需要创建一个连接到数据库的JDBC连接。
这可以通过以下步骤完成:2. 创建数据库连接:使用JDBC驱动程序创建一个Connection对象来与数据库建立连接。
需要提供数据库的URL,用户名和密码。
例如:```String username = "your_username";String password = "your_password";Connection connection = DriverManager.getConnection(url, username, password);```这里的URL是连接到Oracle数据库的URL。
localhost表示连接的是本地主机,1521是Oracle数据库的默认端口,xe是Oracle Express Edition的默认数据库实例。
3. 调用存储过程:通过创建一个CallableStatement对象来调用存储过程。
首先,我们需要构造一个SQL语句,其中包含对存储过程的调用。
假设我们要调用一个名为`get_employee`的存储过程,它接受一个员工ID作为参数,并返回该员工的姓名和薪水。
在Java代码中,可以这样调用存储过程:```String sql = "{call get_employee(?,?,?)}";CallableStatement statement = connection.prepareCall(sql);```这里的`?`是占位符,表示存储过程的参数。
通过调用`connection.prepareCall(`方法,可以创建一个CallableStatement对象,并将SQL语句作为参数传递给它。
java项目中实现增删改查基本流程

java项目中实现增删改查基本流程Java项目中实现增删改查基本流程引言本文将详细讨论在Java项目中实现增删改查的基本流程。
通过该流程,我们可以在项目中对数据进行操作,包括创建、读取、更新和删除。
步骤一:创建在创建数据之前,首先需要创建数据库和相应的表。
接下来,我们可以通过以下步骤创建具体的数据:1.创建模型类:创建一个Java类来表示数据模型,包含需要的属性和方法。
2.设计数据库表结构:根据模型类的属性,设计数据库表结构,确定每个属性对应的字段。
3.编写DAO(数据访问对象)类:该类用于实现对数据库的访问操作,包括插入数据到数据库中。
4.实例化模型类:在业务逻辑层中,实例化模型类,并设置相应的属性值。
5.调用DAO类的插入方法:在业务逻辑层中,调用DAO类的插入方法,将数据插入到数据库中。
步骤二:读取读取数据是对数据库进行查询操作,获取需要的数据。
下面是读取数据的基本流程:1.编写DAO类的查询方法:在DAO类中编写查询方法,根据需要的条件和属性查询数据。
2.调用DAO类的查询方法:在业务逻辑层中,调用DAO类的查询方法,获取查询结果。
3.处理查询结果:根据返回的结果集,进行数据的处理和展示。
步骤三:更新更新数据是对数据库中已有数据的修改操作。
下面是更新数据的基本流程:1.编写DAO类的更新方法:在DAO类中编写更新方法,根据需要的条件和属性更新数据。
2.实例化模型类并设置属性值:在业务逻辑层中,实例化模型类,并设置需要更新的属性值。
3.调用DAO类的更新方法:在业务逻辑层中,调用DAO类的更新方法,更新数据。
步骤四:删除删除数据是在数据库中删除指定的数据记录。
下面是删除数据的基本流程:1.编写DAO类的删除方法:在DAO类中编写删除方法,根据需要的条件删除数据。
2.调用DAO类的删除方法:在业务逻辑层中,调用DAO类的删除方法,删除数据。
结论在一个Java项目中,实现增删改查的基本流程是创建、读取、更新和删除。
oracle最简单的学习笔记增删改查PLSQL基本语法游标函数存储过程的实现

-----创建序列c reate sequ encebook_idIN CREME NT BY 1 --每次加几个START WITH 001-- 从1开始计数NO MAXVA LUE -- 不设置最大值NOC YCLE-- 一直累加,不循环CACHE 10;------创建boo ks表c reate tabl e boo ks(b ooks_id va rchar2(1000),b ooks_namevarch ar2(100),price numb er,q ty nu mber,pubvarch ar2(200));------修改boo ks表的字段alt er ta ble b ooksmodif y(boo ks_id numb er)-------------往b ooks表中插入数据inse rt in to bo oks v alues(book_id.n extva l,'中国文学1',39,12,'人民文学');inser t int o boo ks va lues(book_id.ne xtval,'中国文学2',30,32,'人民文学');i nsert into book s val ues(b ook_i d.nex tval,'中国文学3',59,22,'清华大学');in sertintobooks valu es(bo ok_id.next val,'中国文学4',33,52,'清华大学');ins ert i nto b ooksvalue s(boo k_id.nextv al,'中国文学5',99,62,'电子工业');-----------跟新books中的信息updat e boo ks se t pri ce=100 whe re bo oks_i d=1----------按出版社分组查询每个出版社金额的情况sel ect p ub,su m(pri ce*qt y) fr om bo oks g roupby pu b----------按出版社、书籍名称分组查询每个出版社金额的情况se lectpub,b ooks_name,sum(p rice*qty)frombooks grou p bypub,b ooks_name----------按出版社、书籍名称分组查询每个出版社金额的情况 >50sele ct pu b,boo ks_na me,su m(pri ce*qt y) fr om bo oks g roupby pu b,boo ks_na me ha vingsum(p rice)>50----------查询相同出版社的记录数sel ect p ub,co unt(p ub) f rom b ooksgroup by p ub ha vingcount(pub) >1-----标的内链接sel ect e id ,e name,six,n ame f rom e,d wh ere a.id=d.idselec t eid ,ena me,si x,nam e fro m e j oin d on a.id=d.id-----做外连接selec t eid ,ena me,si x,nam e fro m e j oin d on a.id=d.id(+)----右外连接sele ct ei d ,en ame,s ix,na me fr om ejoind ona.id(+)=d.id----无关子查询s elect * fr om ewhere id i n (se lecteid f rom d)----相关子查询se lect* fro m e w hereid in (sel ect e id fr om dwhere id=d.id a nd id='003')s elect * fr om ewhere id n ot in (sel ect e id fr om dwhere id=d.id a nd id='003')-----存在则显示sele ct *frome whe re ex ists(selec t idfromd whe re id=d.id)-----不存在则显示selec t * f rom e wher e not exis ts(se lectid fr om dwhere id=d.id)-----------------------PLS QL基本语法----------------------------------------------------------------------------------------------------------se t ser verou tputon si ze 10000d eclar ex v archa r2(100);b eginx:='T his i s ....';D BMS_O UTPUT.PUT_LINE('x va lue i s '||x);e nd;-----if elsif el sede clareanumbe r;b var char2(10);begi na := 2;i f a = 1 th en b := 'A';e lsifa = 2 thenb :='B';els e b := 'C';en d if;DB MS_OU TPUT.put_l ine(b);en d;----------------casedecl are a nu mber;bvarch ar2(10);b egina := 2;cas e when a =1 the n b:= 'A'; whe n a = 2 th enb := 'B'; endcase;DB MS_OU TPUT.put_l ine(b);en d;-------------------------PLSQL循环-------------------------------------------- ------loopdecl are x nu mber;begi nx := 1;l oop x:= x+ 1;i f x > 3 th ene xit;e nd if; DBMS_OUTP UT.pu t_lin e(x);en d loo p;DBMS_OUTPU T.put_line(x);end;--------------whiledecl are x nu mber;begi nx := 1;w hilex > 3 loopx :=+1; DB MS_OU TPUT.put_l ine(x);end l oop;DBM S_OUT PUT.p ut_li ne(x);end;-------forbeginfo r x i n 1 .. 10loop------从小到大D BMS_O UTPUT.put_line(x); endloop;DB MS_OU TPUT.put_l ine('end o f for loop');e nd;beginfo r x i n re verse 1 .. 10 l oop------从大到小 DB MS_OU TPUT.put_l ine(x);end l oop;DBM S_OUT PUT.p ut_li ne('e nd of forloop');en d;----------------做标签decl are x nu mber;begi nx := 0;<<repe at_lo op>>x := x + 1; DBMS_OUTP UT.pu t_lin e(x);if x <3 the n goto repe at_lo op; endif;e nd;----------------e xcept ion 处理------------------------------------- d eclar et est v archa r2(100);b eginsel ect b ooks_nameintotestfrombooks wher e boo ks_id = 1; DB MS_OU TPUT.put_l ine(t est);ex cepti onwhenno_da ta_fo und t hen DB MS_OU TPUT.put_l ine('没有找到数据');end;-----------自定义异常d eclar et est v archa r2(100); e ex cepti on;b eginsel ect b ooks_nameintotestfrombooks wher e boo ks_id = 1; if test <> '中国文学1' the n rais e e;end if;DBM S_OUT PUT.p ut_li ne(te st);excep tionwhe n e t hen DB MS_OU TPUT.put_l ine('不是需要的书籍名称');en d;-----------------------记录的声明-------------------------------decla ret ype m yreco rd is reco rd(b namevarch ar2(100),bpubvarch ar2(100));rea l_rec ord m yreco rd;b eginsele ct bo oks_n ame,p ub in to re al_re cordfrombooks wher e boo ks_id=1;D BMS_O UTPUT.put_line(real_recor d.bna me || real_reco rd.bp ub);end;decl are type myre cordis re cord(bname book s.boo ks_id%type, ---------------声明的字段和表中的字段类型一样 bpu b va rchar2(100)); real_reco rd my recor d;be gin sele ct bo oks_n ame,pub i nto r eal_r ecord from book s whe re bo oks_i d = 1;D BMS_O UTPUT.put_line(real_recor d.bna me || real_reco rd.bp ub);end;dec laremyr ecord book s%row type;begi ns elect * in to my recor d fro m boo ks wh ere b ooks_id =1;DBMS_OUTPU T.put_line(myre cord.books_name || m yreco rd.pu b);e nd;-----------------------游标------------------------显示游标的使用方法d eclar ec ursor mycu rsoris sel ect * from book s;myrec ord b ooks%rowty pe;b eginope n myc ursor;f etchmycur sor in to my recor d;while mycu rsor%found loopDBMS_OUTPU T.put_line(myre cord.books_name || m yreco rd.pu b); fe tch m ycurs ori nto m yreco rd; endloop;cl ose m ycurs or;e nd;------带参数的游标d eclar ec ursor mycu rsor(booki d num ber)is sel ect * from book s whe re bo oks.b ooks_id =booki d;myrec ord b ooks%rowty pe;b eginope n myc ursor(1);fet ch my curso r into myre cord;wh ile m ycurs or%fo und l oop DB MS_OU TPUT.put_l ine(m yreco rd.bo oks_n ame || myr ecord.pub); fetc h myc ursor int o myr ecord;e nd lo op; clos e myc ursor;end;------使用for做游标的循环decl are curso r myc ursor(book id nu mber) iss elect book s_nam e fro m boo ks wh ere b ooks.books_id=b ookid;beg info r cur in m ycurs or(1) loopDBMS_OUTP UT.pu t_lin e(cur.book s_nam e);e nd lo op; end;----i s ope ndec lareboo kname book s.boo ks_na me%ty pe; curs or my curso r(boo ksidnumbe r) isselec t boo ks_na me fr om bo oks w herebooks_id = book sid;beginif mycu rsor%isope n the n DBMS_OUTP UT.pu t_lin e('cu rsoris op ened');elseo pen m ycurs or(1);e nd if;f etchmycur sor in to bo oknam e;close mycu rsor;db ms_ou tput.put_l ine(b ookna me);end;-------ro wcoun tdec lareboo kname book s.boo ks_na me%ty pe; curs or my curso r iss elect book s_nam e fro m boo ks;b eginope n myc ursor; fe tch m ycurs ori nto b ookna me; ex it wh en my curso r%not found or m ycurs or%no tfoun d isnull;DBMS_OUTPU T.put_line(mycu rsor%rowco unt);en d loo p;close mycu rsor;end;-----游标跟新数据de clarecu rsormycur sor i s sele ct bo oks_n ame f rom b ooksfor u pdate;t ext v archa r2(100);b eginope n myc ursor;f etchmycur sor in to te xt; whil e myc ursor%foun d loo p upda te bo oks setbooks_name = bo oks_n ame || '_t' whe re cu rrent of m ycurs or; fe tch m ycurs ori nto t ext;end loop;c losemycur sor;end;----------------隐式游标不需要声明beginfo r cur in (selec t boo ks_na me fr om bo oks)loopD BMS_O UTPUT.put_line(cur.b ooks_name);e nd lo op;e nd;--------------------存储过程------------------------------------------------------------------ cr eateor re place proc edure getB ookNa meByI d(boo kid i n num ber)isbookn ame v archa r2(100);b eginsel ect b ooks_nameintobookn ame f rom b ookswhere book s_id= boo kid;--s elect book s_nam e from book s whe re bo oks_i d=1;dbm s_out put.p ut_li ne(oo kbnam e);e nd;e nd ge tBook NameB yId;-----beg in调用过程tes t.get BookN ameBy Id(1);----调用过程exec ute t est.g etBoo kName ById(1);-----显示某个存储过程的错误信息s how e rrors proc edure getB ookNa meByI d; SELEC T * F ROM (SEL ECT A*, RO WNUMRNF ROM (SELEC T * F ROM b ooks) A)WHER E RNBETWE EN 1AND 5s elect coun t(*)from(sele ct *frombooks); 。
Oracle10g数据库连接及增删改查(精)

import java.sql.C onn ecti on;import java.sql.DriverMa nager;import java.sql.ResultSet;import java.sql.SQLExcepti on;import java.sql.Stateme nt;public class JdbcConnection {public static void main(String[] args {//getCo n(;// i nsertTbUser(;updateUser(;//query(;〃delTbUser(;}public static void insertTbUser( {Stri ng url = "jdbc:oracle:thin:@localhost:1521:orcl";Str ing driverClass = "oracle.jdbc.driver.OracleDriver" ;try {Class.forName (driverClass;Connection con = java.sql.DriverManager. getConnection (url, "mm", "mm";// statement开辟一个通道java.sql.Statement st = con.createStatement(;Stri ng in sertSql = "insert into tb_user(userid,username,password" + //执行sql语句,返回操作所影响的条数。
"values(101,'zhuyu','zhuy『";st.execute(i nsertSql;st.close(;con. close(;} catch (ClassNotFou ndExcepti on e { e.pr in tStackTrace(;} catch (SQLExcepti on e {e.pr in tStackTrace(;}}public static void delTbUser({Stri ng url= "jdbc:oracle:thi n: @localhost:1521:orcl";String driverClass= "oracle.jdbc.driver.OracleDriver";try {Class.forName (driverClass;Connection con=DriverManager. getConnection(url, "mm" ,"mm"; java.sql.Stateme nt st=c on. createStateme nt(;String delSql= "delete from tb_user where userid='23'";st.execute(delSql;st.close(;con. close(;} catch (ClassNotFou ndExcepti on e {// TODO Auto-ge nerated catch blocke.pr in tStackTrace(;} catch (SQLExcepti on e {// TODO Auto-ge nerated catch blocke.pr in tStackTrace(;}}public static void updateUser( {Stri ng url = "jdbc:oracle:thi n: @localhost:1521:orcl";String driverClass = "oracle.jdbc.driver.OracleDriver" ;try {Class.forName (driverClass;Connection con = DriverManager. getConnection (url, "mm" ,"mm"; Stri ng updateSql = "update tb_user set password='1223423' where userid=5"Stateme nt st = con. createStateme nt(;st.execute(updateSql;st.close(;con. close(;} catch (ClassNotFou ndExcepti on e {e.pr in tStackTrace(;} catch (SQLExcepti on e {e.pr in tStackTrace(;}}public static void query( {Stri ng url = "jdbc:oracle:thi n: @localhost:1521:orcl" ;Stri ng driverClass = "oracle.jdbc.driver.OracleDriver" ; Connection con = null;Stateme nt st = n ull;ResultSet rs = null;try {Class.forName (driverClass;con = DriverManager. getConnection (url, "mm", "mm";st = con. createStateme nt(;String querySql = "select * from tb_user";rs = st.executeQuery(querySql;System.out.println( "id\tusername'tpassword";while (rs. next( {int id = rs.getlnt( "userid";String userName = rs.getString( "username";String password = rs.getString( "password";System.out.pr intln (id + "\t" + userName + "\t" + password; } } catch (ClassNotFou ndExcepti on e { e.pr in tStackTrace(; } catch (SQLException e {e.pr in tStackTrace(;}}public static void getCon( {Stri ng url = "jdbc:oracle:thi n: @localhost:1521:orcl";String driverClass = "oracle.jdbc.driver.OracleDriver" ;//加载驱动try { ng.Class. forName (driverClass .newln sta nce(;//获得连接java.sql.Connection con = java.sql.DriverManager. getConnection (url, "mm" , "mm";System.out.pr intln(con;} catch (In sta ntiati on Excepti on e {e.pr in tStackTrace(;} catch (IllegalAccessExcepti on e {e.pr in tStackTrace(;} catch (ClassNotFou ndExcepti on e {e.pr in tStackTrace(;} catch (SQLException e {e.pr in tStackTrace(;}}。
oracle 修改存储过程部分内容

oracle 修改存储过程部分内容Oracle是一种关系型数据库管理系统,通过存储过程可以实现复杂的数据库操作和数据处理。
在Oracle中修改存储过程的部分内容,可以通过以下步骤完成:1. 首先,使用Oracle的编辑器或其他适当的工具打开存储过程的源代码。
2. 定位到需要修改的部分内容,在该部分进行必要的更改。
可以修改存储过程的参数、逻辑、变量、查询语句等。
3. 确保修改后的代码语法正确、逻辑正确,并与原先的代码保持一致。
可以使用Oracle的语法检查工具或测试工具来验证代码的正确性。
4. 保存修改后的存储过程代码。
5. 使用Oracle的管理工具,如SQL Developer或PL/SQL Developer,连接到数据库。
6. 在管理工具的查询编辑器中执行ALTER PROCEDURE语句来修改存储过程。
示例:假设原始存储过程名称为"SP_GET_EMPLOYEE_DETAILS",现需要修改其中的查询语句,以获取特定条件下的员工详细信息。
原始存储过程代码示例:```CREATE PROCEDURE SP_GET_EMPLOYEE_DETAILS (p_employee_id IN NUMBER)ASBEGINSELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = p_employee_id;END;```修改后的存储过程代码示例:```CREATE OR REPLACE PROCEDURE SP_GET_EMPLOYEE_DETAILS(p_employee_id IN NUMBER, p_department_id IN NUMBER)ASBEGINSELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = p_employee_id AND DEPARTMENT_ID = p_department_id;END;```在以上示例中,根据任务需求,在原始存储过程中新增了一个参数p_department_id,并在查询语句中添加了对部门ID的条件限制。
Oracle存储过程和java调用

1 存储过程介绍存储过程是指用于特定操作的pl/sql块,是由流控制和sql语句书写的过程。
存储过程经编译和sql优化后存储在数据库服务器中,使用时候只需要调用即可。
2 存储过程的优点1 使用存储过程,可以实现存储过程设计和编码工作分开进行,只要将存储过程名,参数,以及返回信息告诉编码人员即可。
2 使用存储过程可以减少sql注入式攻击,提供系统的安全性。
3 执行存储过程的用户要具有一定的权限才能使用存储过程。
没有数据操作权限的用户只能在系统控制下间接的存取数据。
4 存储过程的代码直接放在了数据库中,一般由客户端直接通过存储过程的名称来进行调用,简化客户端的操作逻辑。
3 存储过程的语法存储过程包含三部分声明,执行部分,异常。
可以有无参数的或带参数的存储过程。
存储过程的定义:Create [or replace] procedure procedure_name[(parameter1[mode] datatype1,parameter2 [model] datatype2…)]IS[As]BeginPl/sql block;End [procedure_name]其中: procedure_name是存储过程的名字,parameter用于指定参数,model用于指定参数模式,datatype用于指定参数类型, IS [AS]用于开始PL/SQL代码块。
注:1,当定义存储过程的参数时,只能指定数据类型,不能指定数据长度。
2,建立存储过程时,既可以指定存储过程的参数,也可以不提供任何参数。
3,存储过程的参数主要有三种类型:输入参数(IN)、输出参数(OUT)、输入输出参数(IN OUT),其中IN用于接收调用环境的输入参数,OUT用于将输出数据传递到调用环境,IN OUT不仅要接收数据,而且要输出数据到调用环境。
4 一个简单的存储过程+调试写一个存储过程--修改其中的数据select count(*) from table1 where name='weiguo' 的查询结果是 count(*)=0如果涉及到两个或以上的输入参数,如下图:5 存储过程和java程序的接口操作5.1 无返回值的存储过程查询数据库-显示5.2 有返回值的存储过程(非列表-单个出参)注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
------创建表 create table t_user ( id number(4 primary key, uname varchar2(20, age number(3 ; ((注意下面的语句结束后须加/才能执行 -----添加的存储过程 create or replace procedure tu_save ( id in number, uname in varchar, age in number as begin insert into t_user(id,uname,age values(id,uname,age; end tu_save; -----删除的存储过程 create or replace procedure tu_del ( b_id in number as begin delete from t_user where id = b_id; end tu_del; -----修改的存储过程 create or replace procedure tu_update ( b_id in number, b_uname varchar, b_age number as begin update t_user set uname = b_uname,age = b_age where id = b_id; end tu_update; -----查询一条数据的存储过程 create or replace procedure tu_query ( b_id in number, b_uname out varchar, b_age out number as begin select uname,age into b_uname,b_age from t_user where id = b_id; end tu_query; -----查询所有的存储过程(查询多个数据,步骤1,3,查询一条数据,步骤1,2 1.先创建程序包 create or replace package tu_queryAll as type aa_all is ref cursor; end tu_queryAll; 2.创建查询一条数据的查询 create or replace procedure tu_query1 ( b_id in number, b_all out tu_queryAll.aa_all as begin open b_all for select * from t_user where id = b_id; end tu_query1; 3.利用程序包创建多查询 create or replace procedure tu_queryAlls ( b_all out tu_queryAll.aa_all as begin open b_all for select * from t_user; end tu_queryAlls; Java调用Oracle存储过程 ---1.创建连接数据库类 import java.sql.*; public class UserDao { /** * 创建连接 */ public static Connection getConn( { Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"; conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:aptech","scott","tiger"; } catch (Exception e { // TODO Auto-generated catch block e.printStackTrace(; } return conn; } /** * 测试连接是否成功 */ public static void main(String[] args { Connection con = new UserDao(.getConn(; System.out.println(con; } } ---2.操作存储过程 import com.aptech.jb.dao.UserDao; import java.sql.*; public class UserDaoImpl extends UserDao { private Connection conn = null; ResultSet res = null; CallableStatement cstm = null; /** * 增加一条数据 * @param id * @param uname * @param age */ public void save(int id,String uname,int age { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_save(?,?,?}"; cstm.setInt(1, id; cstm.setString(2, uname; cstm.setInt(3, age; cstm.execute(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { cstm.close(; conn.close(;
} catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 删除一条数据 * @param id */ public void del(int id { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_del_pro(?}"; cstm.setInt(1, id; cstm.execute(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 修改一条数据 * @param id * @param uname * @param age */ public void update(int id,String uname,int age { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_update(?,?,?}"; cstm.setInt(1, id; cstm.setString(2, uname; cstm.setInt(3, age; cstm.execute(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 根据Id查询语句 * @param id */ public void query(int id { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_query(?,?,?}"; cstm.setInt(1, id; cstm.registerOutParameter(2, Types.VARCHAR; cstm.registerOutParameter(3, Types.INTEGER; cstm.execute(; String name = cstm.getString(2; int age = cstm.getInt(3; System.out.println(name+","+age; } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 根据游标查询一条数据 */ public void query1(int id { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_query1(?,?}"; cstm.setInt(1, id; cstm.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR; cstm.execute(; res = (ResultSetcstm.getObject(2; if(res.next( { System.out.println("id="+res.getInt(1+",uname="+res.getString(2+",age="+res.getInt(3; } } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { res.close(; cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 查询所有数据 */ public