我想构建一个SQL字符串来进行数据库操作(更新、删除、插入、 Select ,诸如此类的事情)——而不是使用数百万个"+"和引号的糟糕的字符串concat方法,这最多是不可读的——必须有更好的方法.

我确实想过使用MessageFormat——但它应该用于用户消息,尽管我认为它会做一个合理的工作——但我想java SQL库中应该有更符合SQL类型操作的东西.

Groovy有什么好处吗?

推荐答案

首先考虑在准备好的语句中使用查询参数:

PreparedStatement stm = c.prepareStatement("UPDATE user_table SET name=? WHERE id=?");
stm.setString(1, "the name");
stm.setInt(2, 345);
stm.executeUpdate();

可以做的另一件事是将所有查询保存在属性文件中.例如

update_query=UPDATE user_table SET name=? WHERE id=?

然后在一个简单实用程序类的帮助下:

public class Queries {

    private static final String propFileName = "queries.properties";
    private static Properties props;

    public static Properties getQueries() throws SQLException {
        InputStream is = 
            Queries.class.getResourceAsStream("/" + propFileName);
        if (is == null){
            throw new SQLException("Unable to load property file: " + propFileName);
        }
        //singleton
        if(props == null){
            props = new Properties();
            try {
                props.load(is);
            } catch (IOException e) {
                throw new SQLException("Unable to load property file: " + propFileName + "\n" + e.getMessage());
            }           
        }
        return props;
    }

    public static String getQuery(String query) throws SQLException{
        return getQueries().getProperty(query);
    }

}

您可以使用以下查询:

PreparedStatement stm = c.prepareStatement(Queries.getQuery("update_query"));

这是一个相当简单的解决方案,但效果很好.

Sql相关问答推荐

如何实现一个广泛的多级自连接PostgreSQL查询?

如何在幂函数中正确使用Power()和Exp()

删除MariaDB数据库中的JSON数据

按每天的最大值分组

为什么两个不同的窗口函数给出不同的排序结果?

将重复的值更新为下一个空闲数字

雅典娜嵌套Json提取液

SQL:如何在表中同时使用GROUPING和CONDITION?

根据开始日期和结束日期的差异计算每天的计费

在WHERE EXISTS子查询中,列返回是否重要?

postgres中的条件索引和触发器

使用CTE在SNOWFLAKE中创建临时表

从每月生成的系列中生成每日汇率

Oracle 21c 中的递归查询回顾过go 3 周

使用 GROUP BY 时如何创建其他组?

将 MERGE 语句与 Oracle PL/SQL 表类型一起使用时,导致无效数据类型错误的原因是什么?

过滤具有一对多关系的两个表之间的数据

使用 R 遍历 SQL 查询,每次替换一个变量

如何从 2 个 SQLite 表构建嵌套对象?

有条件求和