Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确地执行此操作,以便能够在DBSelectQuery类中进行选择?_Java_Mysql_Database_Select_Extends - Fatal编程技术网

Java 如何正确地执行此操作,以便能够在DBSelectQuery类中进行选择?

Java 如何正确地执行此操作,以便能够在DBSelectQuery类中进行选择?,java,mysql,database,select,extends,Java,Mysql,Database,Select,Extends,我有两门不同的课。一个用于db连接,一个用于查询。我希望能够通过将查询扩展到DBConnection类来选择DBSelectQuery类中的查询。我怎样才能做好呢 public class DBSelectQuery extends DBConnection { public static void main(String[] args) { selectCourier(); } public static String selectCourier() { queryStmt +

我有两门不同的课。一个用于db连接,一个用于查询。我希望能够通过将查询扩展到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);
    }

}

}

我成功使用的一种方法是创建一个静态util类,该类公开了用于执行特定查询的任意数量的方法。对于您的情况,我们假设您只需要执行一个查询,但您可以轻松地将此答案扩展到任意数量的查询

下面这种方法的一般策略是,您认为应用程序需要执行的每个查询都有自己的方法。对于一个简单的示例来说,这似乎不符合逻辑,但当您开始使用位置参数时,您需要在使用它之前了解查询的固定结构

有一种获取连接的方法,可以根据需要重复调用。每个查询方法返回一个
列表
,其中每一行由一个对象数组表示

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;
    }
}
公共类DBUtil{
私有静态最终字符串GET_ALL_QUERY=“SELECT*FROM courier”;
公共静态连接getConnection(){
连接con=null;
试一试{
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/java_activity",
“根”、“根”);
}
捕获(例外e){
//出了点问题
}
}
公共静态列表getAll(连接con)引发SQLException{
语句stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(获取所有查询);
列表=新的ArrayList();
while(rs.next()){
Object[]行=新对象[2];
行[0]=(对象)rs.getInt(1);
行[1]=(对象)rs.getString(2);
列表。添加(行);
}
退货清单;
}
}
以下是如何使用上述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.");
    }
}
publicstaticvoidmain(字符串[]args){
Connection con=DBUtil.getConnection();
试一试{
List resultSet=DBUtil.getAll(con);
对于(对象[]行:结果集){
int val1=(整数)行[0];
字符串val2=(字符串)行[1];
System.out.println(“找到一行:(“+val1+”,“+val2+”));
}
}
捕获(例外e){
System.out.println(“查询过程中出错了。”);
}
}

创建一个单独的方法,返回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;   
}

您好,我想将其设置为两个类,并希望使select查询可重用,以便在其他类上进行选择tables@CarminaCasta尼埃托:不,我一点也不推荐。只需使用一个类来处理JDBC服务内容,除非您期望的代码可能超过1000行。并且这些查询不应被视为“可重用的”。请以不同的方式对待每个查询。公共静态列表getAll(Connection con)抛出SQLException如何调用此方法?