ALTER procedure [User].[pTest]
@data varbinary(max) out
,@name nvarchar(max) = null
,@date datetime
as
begin
.
.
.
@Entity
@NamedStoredProcedureQuery(name = "User.getUser", procedureName = "User.pTest", parameters = {
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "data", type = byte[].class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "name", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "date", type = Date.class)
})
@Data //lombok
public class User {
// serves no purpose other than to meet
// JPA requirement
@Id
private Long id;
}
存储库代码是
public interface UserRepository extends Repository<User, Long> {
@Procedure("User.pTest")
byte[] getUserSession(@Param("name") String name,
@Param("date") Date date
);
}
我的测试代码如下所示,当我运行它时,我会得到错误:
@Test
public void testGettingApxSession() {
Calendar cal = new GregorianCalendar(2016,6,5);
byte[] b = userRepository.getUserSession("myName", cal.getTime());
}
当我注销@data
时,使用:
StringBuilder sb = new StringBuilder();
for (byte a : b) {
sb.append(String.format("%02X ", a));
}
使用Microsoft的JDBC驱动程序并将输出参数类型指定为blob
:
@Entity
@NamedStoredProcedureQuery(name = "User.getUser", procedureName = "User.pTest", parameters = {
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "data", type = Blob.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "name", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "date", type = Date.class)
})
注意:这将不适用于JTDS。它仍然会截断任何大于8000字节的内容。
如果需要将blob
传递回SQL Server,则必须按以下方式转换回字节数组:
byte[] bytes = blob.getBytes(1, (int) blob.length());
存储过程以完整的响应(>4000个字符)回答,但我无法从Java打开它。我尝试过jTDS和微软的JDBC驱动程序6.0。下面是我的代码: 这适用于Sybase中的存储过程。
输入/输出示例: infoData序列化输入:总长度5191 当,NVARCHAR(1000),infoData值:总长度-1003 帮助我获得完整的info_Data原样,没有任何丢失或截断。 提前道谢。
问题内容: 各自的优缺点是什么? 我的要求是: 我希望能够加密图像 可以通过Web服务器(RESTful API)在移动设备上轻松访问 可通过本地数据库(如SQLLite)在移动设备上轻松访问 服务器端使用的数据库是MS SQL2005。我相信SQLLite和MS SQL 2005可以同时支持varchar和varbinary(sqllite上的BLOB) 问题答案: Base64在一个字节中仅使
我通过Hibernate调用了一个带有OUT参数的存储过程,得到了以下错误: 我的存储过程: Hibernate映射: 我按如下方式调用了存储过程: 有人能解释一下这段代码有什么问题吗?
问题内容: 我已经使用PDO一段时间了,并且正在重构一个项目,以便它使用存储的proc而不是内联SQL。我收到一个我无法解释的错误。我正在使用PHP版本5.3.5和MySQL版本5.0.7。 我只是想获得一个带有输出的基本存储过程。这是存储的过程: 这是我用来调用proc的代码,$ db是PDO的一个实例: 简单吧?但是,它导致以下错误: 如果我直接这样调用proc: 它按预期工作,这使我相信PH
我想用java调用一个记录类型表的存储过程。记录只包含数字,但我必须传递整数和小数。 我还没有为我的问题找到合适的解决方案(无论是OracleCallableStatement还是StoredProcedurey)。