
直接使用
String sql="insert into wf_hxinxi (oid,zsnumber,sortinfo,address,dateinfo)values(SEQ_SYSTEMADD.Nextval,'"+hxinxiVO.getZsnumber()+"','"+hxinxiVO.getSortinfo()+"','"+hw+"','"+hxinxiVO.getDateinfo()+"')"
使用存储过程就更多,看你的传入,和传出情况,
一:无返回值的存储过程
存储过程为:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT 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)。
二:有返回值的存储过程(非列表)
存储过程为:
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1
END TESTB
在java里调用时就用下面的代码:
package com.hyq.src
public class TestProcedureTWO {
public TestProcedureTWO() {
}
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
try {
Class.forName(driver)
conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ")
CallableStatement proc = null
proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }")
proc.setString(1, "100")
proc.registerOutParameter(2, Types.VARCHAR)
proc.execute()
String testPrint = proc.getString(2)
System.out.println("=testPrint=is="+testPrint)
}
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) {
}
}
}
}
}
注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR
end TESTPACKAGE
2,建立存储过程,存储过程为:
CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB
END TESTC
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
在java里调用时就用下面的代码:
package com.hyq.src
import java.sql.*
import java.io.OutputStream
import java.io.Writer
import java.sql.PreparedStatement
import java.sql.ResultSet
import oracle.jdbc.driver.*
public class TestProcedureTHREE {
public TestProcedureTHREE() {
}
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
try {
Class.forName(driver)
conn = DriverManager.getConnection(strUrl, "hyq", "hyq")
CallableStatement proc = null
proc = conn.prepareCall("{ call hyq.testc(?) }")
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR)
proc.execute()
rs = (ResultSet)proc.getObject(1)
while(rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>")
}
}
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) {
}
}
]
]
函数更是简单,具体的别人已经给更详细的说明,参考这个
http://zhidao.baidu.com/question/1567623.html?si=8
请注意看如下代码:public List getObject(String sql, Object[] object) { //sql执行语句,object是你sql语句里面的参数
List list = new ArrayList()
Connection con = null
PreparedStatement pre = null
ResultSet rs = null
try{
con = C3P0Util.getInstance().getConnection()//这是你获得数据库连接,你把这里改成调用你自己写的jdbc方法
pre = con.prepareStatement(sql)//执行sql语句
if(object!=null){
for(int i=0i<object.lengthi++){
pre.setObject(i+1, object[i])//给sql里面的参数进行赋值
}
}
rs = pre.executeQuery()
while(rs.next()){
Users u = new User()
u.setUserName(rs.getString("UserName"))
u.setUserPas(rs.getString("UserPas"))list.add(u)
}
}catch(Exception e){
e.printStackTrace()
return null
}finally{
C3P0Util.close(con, pre, rs)//关闭数据库资源
}
return list//返回list集合
}
注意:list里面保存的是User对象的信息
你要获得User对象的信息,那么就要遍历list
for(int i=0i<list.sizei++){
User u = (User)list.get(i)System.out.println("UserName:"+u.getUserName())
System.out.println("UserPas:"+u.getUserPas())
} 上面是针对list里面有很多个User对象,当然list里面只有一个User对象,也是可以的。
如果你的list里面只有一个User,那么可以直接:User u = (User)list.get(0)
System.out.println("UserName:"+u.getUserName())
System.out.println("UserPas:"+u.getUserPas())
希望对你有帮助!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)