如何在Java中"优雅地"生成String?

ray*_*ter 3 java string templates

我想生成一个字符串,如sql命令:

   "INSERT INTO xxx VALUES(XXX, XXX, XXX)"
Run Code Online (Sandbox Code Playgroud)

目前我使用StringBuilder和一些String常量像"INSERT INTO"来连接表名和插入值的输入字符串参数.

但是,除了性能问题之外,这种简单的连接看起来并不优雅.有没有其他方法这样做?

在我看来,JDBC的预处理语句是这种"命令模板"的一个很好的例子:

PreparedStatement pstmt=connection.createPreparedStatement("INSERT INTO ? VALUES(?,?,?)");
Run Code Online (Sandbox Code Playgroud)

然后你可以设置表名和插入值.

pstmt.setString(1,"tableA");
pstmt.setInt(2, 100);
...
Run Code Online (Sandbox Code Playgroud)

但是,我不能使用预备语句,因为我想要的只是String ...

有人给我一些提示使用java.util.Regex或JavaCC来生成String.但据我所知,无论选择什么代码优势问题,Java String必须由类似的东西生成StringBuilder,对吧???

dty*_*dty 13

你可以使用String.format():

String.format("insert into %s values('%s', '%s', '%s')", "user", "user123", "pass123", "yellow");
Run Code Online (Sandbox Code Playgroud)

值得注意的是,任何这些"字符串构建"技术都会让您容易受到SQL注入攻击.您应该尽可能使用JDBC参数化查询.

编辑在字符串周围添加引号.