Oracle在char列中填充值,因此如果我在CHAR(2)列中插入“a”,那么我不能通过将该列与“a”进行比较来获得该记录,我应该通过将其与“a”进行比较来获得它. 对吗?
为解决此问题,Oracle jdbc驱动程序具有fixedString属性,但我无法使其工作。 (在此处查找fixedString)
我正在使用ojdbc14.jar驱动程序访问Oracle 10gR2数据库。
这是我的代码:
try {
Properties props = new Properties();
props.put("user", "****");
props.put("password", "****");
props.put("fixedString", true);
Class.forName("oracle.jdbc.driver.OracleDriver");
String jdbcUrl = "jdbc:oracle:thin:@<host>:<port>:<sid>";
Connection connection = DriverManager.getConnection(jdbcUrl, props);
PreparedStatement ps = connection.prepareStatement(
"SELECT * FROM MY_TABLE WHERE MY_TABLE_ID = ?");
ps.setObject(1, "abc"); // (*)
// MY_TABLE_ID is CHAR(15)
ResultSet rs = ps.executeQuery();
while (rs.next())
{
System.out.print("data: ");
System.out.println(rs.getString("MY_TABLE_ID"));
}
rs.close();
ps.close();
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
以上代码执行良好(没有抛出异常),但执行executeQuery()后ResultSet为空。
如果我将(*)这行更改为
ps.setObject(1, "abc ");
然后我得到了我想要的那一列。因此,看来驱动程序忽略了fixedString选项。
我也已经尝试更改 (*) 那一行。
ps.setObject(1, "abc", java.sql.Types.CHAR);
但我得到的ResultSet又是空的。 我错过了什么?
提前表示感谢 (Tíqián biǎoshì gǎnxiè)