J'ai copié le texte à partir d'ici: http://code.google.com/p/mybatis/issues/detail?id=164, mais nous avons rencontré le même problème.MyBatis: procédure stockée Sybase renvoie zéro lignes
mybatis Version 3.0.1
J'utilise mybatis 3 en tant que OU mappage entre l'application Java et la base de données Sybase. Le sql utilisé pour interroger les données de la base de données est une procédure stockée, il est correct pour une procédure simple, mais si une variable interne est déclarée et utilisée dans la procédure stockée, elle semble ne pas fonctionner correctement, le résultat de la requête est nul. il n'y a aucune exception jetant. Ci-dessous est le code d'exemple, et je joins également en pièce jointe. JavaBean:
public class Test {
private String input1;
private String input2;
public String getInput1() {
return input1;
}
public void setInput1(String input1) {
this.input1 = input1;
}
public String getInput2() {
return input2;
}
public void setInput2(String input2) {
this.input2 = input2;
}
}
sqlmap:
<mapper namespace="cargoStatus_shipment">
<resultMap id="testMap" type="com.icil.esolution.cargoStatus.AS.model.Test">
<result column="result1" jdbcType="VARCHAR" property="input1" />
<result column="result2" jdbcType="VARCHAR" property="input2" />
</resultMap>
<select id="getValidData" statementType="CALLABLE" resultMap="testMap" parameterType="String">
{call tempdb..testSP #{in}}
</select>
</mapper>
procédure stockée:
use tempdb
go
drop proc testSP
go
create proc testSP
@in varchar(10)
as
declare @var char(3)
select @var="XXX"
select result1= '1', [email protected]
go
grant exec on testSP to public
go
code Java:
public class TestSP {
private static SqlSessionFactory createSqlMapper() throws IOException {
String resource = "resources/sqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
return new SqlSessionFactoryBuilder().build(reader,"development");
}
public static void main(String[] args) {
SqlSession session=null;
try {
session = createSqlMapper().openSession(ExecutorType.SIMPLE, true); //autocommit = true
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in open Session. Cause: " + e);
System.exit(1);
}
List result = (List) session.selectList("getValidData", "mydata");
System.out.println("Result = "+result);
System.out.println(result.get(2).getInput2());
}
}
normalement le résultat devrait être:
DEBUG PreparedStatement - ==> Executing: {call tempdb..testSP ?}
DEBUG PreparedStatement - ==> Parameters: mydata(String)
DEBUG ResultSet -
mais en réalité, il n'y a aucun résultat, ni obtenir des exceptions:
DEBUG PreparedStatement - ==> Executing: {call tempdb..testSP ?}
DEBUG PreparedStatement - ==> Parameters: mydata(String)
après compteur test, si je retire la @var la variable interne de la SP, ce sera ok.
use tempdb
go
drop proc testSP
go
create proc testSP
@in varchar(10)
as
select result1= '1', [email protected]
go
grant exec on testSP to public
go
Pourriez-vous Pls vérifier quel est le problème et que dois-je faire pour que je puisse appeler ce genre de procédure stockée?