javajdbc存储过程
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;
⑵ 通过jdbc怎么调用存储过程
使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列,ResultSet rs = stmt.executeQuery("{call dbo.ProcereName}"); 调用带参数的存储过程时,必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列 CallableStatement cstmt = con.prepareCall("{call dbo.ProcereName(?, ?)}"); cstmt.setInt(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));
⑶ Java里面的JDBC是什么意思啊
Java数据库连接是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。
这种类型的驱动把所有JDBC的调用传递给ODBC,再让后者调用数据库本地驱动代码(也就是数据库厂商提供的数据库操作二进制代码库,例如Oracle中的oci.dll)。
API概述
JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括(斜体代表接口,需驱动程序提供者来具体实现):
DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。
可以产生用以执行SQL的Statement。Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。CallableStatement:
用以调用数据库中的存储过程。SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。
⑷ java中怎么用存储过程啊
public String deleteTopoData(final String Id) {
String str="";
str = (String)jdbcTemplate.execute(new ConnectionCallback(){
public Object doInConnection(Connection conn) throws SQLException,
DataAccessException {
conn.setAutoCommit(true);
CallableStatement stmt = null;
stmt = conn.prepareCall("{call PK_TEST.deleteData(?,?)}");
stmt.setString(1, Id);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute();
String out=stmt.getString(2);
stmt.close();
conn.setAutoCommit(true);
return out;
}
});
return str;
这是一个用jdbc调用存储过程,并返回一个字符串的例子,希望能帮到你
⑸ java jdbc 如何从存储过程的结果集中获取列名
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
//获取第一列的列名
String name = rsmd.getCatalogName(1);
⑹ java jdbc连接数据库调用存储过程插入数据
什么对于你来说是最关键的?
首先你会不会jdbc连接数据库执行一般的
sql语句
?如果不会,先去搜这方面的东西。
如果你只是纠结于
存储过程
在java中的调用,那么步骤如下:
1.事先写一个存储过程xx
2.用jdbc连接数据库执行语句“exec
xx”就可以了。如果存储过程带参数a和b,语句就是“exec
xx
a
b”
⑺ JavaJDBC连接Oracle实现对数据库增删改变做存储过程调用。 怎么做啊 代码是什么啊
代码都太大了都是一个工程的。15M,
说下思路,写4个class,一个用来画主界面,一个用来处理逻辑操作,一个用来增加,修改界面,一个用来处理增加,修改逻辑。
主界面类用3个panle,北,中,南,上面放查询控件,查询按钮,中间放table,下面放其他按钮。
将主界面类作为逻辑处理操作类的一个属性。让他能访问到主界面类中相应的控件。写上对于的控件事件出来就可以了。
⑻ java怎样通过jdbc来访问oracle数据库的存储过程和存储函数
//存储过程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();
}
}
⑼ 1,如何在JDBC里面调用一个存储过程
最近做一个自动发邮件的schele,由于取数据的sql太长,直接分割很麻烦,就想到调用PL/SQL,网上查了资料做了练习,在此做下小结。
1、只有输入参数而没有返回结果的存储过程。
sql:
1 create or replace procere prc_1(deptno in number,dname in varchar2,loc in varchar2)
2 is
3 begin
4 insert into dept values(deptno,dname,loc);
5 end prc_1;
java:
1 static void test1(){
2 Connection conn=null;
3 CallableStatement csmt=null;
4 try {
5 conn=JDBCUtils.getConnection();
6 conn.setAutoCommit(false);
7 csmt=conn.prepareCall("call prc_1(?,?,?)");
8 csmt.setInt(1,80);
9 csmt.setString(2,"ioc");
10 csmt.setString(3,"fhp");
11 csmt.execute();
12 conn.commit();
13 System.out.println("success insert data");
14 } catch (SQLException e) {
15 e.printStackTrace();
16 }
17 }
2、有输入参数且有一个返回值的存储过程。
sql:
1 create or replace procere prc_2(p_deptno in number,p_loc out varchar2) is
2 begin
3 select loc into p_loc from dept where deptno=p_deptno;
4 end prc_2;