【问题标题】:Why is question mark not working inside %%? [duplicate]为什么问号在 %% 内不起作用? [复制]
【发布时间】:2021-04-09 06:20:02
【问题描述】:

我使用java jdbc连接数据库sql server,但是%%里面的问号不工作

这是我的代码:

public List<Account> findBetween(String search, int start, int size) {
    try {
        ArrayList<Account> list = new ArrayList<Account>();
        String sql = "SELECT * FROM Account WHERE uname LIKE '%?%' ORDER BY user_id OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
        Connection conn = ConnectDB.openConnection();
        PreparedStatement st = conn.prepareStatement(sql);
        st.setNString(1, search);
        st.setInt(2, start);
        st.setInt(3, size);
        ResultSet rs = st.executeQuery();
        System.out.println(rs.getFetchSize());
        while (rs.next()) {
            list.add(new Account(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getNString(4), rs.getNString(5),
                    rs.getNString(6), rs.getString(7), rs.getString(8), rs.getDate(9), rs.getInt(10),
                    rs.getBoolean(11)));
        }
        ConnectDB.closeConnection();
        return list;
    } catch (Exception e) {
        e.printStackTrace();
        ConnectDB.closeConnection();
        return null;
    }           
}

【问题讨论】:

  • 我找不到一个好的来源,但基本上准备好的语句参数需要是一个完整的值,所以你需要使用LIKE ?并将%字符添加到search.

标签: java jdbc


【解决方案1】:

绑定变量在字符串文字中不起作用。

你必须绑定整个字符串

uname LIKE ?
st.setNString(1, "%" + search + "%")

或使用字符串连接

uname LIKE '%' || ? || '%'
set.setNString(1, search)

请注意,在这两种情况下,search 中包含的任何其他通配符也将有效,因此如果这是直接用户输入,您可能需要先对其进行清理。

【讨论】:

  • 它工作正常。谢谢
猜你喜欢
  • 2016-08-21
  • 2013-04-20
  • 2015-12-29
  • 2016-01-24
  • 2013-03-05
  • 2012-10-01
  • 2014-07-07
  • 1970-01-01
相关资源
最近更新 更多