存储进程的名字假设是a
然后你执行sql语句的时候就直接执行a 就行了,然后查看结果
然后你执行sql语句的时候就直接执行a 就行了,然后查看结果
解决方案 »
- 有人用过DOJO没,怎么用
- java里有isValidator(int[],int)函数吗?
- 怎样在服务器上运行hsqldb?
- 请教这个问题该怎么判断!!!!!!!!!!!!!!
- 选择文件后就自动上传,不必再点击“提交”按钮,能实现吗?一宿没睡了……
- 不知道java怎么调用.bat批处理文件?
- servlet下,怎样调用javabean?
- 严重: Servlet.service() for servlet [jsp] in context with path [] threw exception
- 怎样减少数据库的连接次数? 两分钟刷新一次,答案有效立即给分!
- tomcat 运行一段时间 网页就打不开 重启tomcat能打开
- 高分探讨小问题--关于jsp
- 请问,web上的权限设计一般有什么方法?
statement=con.prepareCall("{call sp_BackupData(?)}");
statement.registerOutParameter(1,java.sql.Types.VARCHAR);
statement.setString(1,varDate);
statement.execute();
statement.close();sp_BackupData (x) is my procedure
create or replace procedure p_test2(i in number) as
begin
insert into t values (i,'x'||to_char(i));
commit;
end;
/<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<html>
<body>
<table>
<tr><td>aaa</td><td>bbb</td></tr>
<%
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.1.6:1521:db";
Class.forName(driver);
Connection conn = DriverManager.getConnection(strUrl, "scott", "tiger"); String procedure = "{call p_test2 (?) }";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setInt(1,33);
cstmt.executeUpdate(); Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from t"); while(rs.next())
{
out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
} rs.close();
stmt.close();
conn.close();
%>
</table>
<p>
<%
out.print(conn.isClosed());
%></body>
</html>
</body>
</html>
我的存储过程是已经建好的,现在是要把使用这个存储过程的代码封装在JAVA里,然后在JSP中调用执行,最后返回成功与否的信息到JSP中输出。
我只是想把调用过程的语句写在JAVA里供JSP调用并判断是否执行成功。
部分代码如下:
JAVA部分:
public boolean executeUpdate_1(String ls_bh_1,String ls_bh_2)
{
boolean bupdate=false;
try
{
conn=DriverManager.getConnection(sConnStr,"labour","prospect");
Statement stmt=conn.createStatement();
CallableStatement cstmt = conn.prepareCall("{call labour_xtgl.Pro_unitelabour(?,?)}");
cstmt.setString(1,ls_bh_1);
cstmt.setString(2,ls_bh_2); int rowCount = cstmt.executeUpdate();
if(rowCount!=0)
{
bupdate=true;
}
}
catch(SQLException ex)
{
System.err.println("db.executeUpdate: " + ex.getMessage());
}
return bupdate;
}JSP部分:ls_bh_1 = obj_1.toString();
ls_bh_2 = obj_2.toString();boolean update = false;xtgl_gg gg = new xtgl_gg();update = gg.executeUpdate_1(ls_bh_1,ls_bh_2);if(update)
{
out.print("成功");
}
else
{
out.print("失败");
}我现在执行的结果总是显示“失败”,这个存储本身是肯定没问题的。我想知道是不是我哪里写错了。
CallableStatement statement;
statement=con.prepareCall("{call sp_BackupData(?)}");
statement.registerOutParameter(1,java.sql.Types.VARCHAR);
statement.setString(1,varDate);
statement.execute();
statement.close();sp_BackupData (x) is my procedure
CallableStatement statement;
statement=con.prepareCall("{call sp_BackupData(?)}");
statement.registerOutParameter(1,java.sql.Types.VARCHAR);
statement.setString(1,varDate);
statement.execute();
statement.close();
这些内容放到BEAN里呀,然后就是要判断它的执行是否成功。
该存储过程无返回值
statement.registerOutParameter(1,java.sql.Types.VARCHAR);
去掉
statement.setString(1,varDate);这句话改成cstmt.setString(1,ls_bh_1);
可以吗?varDate指的是具体的数据类型呢还是具体的参数呀?
我判斷是不是正确的执行的方法是看是否有例外產生.
/?SQL92 ? 12: labour_xtgl
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
at oracle.jdbc.driver.OracleSql.handleToken(OracleSql.java:152)
at oracle.jdbc.driver.OracleSql.handleODBC(OracleSql.java:112)
at oracle.jdbc.driver.OracleSql.parse(OracleSql.java:64)
at oracle.jdbc.driver.OracleConnection.nativeSQL(OracleConnection.java:762)
at oracle.jdbc.driver.OracleStatement.expandSqlEscapes(OracleStatement.java:4790)
at oracle.jdbc.driver.OracleStatement.parseSqlKind(OracleStatement.java:4779)
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:209)
at oracle.jdbc.driver.OracleCallableStatement.<init>(OracleCallableStatement.java:102)
at oracle.jdbc.driver.OracleCallableStatement.<init>(OracleCallableStatement.java:86)
at oracle.jdbc.driver.OracleConnection.privatePrepareCall(OracleConnection.java:736)
at oracle.jdbc.driver.OracleConnection.prepareCall(OracleConnection.java:622)
at _prospect._xtgl._xtgl_0ryxx_04_02__jsp._jspService(/prospect/xtgl/xtgl_ryxx_4_2.jsp:63)
at com.caucho.jsp.JavaPage.service(JavaPage.java:87)
at com.caucho.jsp.JavaPage.subservice(JavaPage.java:81)
at com.caucho.jsp.Page.service(Page.java:474)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:166)
at com.caucho.server.http.Invocation.service(Invocation.java:277)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:216)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Thread.java:484)JSP源文件如下:<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.Date" %>
<%@ page language="java" %>
<%@ page import="com.prospect.driver.*"%>
<%@ page import="oracle.jdbc.driver.*"%>
<%@ page import="com.prospect.utils.*"%>
<%@ page import="java.io.PrintStream"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.util.Hashtable"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.*"%><%
String sDBDriver="oracle.jdbc.driver.OracleDriver";
String sConnStr="jdbc:oracle:thin:@192.168.100.39:1521:gllf";
Connection conn=null;conn=DriverManager.getConnection(sConnStr,"labour","prospect");
//Statement stmt=conn.createStatement();String bh=request.getParameter("bh");
Object obj_1 = session.getAttribute("bh_1");
Object obj_2 = session.getAttribute("bh_2");
String ls_bh_1,ls_bh_2;ls_bh_1 = obj_1.toString();
ls_bh_2 = obj_2.toString();
CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour(?,?)}");
//statement.registerOutParameter(1,java.sql.Types.VARCHAR);
statement.setString(1,ls_bh_1);
statement.setString(2,ls_bh_2);
statement.execute();
statement.close();%>
CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour[(?,?)]}");
可不可以?
CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour(?,?)}");
应该是
CallableStatement statement = conn.prepareCall("{call labour_xtgl.Pro_unitelabour(?,?)}");
少了一个call至于前面那个为什么只显示“失败”是因为你不能通过executeUpdate的返回值判断运行是否成功,你可以在stored procedure中返回1或0来判断运行是否成功。