【问题标题】:How can I do the following using Methods?如何使用方法执行以下操作?
【发布时间】:2013-12-09 03:03:17
【问题描述】:

该程序将打开一个对话框,用户将在其中从 7 个选项中进行选择。根据所选的选项,我将使用 SQL 语句从数据库中提取数据并将其打印到屏幕上。

我想知道的是,我想在各自的方法中执行这些步骤,并且只需从 main() 调用它们,而不是使用非常大的 Switch 语句。我似乎无法弄清楚如何在不必为每个方法建立连接的情况下做到这一点。

import javax.swing.*;
import java.sql.*;


public class PC_05__PopulationDatabase {

public static void main(String[] args) throws SQLException {
    final String DB_URL = "jdbc:derby:CityDB";

    // List of actions
    String[] arr = new String[7];
    arr[0] = "1) Sort Cities by Population - ASCENDING ORDER";
    arr[1] = "2) Sort Cities by Population - DESCENDING ORDER";
    arr[2] = "3) Sort Cities by Name";
    arr[3] = "4) Get Total Population of ALL Cities";
    arr[4] = "5) Get Average Population of ALL Cities";
    arr[5] = "6) Get Highest Population";
    arr[6] = "7) Get Lowest Population";

    try {
        // Open Connection
        Connection conn = DriverManager.getConnection(DB_URL);
        System.out.println("Connection created to Population Database.");

        // Statement and Result
        Statement stmt = conn.createStatement();
        String sqlStatement;
        ResultSet result;

        // Selection dialog
        Object userAction = JOptionPane.showInputDialog(null, "Select an action: ", "Actions", JOptionPane.PLAIN_MESSAGE, null, arr, null);
        String selection  = userAction.toString();

        int choice = Integer.parseInt(selection);

        // Selection Actions
        switch(choice) {
            case 0:

                break;
            case 1:

                break;
            case 2:

                break;
            case 3:

                break;
            case 4:

                break;
            case 5:

                break;
            case 6:

                break;
        }


        sqlStatement = "SELECT Description FROM Coffee";
        result = stmt.executeQuery(sqlStatement);


        // Close Connection
        conn.close();
        System.out.println("Connection closed.");
    }
    catch(Exception ex) {
        System.out.println("ERROR: " + ex.getMessage());
    }

}

public static void sortPopAscending() {

}

public static void sortPopDescending() {

}

public static void sortName() {

}

public static void totalPop() {

}

public static void avgPop() {

}

public static void highestPop() {

}

public static void lowestPop() {

}

}

【问题讨论】:

    标签: java database methods static-methods derby


    【解决方案1】:

    以下是我解决类似问题的方法:

    • 使Connection conn 成为您的类的实例变量。不要设置static,否则如果您需要多个同时连接,您会自责的。
    • 打开数据库连接
    • 当您希望用户执行某些操作时:让用户进行选择,然后调用具有该选择的适当 SQL 的单独函数。您将需要一些东西来确定要调用哪个函数,可以是 switch 语句、匿名类等。
    • 关闭数据库连接

    【讨论】:

    • 你能说得更具体点吗?我将“Connection conn”设为实例变量。现在我只是再次从 main() 打开连接?这有什么区别?或者您是说我在每种方法中都建立了连接,但在完成后在 main 中关闭它?我很困惑。
    • 以为我说的很具体,但同样,在main() 中只打开一次连接,将它用于您需要的任何用户选择,然后关闭它。这种方法的美妙之处在于您不必进行不必要的打开和关闭调用,这很昂贵。但是,请务必在每次使用 StatementResultSet 对象后立即关闭它们。
    • 我的坏人,我对继承不熟悉,所以当我想到使用方法时遇到了一个问题,但对方法内部会识别什么和不会识别什么感到困惑。编辑——我关闭每个方法中的语句和结果集?我不能在 Main() 结束时关闭它一次吗?
    • 在这种情况下,没有。我会立即关闭 PreparedStatement 和 ResultSet 对象,无论它们发生多少次。有一些方法可以重用 PreparedStatements(请参阅 stackoverflow.com/questions/2467125/…),但对于像这样的简单程序,不值得这么麻烦。如果我的回答有助于解决您的问题,请将其标记为已接受。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 2021-12-21
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多