【发布时间】:2011-04-27 11:50:48
【问题描述】:
我想生成一个字符串比如sql命令:
"INSERT INTO xxx VALUES(XXX, XXX, XXX)"
目前我使用StringBuilder 和一些String 常量,如“INSERT INTO”来连接表名和插入值的输入字符串参数。
但是,除了性能问题之外,这种简单的连接看起来并不优雅。 有没有其他方法可以做到这一点?
在我看来,JDBC 的预处理语句就是这种“命令模板”的一个很好的例子:
PreparedStatement pstmt=connection.createPreparedStatement("INSERT INTO ? VALUES(?,?,?)");
然后你可以设置表名和插入值。
pstmt.setString(1,"tableA");
pstmt.setInt(2, 100);
...
但是,我不能使用准备好的语句,因为我想要的只是字符串......
有人给了我一些使用java.util.Regex 或JavaCC 来生成字符串的提示。
但据我所见,无论为某些代码优雅问题选择什么,Java字符串都必须由StringBuilder之类的东西生成,对吧???
【问题讨论】:
-
请注意,通过连接字符串和变量值生成 SQL 语句会使您的程序容易受到 SQL 注入攻击;您需要自己正确转义这些值以防止这种情况发生。 (PreparedStatement 会自动为您执行此操作)。