如何正确地执行此操作才能在DBSelectQuery类中进行选择?

时间:2017-09-14 05:48:12

标签: java mysql database select extends

我有两个不同的班级。一个用于数据库连接,一个用于查询。我希望能够通过将其扩展到DBConnection类来在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);
    }

}

}

2 个答案:

答案 0 :(得分: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.");
    }
}

答案 1 :(得分:0)

创建一个单独的方法,该方法返回DBConnection类中的Connection对象:

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;   
}