2011-09-24 99 views
2

我正在使用JDBC驱动程序,我的问题是将SQL查询存储在一个好的地方。重点是它会进行大量的查询。把sql查询放在哪里?代码样式。 Java的。 JDBC

Statement s = conn.createStatement(); 
s.executeUpdate ("DROP TABLE IF EXISTS animal"); 
s.executeUpdate (
      "CREATE TABLE animal (" 
      + "id INT UNSIGNED NOT NULL AUTO_INCREMENT," 
      + "PRIMARY KEY (id)," 
      + "name CHAR(40), category CHAR(40))");` 

更改这个...

Statement s = conn.createStatement(); 
s.executeUpdate (StaticVariables.getDropTableAnimalQuery()); 
s.executeUpdate (StaticVariables.getCreateTableAnimalQuery());` 

...并创建一个静态变量

public class StaticVariables { 
    private static String dropTableAnimalQuery = "DROP TABLE IF EXISTS animal"; 

    private static String createTableAnimalQuery = "CREATE TABLE animal (" 
      + "id INT UNSIGNED NOT NULL AUTO_INCREMENT," 
      + "PRIMARY KEY (id)," 
      + "name CHAR(40), category CHAR(40))"; 

    public static String getDropTableAnimalQuery() { 
     return dropTableAnimalQuery; 
    } 

    public static String getCreateTableAnimalQuery() { 
     return createTableAnimalQuery; 
    } 
} 

也许有人有更好的办法来解决这个

回答

2

句成语把静态常量在接口喜欢你StaticVariable例子。

我更喜欢在尽可能使用它们的类中保留常量。如果许多实现它的子类需要它们,我会将常量添加到接口中,但也会有一些方法被实现。

1

特殊类我会建议做你的SQL常量。无论是将它们放入将要使用它们的代码中,还是放入另一个专门用于保存常量的类中,都取决于您。

public static final String CREATE_TABLE = "CREATE TABLE animal (" 
      + "id INT UNSIGNED NOT NULL AUTO_INCREMENT," 
      + "PRIMARY KEY (id)," 
      + "name CHAR(40), category CHAR(40))"; 
public static final String DROP_TABLE = "DROP TABLE IF EXISTS animal"; 
0

这是更好的地方,查询你需要他们。没有理由将它们替换成不同的类别。类应该有字段和方法,状态和行为,否则你会终止OOP的主要思想。所以要让完全是一堆静态字符串的类是一个坏主意。

顺便看看Spring Jdbc api。它真的简化了你使用Jdbc的日常工作。如果你不想使用它,它不需要一个spring context。但使用该API使用jdbc更容易。这里有一个小样本可能对你有所帮助:

public int countYellowBoxes(final String color) { 
     final String query = "select count(*) from boxes where color = ?"; 
     return jdbcTemplate.queryForInt(query, color); 
    }