Java 如何使用Oracle jdbc驱动程序fixedString属性?

Java 如何使用Oracle jdbc驱动程序fixedString属性?,java,oracle,jdbc,Java,Oracle,Jdbc,Oracle在char列中填充值,因此如果我在char(2)列中插入“a”,那么我无法通过将该列与“a”进行比较来获取该记录,我应该通过将其与“a”进行比较来获取该记录。对吧? 为了解决这个问题,oraclejdbc驱动程序具有fixedString属性,但我无法让它工作。(查找固定字符串) 我正在为Oracle 10gR2使用ojdbc14.jar驱动程序并访问Oracle 10gR2数据库 这是我的代码: try { Properties props = new Pr

Oracle在char列中填充值,因此如果我在char(2)列中插入“a”,那么我无法通过将该列与“a”进行比较来获取该记录,我应该通过将其与“a”进行比较来获取该记录。对吧?

为了解决这个问题,oraclejdbc驱动程序具有fixedString属性,但我无法让它工作。(查找固定字符串)

我正在为Oracle 10gR2使用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();
    }
然后我得到了我想要的专栏。因此,驱动程序似乎忽略了fixedString选项

我还试着为您更改行(*)

但我得到的结果集又是空的我错过了什么?


提前感谢

对于数据库中每个条目长度相同的字符串,您应该只使用CHAR。将VARCHAR用于可变长度字符串。

oracle文档真的令人愤怒。在你提出这个问题之前,我从未听说过这一点(这是我喜欢这个网站的原因之一)。对此进行了研究,发现一些参考文献提到它将使用“FIXED CHAR”语义,但没有描述它们如何工作或预期的返回值是什么,只有关于匹配和相等的行为。您可以使用“Like”进行查询吗?(当然要慢得多)关闭该查询的固定字符语义?是否仅将修剪后的值插入数据库

参考资料。

尝试将其用作

props.put("fixedString", "true");

Oracle文档称fixedString为字符串(包含布尔值)

这不是问题所在。我无法更改列定义,这不取决于我。您在提问时回答了自己的问题。字符是固定长度的。Oracle将填充字符串以匹配固定长度。你必须给它一根同样有垫子的绳子。VARCHAR将停止填充。问题是关于fixedString属性的。我刚刚添加了fixedString属性的引用。该属性仅适用于setObject(…)。调用setString(…)时,该属性无效。
ps.setObject(1, "abc", java.sql.Types.CHAR);
props.put("fixedString", "true");