Java 如何正确地执行此操作,以便能够在DBSelectQuery类中进行选择?
我有两门不同的课。一个用于db连接,一个用于查询。我希望能够通过将查询扩展到DBConnection类来选择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 +
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如何调用此方法?