我可以从蟾蜍sql服务器运行此查询。从JDBC调用Sqlserver存储过程,Java
exec msp_FormBsBa_yeni 0,'20150101','20150131',5000,0,2,0,null,1,null,0
从我的应用程序在java中,它产生错误,因为语句没有返回结果集。我尝试了很多东西,但我无法解决它。感谢您的帮助。
// Connection,Resultset ve PrepStatement Declaration
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rsa = null;
List<EntCari> listrows = new ArrayList<EntCari>();
try {
connection = ConnectionFactory.getConnection();
CallableStatement callableStatement = connection
.prepareCall("{call msp_FormBsBa_yeni(0,N'20150101',N'20150131',5000,0,2,0,null,1,null,0)}");
rsa = callableStatement.executeQuery();
// 2:resultset check
if (!rsa.next()) {
System.out.println("no data");
} else {
do {
// System.out.println("data exists");
// Statements
EntCari row = new EntCari();
row.setMusteriadi(rsa.getString("Unvan"));// rsa.getxxx("column")
listrows.add(row);
} while (rsa.next());
}
// 2---
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DbUtil.close(rsa);
DbUtil.close(pstmt);
DbUtil.close(connection);
}
蟾蜍sql server的结果如下。
Unvan | Ulkesi | VergiKimlikNo | TCKimlikNo | BelgeSayisi | Toplam | CariKod
customer a | 052 | 19697583840 | 1 | 2323,00 | HT00084
customer b | 052 | | 2 | 2111,00 | HT01022
存储过程是像下面(部分SP的,它是长)
/****** Object: Procedure [dbo].[msp_FormBsBa_yeni] Script Date: 18.04.2015 13:43:44 ******/
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE PROCEDURE dbo.msp_FormBsBa_yeni
@vFirmaNo as integer,
@IlkTarih as datetime,
@SonTarih as datetime,
@MinTutar as float,
@Bs_Ba_tip as bit,
@BirlestimeTuru as tinyint,
@SonradanMuhasebelesenSeriDahilEdilmesin_fl as bit,
@SonradanMuhasebelesenSeriStr nvarchar(MAX),
@Aylik_BsBa_fl as bit,
@PerakendeCariKodu AS nvarchar(25),
@EvrakDetayliRapor_fl as bit
AS
BEGIN /*dbo.fn_GetByteParam(1048)=1 ÖTV stok maliyetine eklensinmi*/
Declare @otv_vergino as tinyint
set @otv_vergino = dbo.fn_GetByteParam(855) /*ÖTV vergi tipi*/
Declare @otv_kdv_orani as FLOAT
set @otv_kdv_orani = 0.0
if @otv_vergino between 1 and 10
set @otv_kdv_orani = dbo.fn_VergiYuzde(@otv_vergino)
Declare @kontrol_belge_tarihinden as integer
set @kontrol_belge_tarihinden = dbo.fn_GetByteParam(4173) /*BsBa_Kontrol_Belge_tarihinden_fl*/
if exists (select * from tempdb..sysobjects where name LIKE '#BsBaEvrakDetayliTablo%') Drop Table dbo.#BsBaEvrakDetayliTablo
select
TABLONO,
MIN(CHRECNO) AS CHRECNO,
CARI,
MAX(TARIH) AS TARIH,
TIP,
SERI,
SIRA,
MAX(CINS)AS CINS,
MAX(BELNO)AS BELNO,
MAX(BELTAR)AS BELTAR...
,这是将错误信息
com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:394)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)
我想你提供的第一种方式,遗憾的是同样的结果。该语句不返回结果集 – bmtncy
的第二种方式,它给出了语法错误,因为括号应该在第一个之前?字符,并且正如我所看到的那样,不需要为我的问题使用参数。 – bmtncy
请您分享SP调用的**执行结果**。 –