使用PreparedStatement模板问题

时间:2011-02-17 08:51:19

标签: java jdbc prepared-statement

这是我的静态工具:

 //String sqlQuery = "select count(name) as num from tbname where name = ?"
    //String name = "testString";

    private static int correct(Connection connection, String sqlQuery, String name) {
        int result = 0;
        PreparedStatement statatement = null;
        ResultSet rs = null;
        try {
            statatement = connection.prepareStatement(sqlQuery);
            statatement.setString(1, name);
            rs = statatement.executeQuery();
            while (rs.next()) {
                result = rs.getInt("num");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                statatement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e.getMessage());
            }
            return result;
        }
    }

上面的方法返回0(不正确的结果),但是下面的方法返回'1'(它工作正常,它是相同的sql查询):

//String sqlQuery = "select count(name) as num from tbname where name = 'testString'"

    private static int correct(Connection connection, String sqlQuery, String name) {
        int result = 0;
        PreparedStatement statatement = null;
        ResultSet rs = null;
        try {
            statatement = connection.prepareStatement(sqlQuery);
            rs = statatement.executeQuery();
            while (rs.next()) {
                result = rs.getInt("num");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                statatement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e.getMessage());
            }
            return result;
        }
    }
你能不能给我任何建议,所以我可以解决这个问题。

PS:我不确定它是否重要,但实际的streetName - 在windows-1251编码(俄语)文本中有一个名称。 PPS:数据库是Oracle 10。

2 个答案:

答案 0 :(得分:0)

似乎编码与您在数据库编码字符集中设置的编码冲突以及您传递的字符串...

你可以做2次尝试 1.将DB编码设置为UTF-8,然后尝试。如果这不起作用,您可以使用以下第二个选项

  1. 将DB编码字符集设置为UTF-8,并使用此字符串构造函数String(byte[] bytes, String charsetName)
  2. 设置字符串

    我希望这可以帮到你。

答案 1 :(得分:0)

这可能是字符集问题。根据{{​​3}}:

  

以下是已知的列表   问题/限制:

     
      
  • 如果数据库字符集是AL32UTF8,您可能会看到错误   以下情况:   
        
    • 访问LONG和VARCHAR2数据类型。
    •   
    • 使用setString()和setCharacterStream()绑定数据。
    •   
  •   

因此,如果您的数据库字符集是AL32UTF8,则可能必须将其更改为其他字符集。

此外,您的列的数据类型是什么? VARCHAR2?