2011-09-24 53 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); 
    }