Oracle дополняет значения в столбцах char, поэтому, если я вставлю «a» в столбец CHAR (2), я не смогу получить эту запись, сравнив этот столбец с «a», я должен получить ее, сравнив ее с «a». Правильно?
Для решения этой проблемы драйвер Oracle jdbc имеет свойство fixedString, но я не могу заставить его работать. (ищите fixedString здесь )
Я использую драйвер ojdbc14.jar для Oracle 10gR2 и обращаюсь к базе данных 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();
}
Приведенный выше код выполняется нормально (без исключений), но ResultSet пуст после выполнения executeQuery ().
Если я изменю строку (*) на
ps.setObject(1, "abc ");
Тогда я получаю столбец, который хотел. Похоже, что драйвер игнорирует параметр fixedString.
Я также пытался изменить строку (*) для
ps.setObject(1, "abc", java.sql.Types.CHAR);
Но полученный ResultSet снова пуст. Чего мне не хватает?
Заранее спасибо