我正在使用jdbc,我将SQL查询存储在一个接口或类中,并将所有这些查询存储为public static
和final
。说:
public static final QUERY_1="insert into table1 (c11,c12) values (?,?)";
public static final QUERY_1="insert into table2 (c21,c22) values (?,?)";
观察上面两个字符串我认为insert ,into ,(,),
值所有这些东西出现在两个语句中。所以不是在字符串中都有它们我将它们作为常量并在运行时通过字符串操作创建查询但我我担心是否会妨碍表演。
建议的方法是什么?
答案 0 :(得分:2)
不要这样做。
public static final QUERY_1="insert into table1 (c11,c12) values (?,?)";
是编译时常量(作为字节码的一部分)。在用实际参数替换?
之后将创建一个新的String,然后它将被执行。似乎过早优化分别使用insert
和into
字符串。
答案 1 :(得分:1)
如果尝试中间解决方案怎么办?不是将单独的查询保持为常量,而是在运行时创建查询但只创建一次,然后对其进行缓存。从第二次开始使用相同的预生成查询。
为此,您可以创建一个QueryGeneratorFactory类,它将根据您的值为您提供查询。这将首次创建每个查询,并将查询保留在缓存中,并以您传递的值键入。
下次当您使用相同的值调用生成器时,它将从缓存中返回查询。