2017-09-14 78 views
3

我有2個不同的類。一個是db連接,一個是查詢。我希望能夠通過將其擴展到DBConnection類來在DBSelectQuery類中選擇一個查詢。我如何正確地做到這一點?我有一個很好的程度的成功使用如何正確地做到這一點,以便能夠在DBSelectQuery類中進行選擇?

public class DBSelectQuery extends DBConnection { 
public static void main(String[] args) { 
    selectCourier(); 
} 
public static String selectCourier() { 
    queryStmt += "SELECT * FROM courier"; 
    System.out.println(queryStmt); 
    return queryStmt; 
    } 
} 

public class DBConnection { 
public static Connection con; 
public static String queryStmt; 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_activity", "root", "root"); 
     System.out.println("Database Connected"); 
     Statement stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery(queryStmt); 
     while (rs.next()) 
      System.out.println(rs.getInt(1) + " " + rs.getString(2)); 
     con.close(); 
    } 

    catch (Exception e) { 
     System.out.println(e); 
    } 

} 

}

回答

1

一種方法是創建一個靜態的Util類暴露任意數量的用於執行特定的查詢方法。對於您的情況,我們將假設您只需執行一個查詢,但您可以輕鬆地將此答案擴展到任意數量的查詢。

以下方法的一般策略是,您認爲應用程序需要執行的每個查詢都有自己的方法。這對你簡單的例子來說似乎不合邏輯,但是當你開始使用位置參數時,你需要在使用之前知道查詢的固定結構。

有一種獲取連接的方法,將根據需要重複調​​用。每個查詢方法都會返回List<Object[]>,其中每行由對象數組表示。

public class DBUtil { 
    private static final String GET_ALL_QUERY = "SELECT * FROM courier"; 

    public static Connection getConnection() { 
     Connection con = null; 
     try { 
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_activity", 
               "root", "root"); 
     } 
     catch (Exception e) { 
      // something went wrong 
     } 
    } 

    public static List<Object[]> getAll(Connection con) throws SQLException { 
     Statement stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery(GET_ALL_QUERY); 
     List<Object[]> list = new ArrayList<>(); 

     while (rs.next()) { 
      Object[] row = new Object[2]; 
      row[0] = (Object)rs.getInt(1); 
      row[1] = (Object)rs.getString(2); 
      list.add(row); 
     } 

     return list; 
    } 
} 

下面是如何使用上述UTIL類:

public static void main(String[] args) { 
    Connection con = DBUtil.getConnection(); 

    try { 
     List<Object[]> resultSet = DBUtil.getAll(con); 

     for (Object[] row : resultSet) { 
      int val1 = (Integer)row[0]; 
      String val2 = (String)row[1]; 

      System.out.println("Found a row: (" + val1 + ", " + val2 + ")"); 
     } 
    } 
    catch (Exception e) { 
     System.out.println("Something went wrong during the query."); 
    } 
} 
+0

您好,我想使它2班,並希望使選擇查詢可重複使用的用於選擇其它表 –

+0

@CarminaCastañeto不,我不建議在所有。只需使用一個類來處理您的JDBC服務,除非您期望可能有超過1000行代碼。查詢不應被視爲「可重用」。以不同方式處理每個查詢 –

+0

public static List getAll(Connection con)引發SQLException如何調用此方法? –

0

創建返回Connection對象在DBConnection的類一個單獨的方法:

public static Connection getConnection() { 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_activity", "root", "root"); 
     System.out.println("Database Connected");    
     con.close(); 
    } 

    catch (Exception e) { 
     System.out.println(e); 
    } 

    return con; 

} 

現在你可以調用此方法在任何課程的任何地方你的項目。

public static String selectCourier() { 
    Connection con = DBConnection.getConnection(); 
    Statement stmt = con.createStatement(); 
    queryStmt += "SELECT * FROM courier"; 
    System.out.println(queryStmt); 
    ResultSet rs = stmt.executeQuery(queryStmt); 
    while (rs.next()) 
     System.out.println(rs.getInt(1) + " " + rs.getString(2)); 

    return queryStmt; 
} 
相關問題