使用Oracle SQL resultSet

时间:2017-01-24 20:04:49

标签: java oracle swing class

我正在开发一个包含JComboBox的简单应用程序供用户选择。我是Java的新手,我在使用SQL select语句的结果填充JComboBox时遇到了麻烦。这是因为我缺乏知识!

我编写了3个类,一个dbConnection类来处理数据库方面的事情。另一个实例化我的GUI的类,最后一个类包含我的主要方法:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

// Extends java.sql :~ describes connections to Oracle db
class dbConn {

    Connection conn;
    Statement stmt;
    ResultSet rs;
    String conString;
    String sqlString;

    void dbConn() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(conString);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        if (conn != null) {
            System.out.println("Connection established, database uplink is online.");
        } else {
            System.out.println("Connection failed, please check database status.");
        }
    }
}

GUI的第二课:

import javax.swing.*;

public class CaseMoverUI {
    void testUI(){

        // Create a new JFrame container
        JFrame jfrm = new JFrame("CaseMover");
        jfrm.setSize(550, 450);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JComboBox jbox = new JComboBox();
        jfrm.add(jbox);
        jfrm.setVisible(true);
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                new CaseMoverUI();
            }
        });
    }
}

最后:

public class sqlCaller {
    public static void main(String args[]){
        //instantiate db object and pass values to the constructor
        dbConn db = new dbConn();
        db.conString = "jdbc:oracle:thin:system/password123@127.0.0.1:1521:xe";
        db.sqlString = "SELECT true FROM dual";

        db.dbConn();
        CaseMoverUI ui = new CaseMoverUI();
        ui.testUI();
    }
}

我不知道该怎么做的第一件事是检索我的结果并将它们添加到JComboBox。我知道我需要为dbConn类编写一个方法,并将SQL查询传递给它。

在Oracle XE中使用HR测试模式,SQL查询可能类似于:

SELECT first_name FROM employees;

我不确定编写此方法的正确方法。这里的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

ResultSet对象是表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。例如,selectDataFromDatabase()方法在通过ResultSet对象rs执行查询时会创建Statementstmt。请注意,可以通过实现Statement接口的任何对象创建ResultSet对象,包括PreparedStatement,CallableStatement和RowSet。

您可以通过游标访问ResultSet对象中的数据。请注意,此游标不是数据库游标。该游标是指向ResultSet中一行数据的指针。最初,光标位于第一行之前。方法ResultSet.next将光标移动到下一行。如果光标位于最后一行之后,则此方法返回false。此方法使用ResultSet.next循环重复调用while方法,以迭代ResultSet中的所有数据。

public Vector selectDataFromDatabase() {
        Vector vector = new Vector();
        Connection con = null;
        try {
            Class.forName(DRIVER);
            con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            Statement stmt = con.createStatement();
            String query = "SELECT first_name FROM employees";
            ResultSet rs = stmt.executeQuery(query);
                 while (rs.next()) {
                     String firstName = rs.getString("FIRST_NAME");
                     vector.add(firstName);
                 }
        } catch (ClassNotFoundException ex) {
            System.out.println("An error has occured! I cannot find driver!");
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (SQLException ex) {
                System.out.println("An error has occured while closing database connection!");
            }
        }
        return vector;
    }

在您的GUI中:

Vector vector = selectDataFromDatabase();
JComboBox jbox = new JComboBox(vector);

或者只是简单地说:

JComboBox jbox = new JComboBox(selectDataFromDatabase());

答案 1 :(得分:0)

首先,您需要从数据库中获取结果列表:

您需要返回连接才能在其他方法中使用它:

public Connection dbConn() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(conString);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        if (conn != null) {
            System.out.println("Connection established, database uplink is online.");
        } else {
            System.out.println("Connection failed, please check database status.");
        }
      return conn;
    }

然后是获取员工名单的方法:

public List<String> listeEmployee() {
    List<String> list = new ArrayList<>();
    Connection con = dbConn();
    try {
        Statement stm = con.createStatement();

        String query = "SELECT first_name FROM employees";

        ResultSet resultat = stm.executeQuery(requete);
        while (resultat.next()) {
            list.add(resultat.getString("first_name"));
        }
    } catch (Exception e) {
        System.out.println("Exception = " + e);
    }
    return list;
}

然后您可以将此结果添加到JComboBox中,如下所示:

//Empty your JComboBox
jbox.removeAllItems();
for (String employee : listeEmployee) {
    jbox.addItem(employee);
}