在Java中准备动态语句的正确方法 [英] The proper way to prepare a dynamic Statement in Java

查看:36
本文介绍了在Java中准备动态语句的正确方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在根据通过查询字符串传递的值准备一条SQL语句。(我在用这出戏!框架。基本上,我遇到的(不是真正的问题,只是我不太喜欢的事情)是,当我想在SQL字符串中使用?并在以后用动态值设置它们时。

这是我拥有的:

String sql = "SELECT * FROM foobar_table WHERE";

if ( foo != 0 )
    sql += " AND foo=?";
if ( !bar )
    sql += " AND bar=?";

try{
    PreparedStatement getStmt = con.prepareStatement(sql);
    if ( foo != 0 )
        getStmt.setInt(1,foo);
    if ( foo != 0 && !bar )
        getStmt.setBoolean(2, bar);
    else
        getStmt.setBoolean(1, bar);
} catch (SQLException e ){
    e.printStackTrace();
}

这确实有效,但如您所见,不是很直观。当有2个动态值时,这是可以的,但当你达到5或6时,这就变得荒谬了。

有没有更简单的方法使它更灵活,以便我知道如何更好地填写所有?

推荐答案

示例(太长,无法进行注释):

String sql = "SELECT * FROM foobar_table WHERE 1 = 1 ";
ArrayList paramList = new ArrayList();

if ( foo != 0 ) {
    sql += " AND foo=?";
    paramList.add(foo);
}

if ( !bar ) {
    sql += " AND bar=?";
    paramList.add(bar);
}

try{

    PreparedStatement getStmt = con.prepareStatement(sql);

    int index = 1;

    for (Object param : paramList) {
        getStmt.setObject(index, param);
        index++;
    }

    // execute

} catch (SQLException e ){
    e.printStackTrace();
}

这篇关于在Java中准备动态语句的正确方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆