- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在使用 JdbcTemplate 读取 MySQL 的 VARBINARY 字段时遇到问题。我们将字符串缩写(“ABC”、“XYZ”、“LMN”等)存储为 VARBINARY(不要问我为什么)。奇怪的是,当我使用 Connection 类/PreparedStatement 路由和普通的旧 ResultSets 与 SqlRowSet 时,我在读取 String 时没有问题。也就是说,
此代码有效:
String sql = "select MY_VARBINARY_FIELD from MY_TABLE where KEY1=? and KEY2=?";
PreparedStatement stmt = connectionDev.prepareStatement(sql);
prepStmt1.setInt(1, key1);
prepStmt1.setInt(2, key2);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String s = rs.getString("MY_VARBINARY_FIELD");
System.out.print(s + " ");
}
**Output:** AHI-1 DKFZp686J1653 FLJ14023 FLJ20069 JBTS3 ORF1 dJ71N10.1
但是这段代码没有:
String sql = "select MY_VARBINARY_FIELD from MY_TABLE where KEY1=? and KEY2=?";
Object[] params = {key1, key2};
SqlRowSet rows = getJdbcTemplate().queryForRowSet(sql, params);
while (rows.next()) {
String s = rows.getString("MY_VARBINARY_FIELD");
System.out.print(s + " ");
}
**Output:** [B@3a329572 [B@4ef18d37 [B@546e3e5e [B@11c0b8a0 [B@399197b [B@3857dc15 [B@10320399
为什么 SqlRowSet 和 ResultSet 为 VARBINARY 生成不同的字符串表示形式?以及如何使用 JdbcTemplate/SqlRowSet 获得“正确”的表示?
谢谢!
解决方案
Mark Rotteveel(下)回答了这个问题。我让它与此一起工作:
String sql = "select MY_VARBINARY from MY_TABLE where KEY=VALUE";
SqlRowSet rows = getJdbcTemplate().queryForRowSet(sql);
while (rows.next()) {
byte[] varbinary = (byte[]) rows.getObject("MY_VARBINARY");
System.out.println(new String(varbinary));
}
最佳答案
[B@3a329572
等是字节数组上的 toString()
的结果。 VARBINARY
在 JDBC 中使用 byte[]
表示。当您直接在 PreparedStatement
上访问它时,驱动程序很可能会执行 new String(getBytes(idx))
,而 JdbcTemplate 可能会执行 getObject(idx)。 toString()
而不是,导致输出如 [B@3a329572
。
因此,要解决此问题,请在 JdbcTemplate 上执行 getBytes()
,然后自己将其转换为字符串,或者(更好的是)直接使用字节数组或更改将列数据类型改为 VARCHAR。
关于java - JdbcTemplate:以字符串形式访问 MySQL VARBINARY 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013534/
我创建了一个表来插入我的应用程序的所有文档。这是一个简单的表(我们称之为 DOC_DATA),它有 3 个字段:DOC_ID、FileSize、Data。数据是 varbinary(max)。 然后我
我有一个数据库,该数据库被设置为对 varbinary(max) 字段上的音频文件使用 blob FileStream。它的大小已经增长到 80GB 以上,我面临着性能问题。 环顾四周后,我发现我的平
在 SQL Server 2008 中从 varbinary(MAX) 字段(不使用 FileStreams)读取部分二进制数据的最有效方法是什么? 将数据写入列时,T-SQL 中可以使用 VarBi
我正在尝试将存储在 CONTEXT_INFO 中的 nvarchar 转换回。 declare @LanguageCode nvarchar(6) = 'en'; declare @binvar va
我正在尝试转换回存储在 CONTEXT_INFO 中的 nvarchar。 declare @LanguageCode nvarchar(6) = 'en'; declare @binvar varb
我有一张像: create table tbl ( id int, data image ) 发现栏目data尺寸非常小,可以存储在varbinary(200) 所以新表将是, create
我在 SQL 中有一个 varbinary 列,我希望该列始终是唯一的。但是,我看到 SQL 不允许在 varbinary 列上创建唯一约束。 是否有任何解决方法来确保这种唯一性?也许通过使用其他类型
有人请解释为什么选择 len(0x0a000b) 返回 3? len 计算字节数吗?为什么 select left(0x0a000b, 1) 什么都不返回?我期望 0x0a(如果 len 计算字节).
我将图像存储在数据库中的 varbinary(max) 字段中。 我正在尝试在我的表单上显示图片。我尝试了很多不同的方法,但没有显示出来。 这是我的代码: //I am adding an image
我们面临一个非常奇怪的问题。 当表列如下时,我们的 mssql 2008 R2 数据库中有一张表: 用户 ID - int 用户名 - varbinary(256) 用户类型 - int 并且 use
我正在尝试将 MSSQL 数据库移植到 MariaDB,并且遇到了使用 varbinary(max) 创建表的情况: `definition` VARBINARY(max) NULL DEFA
如何在 varbinary 中获取特定范围的字节数据? 例如长度 varbinary数据是 128,我只想得到 15-19 个字节。 最佳答案 SELECT SUBSTRING(VarbinaryCo
我正在使用以下命令将 .jpg 插入到 SQL Server 2012 中的 varbinary(max) 列中: INSERT INTO Employees VALUES(5, (SELECT *
基本上,我试图给用户一个特定的密码,以便我可以在系统上测试某些功能,因为我只有我们的管理员帐户,我不能玩,我只是选择一个随机帐户,以便我可以进行测试。所以这是我的更新尝试: UPDATE dbo.Lo
使用 SQL 2005 我有一个包含 5 列的表格 ID - int Param - smallint Data1 - image Data2 - image Data3 - image 图像大小可以
我想升级表中的所有列,我的目标是从要更新的行中检索一列然后更新它,例如: update works set encrpyted_item_no = (CAST(RTrim(( select u
我有一些 varbinary 数据存储在 MS Sql Server 2005 的表中。是否有人有将查询作为输入的 SQL 代码(假设查询保证返回单列 varbinary)并将字节输出到磁盘(每行一个
这个问题已经有答案了: Convert integer to hex and hex to integer (16 个回答) 已关闭10 年前。 这几乎是一个菜鸟问题,但我找不到解决方案。 我正在使用
我们使用 varchar(255) 在 mysql 中存储“关键字”。我们面临一个问题,即 mysql 会忽略“=”中用于比较目的的所有尾随空格。它确实尊重“like”比较中的尾随空格,但它不允许我们
我设法将 Image 转换为 varbinary 并将其存储在我的数据库中。我一直在尝试将 varbinary 转换为图像,但我在这里遇到了一些麻烦。 首先,我从服务中的数据库中获取二进制文件。
我是一名优秀的程序员,十分优秀!