如何在Java中设置动态准备的查询语句?

时间:2015-11-25 10:39:59

标签: java mysql prepared-statement

我有一个jtable。我从mysql数据库运行数据。我使用带有预处理语句的查询:

"select * from customer where city=? and region=? and price>?"
 pst.setString(1,"rome")
 pst.setstring(2,"italy")
 pst.setdouble(3,"1500")

我的问题是,有一次我只需要一个参数(例如城市)。 我问你,每次查询时我都会改变,我可以设置dynimicaly数量的参数??

由于

1 个答案:

答案 0 :(得分:1)

(我认为将它们分成单独的查询是一个更好的解决方案,但如果你想这样做,也许这样的事情可以帮助你)

我曾经写过像这样的东西

public ArrayList<User> searchUsers(HashMap userProperties)
{
    ArrayList<User> foundUsers = new ArrayList<User>();

    String searchString = "select * from chatusers where ";
    int addedProps = 0;
    if (userProperties.get("username") != null && !userProperties.get("username").equals(""))
    {
        searchString += "nickname like '%" + userProperties.get("username") + "%'";
        addedProps++;
    }
    if (userProperties.get("firstname") != null && !userProperties.get("firstname").equals(""))
    {
        if (addedProps > 0)
            searchString += " AND ";
        searchString += "voornaam like '%" + userProperties.get("firstname") + "%'";
        addedProps++;
    }
    if (userProperties.get("lastname") != null && !userProperties.get("lastname").equals(""))
    {
        if (addedProps > 0)
            searchString += " AND ";
        searchString += "naam like '%" + userProperties.get("lastname") + "%'";
    }
....

当然你必须改变&#34; userProperties.get(&#34; prop&#34;)。到&#34;?&#34; (我知道我需要使用preparedStatements,这只是为了在我们看到预备声明之前在大学里傻了。

此外,我会以类似的方式继续实际绑定变量。 (跟踪你添加哪个变量的位置,你知道哪个索引,因为if语句)。