【发布时间】:2013-01-09 20:57:27
【问题描述】:
我正在尝试从 MySQL 数据库表中检索数据。为此,我在各种平台上使用以下代码。我的代码在 Windows 和 Linux 平台上运行良好。但是当我在 AIX 6.1 中使用相同的代码时,它不会检索到正确的数据。
主要功能:
String storedstring = objDBUtil.lookup(0);
logger.info(storedstring);
数据库实用功能:
public String lookup(String number) throws Exception {
String sql = "SELECT info FROM records WHERE Snumber=?";
Connection dbConn = connect();
try {
PreparedStatement stmt = dbConn.prepareStatement(sql);
try {
stmt.setString(1, number);
ResultSet rs = stmt.executeQuery();
try {
if (!rs.next()) {
throw new TException("does not exist in the database");
}
return rs.getString(1);
} catch (Exception e) {
logger.info("Unexpected exception caught during auth: " + e.getClass().toString() + " " + e.getMessage());
return null;
}finally {
rs.close();
}
} finally {
stmt.close();
}
} finally {
dbConn.close();
}
}
Windows 上主函数的输出,我从数据库中获取整个字符串。但是确切的代码给了我在 AIX 机器上的加密值。
AIX 机器上的输出 [B@62637268
【问题讨论】:
-
不是加密值。它是对象的
toString()方法的返回值,它是booleans 的数组,JVM 用数字62637268唯一标识它(有点像指针,但你知道,Java 没有指针)。为了比较,测试以下代码:new Object().toString(); -
与问题无关:此外,我想知道
number是否真的必须是字符串而不是 int 或 BigInteger,这还可以防止格式错误或恶意参数的利用。 -
@ignis 基于javadoc,
[B表示字节数组而不是布尔值,作为数据库查询的结果更合理。 s -
@billc.cn 是的,你是对的,对不起。
-
INFO 字段的数据类型是什么?而不是 rs.getString(1) 你可以尝试 rs.getObject(1) 看看你得到了什么。这应该会给你一些关于如何进行的想法。
标签: java mysql database linux aix