sql-java 执行SQL Server 存储过程

问题描述

java 执行SQL Server 存储过程
存储过程 有 2个输入参数 为 int nvarchar 类型 1个输出参数 nvarchar类型

……

String orderNo=""""; // 返回值
con=BaseDao.getConn(); //获取连接
CallableStatement cstmt=null;
try {
cstmt=con.prepareCall(""{?=call proc_createOrder(??)}"");
cstmt.setInt(2uid );
cstmt.setString(3cardNoList);
cstmt.registerOutParameter(1java.sql.Types.NVARCHAR);
cstmt.execute();
orderNo=cstmt.getString(1);
return orderNo;
} catch (SQLException e) {
e.printStackTrace();
}finally{
BaseDao.closeAll(con cstmt rs);
}
return orderNo;

……

请帮忙检查下应该如何改

解决方案

这个要结合你的存储过程来看哪里有问题。
如果是运行出错,贴出
e.printStackTrace();
打印的错误信息。

解决方案二:
Exception in thread ""main"" java.lang.NullPointerException
at com.microsoft.sqlserver.jdbc.AppDTVImpl$SetValueOp.executeDefault(Unknown Source)
at com.microsoft.sqlserver.jdbc.DTV.executeOp(Unknown Source)
at com.microsoft.sqlserver.jdbc.AppDTVImpl.setValue(Unknown Source)
at com.microsoft.sqlserver.jdbc.DTV.setValue(Unknown Source)
at com.microsoft.sqlserver.jdbc.Parameter.sendByRPC(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.sendParamsByRPC(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(Unknown Source)
at com.jzlg.dao.imple.IOrdersdaoImple.addOrdersAndOrderDetail(IOrdersdaoImple.java:168)
at com.jzlg.dao.imple.IOrdersdaoImple.main(IOrdersdaoImple.java:180)

我在这个方法(addOrdersAndOrderDetail)外面写了个Main 方法验证出了以上的异常    

解决方案三:
空指针异常,你的这句执行后cstmt=con.prepareCall(""{?=call proc_createOrder(??)}"")获得了CallableStatement吗?我也是新手,也许不对

解决方案四:
try catch 捕获一下异常,然后打印出来看看是怎么回事儿

解决方案五:
使用logcat捕捉每一步骤的信息,无论是正确的还是错误的

解决方案六:
拜托 各位大神不要把问题复杂化 真正问题如下
java 执行SQL Server 存储过程 存储过程 有 2个输入参数 为 int nvarchar 类型 和 1个输出参数 nvarchar类型(一共3个参数)

    cstmt=con.prepareCall(""{?=call proc_createOrder(??)}"");  这句和下面的给参数赋值怎么写?
时间: 2024-12-31 19:39:23

sql-java 执行SQL Server 存储过程的相关文章

java 执行 sql 文件报错 求大神帮忙解决 急急急!!!!

问题描述 java 执行 sql 文件报错 求大神帮忙解决 急急急!!!! sql文件里边的内容 /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Version : 50096 Source Host : localhost:3306 Source Database : cemscenter1 Target Server Type : MYSQL Target Server Version :

java sql 脚本-java执行SQL脚本!!!!!

问题描述 java执行SQL脚本!!!!! 今天第一次用 java 执行sql脚本,是不是sql.out里边如果没东西就意味着成功?可我执行完成后表数据全都建好了 但是 sql.out里边显示的内容是这些 我需要做个判断 显示 是否成功 ,这个判断要怎么做?(重点是怎么才能根据sql.out里边的信息 来判断是否执行成功 ) 解决方案 sql.out 的显示信息 解决方案二: 看一下下面的代码处理方式http://mxm910821.iteye.com/blog/1701822

java执行SQL脚本的一个问题

问题描述 今天准备在java中,利用ant来执行sql脚本,进行数据相关脚本部署,如存储过程,建表等.运行过程中,出现了特别常见的sql语法错误.可以经过检查没有错误,为了保证没有错误,还特地在sqlserver的控制台直接用source来执行了一次,同样没有错误.sqlExec.setDriver(driver);sqlExec.setUrl(db);sqlExec.setUserid(user);sqlExec.setPassword(password);//有出错的语句该如何处理sqlEx

Java执行sql语句并获取指定返回值

当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1.先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2.使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值: 3.对于Oracle,使用 sequence 获取值. 对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性. 现记录以下几种获取数据库主键值方法: 1.数据库原生支持的sql

c#-C#程序调用SQL SERVER存储过程的output参数始终为空,求助?

问题描述 C#程序调用SQL SERVER存储过程的output参数始终为空,求助? C#中的如下两条语句调用存储过程output参数始终为空(dataGridView1能正确调用到想要的select数据,但是存储过程的两个输出参数值不能传递给两个texBox.Text),不知为何?textBox1.Text = parameters[2].Value.ToString();textBox2.Text = nowpage + ""/"" + parameters[3

Java连接Sql数据库经常用到的操作_java

废话不多说了,直接给大家分享java操作sql数据库常见的连接问题. 1.连接,查询,更新,关闭 这几个数据基础操作,所以放到一起,写成一个工具类的模式,也就是model2模式的sql工具.这里本想把其他操作都加进去,比如事务处理,但是目前还没想到比较完美的方法,具体看代码吧,注释很详细 import java.sql.*; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Created b

sql-Java执行SQL的insert语句

问题描述 Java执行SQL的insert语句 public class JDBC_2 { public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/xskc"; String user = "root"; String pwd = "mch

SQL Server 存储过程遇到“表 ''#TT'' 没有标识属性无法执行 SET 操作”错误_MsSql

创建临时表,往临时表插入数据的时候报的错误. 一开始提示没有打开主键,后来打开主键就提示上述错误异常. 从网上查找资料没有找到,然后又到群里问各位大牛,一位大牛告诉我是没有设置主键. 我又仔细看看提示,恍然大悟,我就给临时设置了主键. 没有主键之前的代码: CREATE TABLE #TT( CourseId INT , UserId INT, ClassId INT ) INSERT INTO #TT ( CourseId, UserId, ClassId ) SELECT CourseId,

SQL Server 存储过程遇到“表 ''#TT'' 没有标识属性无法执行 SET 操作”错误

创建临时表,往临时表插入数据的时候报的错误. 一开始提示没有打开主键,后来打开主键就提示上述错误异常. 从网上查找资料没有找到,然后又到群里问各位大牛,一位大牛告诉我是没有设置主键. 我又仔细看看提示,恍然大悟,我就给临时设置了主键. 没有主键之前的代码: CREATE TABLE #TT( CourseId INT , UserId INT, ClassId INT ) INSERT INTO #TT ( CourseId, UserId, ClassId ) SELECT CourseId,