java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?

标签 java mysql database select extends

我有 2 个不同的类(class)。一个用于数据库连接,一个用于查询。我希望能够通过将 DBSelectQuery 类扩展到 DBConnection 类来选择查询。我怎样才能正确地做到这一点?

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

}

最佳答案

我使用过的一种非常成功的方法是创建一个静态 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.");
    }
}

关于java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46211450/

相关文章:

java - 修复使用 Java-Streams 进行 reduce() 操作的通配符捕获错误

java - 使用AsyncTask发送UDP数据包

java - 如何使 Java .jar 文件在任何环境中都能自动找到

mysql - 在外部选择中使用内部选择值

PHP数组代码解决

java - Kotlin - 如何在 Kotlin 中不使用科学记数法将 Double 转换为 String?

php - MySQL( explode/匹配数组)

mysql - SQL 存储过程保存到变量中

database - Prolog 数据库 : Why is program only running once?

java - App Engine - 云 SQL - java.sql.SQLException : This Connection is closed