如何在Java应用程序和Oracle DB

时间:2017-08-25 08:39:13

标签: java sql eclipse oracle class

我的问题是关于JDBC连接如何工作以及如何以请求的方式设置它。开始时,我的应用程序包含两个类--DB_Connect(带有标准连接创建try{}catch{} block),DB_Queries类扩展了DB_Connect,其中放置了查询。 当我尝试运行任何查询时,DB_Connect类的构造函数正在创建连接并执行查询(如果我以正确的方式理解它)。 我的问题是:在主应用程序启动时,如何构建这两个类以仅创建一次与OracleDB的连接?我希望我能清楚地解释清楚。 这是DB_Connect类:

public class DB_Connect {

Connection conn;
Statement stmt;
ResultSet rs;

public DB_Connect() {
    try{
    String host = "jdbc:oracle:thin:@//...";
    String uName = "test";
    String uPass = "test";
    conn = DriverManager.getConnection(host,uName,uPass);
    stmt = conn.createStatement();
    }
    catch ( SQLException err ) {
        System.out.println(err.getMessage() );
    }
}
}

和DB_Queries类:

public class DB_Queries extends DB_Connect{

private String sql;

public void get_Data(){

        try{
            sql = "SELECT * FROM table";
            rs = stmt.executeQuery(sql);
            rs.next();
            String smth_name = rs.getString("column_NAME");

            String p = "output: " + smth_name;
            System.out.println(p);
        }
            catch ( SQLException err ) {
                System.out.println(err.getMessage() );
        }
}
}

2 个答案:

答案 0 :(得分:0)

只创建一次DB_Connect实例并重用它(将实例传递给get_Data()方法而不是扩展)

public void get_Data(DB_Connect connection){

    try{
        sql = "SELECT * FROM table";
        rs = connection.getStatement().executeQuery(sql);
        rs.next();
        String smth_name = rs.getString("column_NAME");

        String p = "output: " + smth_name;
        System.out.println(p);
    }
        catch ( SQLException err ) {
            System.out.println(err.getMessage() );
    }
}

顺便说一下,最好使用java命名约定并使用类DBConnectDBQueries

最好创建语句而不是重用单一语句来避免concurretn访问问题,最好在结束后关闭资源,你需要在调用next()等之前检查rs是否有数据。

一般来说,阅读一些关于java和JDBC的好教程。

答案 1 :(得分:0)

使连接对象保持静态。

double

一般来说,我不会从连接对象扩展,而是通过构造函数传递它。

public class DB_Connect {
    protected static Connection conn;

    public DB_Connect() {
        if (conn == null) {
            try{
                String host = "jdbc:oracle:thin:@//...";
                String uName = "test";
                String uPass = "test";
                conn = DriverManager.getConnection(host,uName,uPass);
            }
            catch ( SQLException err ) {
                System.out.println(err.getMessage() );
            }
        }
    }
}

public class DB_Queries extends DB_Connect{
   private String sql = "SELECT * FROM table";

   public void get_Data(){
        try{
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            rs.next();
            String smth_name = rs.getString("column_NAME");

            String p = "output: " + smth_name;
            System.out.println(p);
        }
        catch ( SQLException err ) {
            System.out.println(err.getMessage() );
        }
    }
}