免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9106 | 回复: 13
打印 上一主题 下一主题

[数据库] Java调用oracle中函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-29 12:36 |只看该作者 |倒序浏览
本帖最后由 技术小菜鸟 于 2013-10-29 12:44 编辑
  1. //Java程序调用oracle中的函数
  2. import java.sql.*;
  3. public class orafun1 {

  4.        
  5.         public static void main(String[] args) {
  6.                 try{
  7.                         //加载驱动
  8.                         Class.forName("oracle.jdbc.driver.OracleDriver");
  9.                         //得到连接
  10.                         Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","SCOTT","yss1019");
  11.                         //创建一个CallableStatement
  12.                         CallableStatement cs = ct.prepareCall("? call sp_fun(?)");
  13.                         //注册返回值类型
  14.                         cs.registerOutParameter(1,Types.NUMERIC);
  15.                         cs.setString(2,"SCOTT");
  16.                         //调用
  17.                         cs.execute();
  18.                         System.out.println("年薪:" + cs.getInt(1));
  19.                         cs.close();
  20.                         ct.close();
  21.                                
  22.                 }catch(Exception e){
  23.                         e.printStackTrace();
  24.                 }
  25.        

  26.         }

  27. }
复制代码
代码如上:
下面是报错信息:
  1. java.sql.SQLException: ORA-00900: 无效 SQL 语句

  2.         at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
  3.         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
  4.         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
  5.         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:742)
  6.         at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:211)
  7.         at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:950)
  8.         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1159)
  9.         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3284)
  10.         at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3389)
  11.         at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4222)
  12.         at orafun1.main(orafun1.java:18)
复制代码
求教各位啦!

论坛徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午马
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
2 [报告]
发表于 2013-10-29 13:25 |只看该作者
本帖最后由 www_xylove 于 2013-10-29 13:25 编辑

没见你调用什么oracle函数啊,你只想通过java程序得到scott的年薪而已。

//创建一个CallableStatement

                        CallableStatement cs = ct.prepareCall("? call sp_fun(?)");

这里有问题,你的求取年薪的语句呢?

java.sql.SQLException: ORA-00900: 无效 SQL 语句

这也告诉你了。

论坛徽章:
0
3 [报告]
发表于 2013-10-29 16:39 |只看该作者
回复 2# www_xylove

sp_fun是我在oracle中创建的一个function,这个函数返回的是Scott的年薪,我想在Java的myeclipse中调用它
   

论坛徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午马
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
4 [报告]
发表于 2013-10-30 10:28 |只看该作者
回复 3# 技术小菜鸟

贴一下这个函数的内容



   

论坛徽章:
0
5 [报告]
发表于 2013-10-30 16:29 |只看该作者
回复 4# www_xylove
  1. create or replace function sp_fun(spName varchar2) return number is
  2. yearSal number(7,2);
  3. begin
  4. select sal*12+nvl(comm,0)*12 into yearSal from emp where ename = spName;
  5. return yearSal;
  6. end;
复制代码
代码如上

   

论坛徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午马
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
6 [报告]
发表于 2013-10-31 09:39 |只看该作者
这个计算年薪的函数,可以手动执行一遍,就是说,不放在java里调用。看是否能出结果,如果能出结果,就不说函数的问题,就是java写的右问题;如果不能出结果,报错。那么就是函数的问题。

论坛徽章:
0
7 [报告]
发表于 2013-10-31 16:24 |只看该作者
你试下这个:
CallableStatement cs = ct.prepareCall("? = call sp_fun(?)");

论坛徽章:
0
8 [报告]
发表于 2013-10-31 16:49 |只看该作者
回复 6# www_xylove
  1. SQL> var income number;
  2. SQL> call sp_fun('SCOTT')into:income;
  3. Method called
  4. income
  5. ---------
  6. 36000
复制代码
在pl/sql developer中运行函数结果没有错啊,就是不知道为什么Java调用不了

论坛徽章:
0
9 [报告]
发表于 2013-10-31 16:52 |只看该作者
回复 7# cow977

试过了,还是报错

   

论坛徽章:
0
10 [报告]
发表于 2013-11-01 08:07 |只看该作者
不能沉啊,不知道原因好难受啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP