如何在Java应用程序和Oracle DB之间创建常量连接

如何在Java应用程序和Oracle DB之间创建常量连接,java,sql,eclipse,oracle,class,Java,Sql,Eclipse,Oracle,Class,我的问题是关于JDBC连接是如何工作的,以及如何以请求的方式设置它。首先,我的应用程序包含两个类-DB_Connect(使用标准连接创建try{}catch{}block)和DB_querys类扩展放置查询的DB_Connect。 当我试图运行任何查询时,DB_Connect类的构造函数正在创建连接并执行查询(如果我以正确的方式理解的话)。 我的问题是:如何构建这两个类,以便在主应用程序启动时只创建一次到OracleDB的连接?我希望我已经解释清楚了。 以下是DB_连接类: public cla

我的问题是关于JDBC连接是如何工作的,以及如何以请求的方式设置它。首先,我的应用程序包含两个类-DB_Connect(使用标准连接创建
try{}catch{}block
)和DB_querys类扩展放置查询的DB_Connect。 当我试图运行任何查询时,DB_Connect类的构造函数正在创建连接并执行查询(如果我以正确的方式理解的话)。 我的问题是:如何构建这两个类,以便在主应用程序启动时只创建一次到OracleDB的连接?我希望我已经解释清楚了。 以下是DB_连接类:

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_查询类:

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() );
        }
}
}

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

顺便说一句,最好使用java命名约定并使用类
DBConnect
dbquerys

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


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

使连接对象成为静态的

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() );
        }
    }
}
一般来说,我不会从connection对象进行扩展,而是通过构造函数传递它

public class DB_Connect {
    private Connection conn;

    public DB_Connect() {
        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 getConnection() {
        return conn;
    }
}

public class DB_Queries {
   private String sql = "SELECT * FROM table";
   private DB_connect connect;

   public DB_Queries(DB_Connect connect) {
       this.connect= connect;
   }

   public void get_Data(){
        try{
            Statement stmt = connect.getConnection().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() );
        }
    }
}
public class DB_Connect {
    private Connection conn;

    public DB_Connect() {
        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 getConnection() {
        return conn;
    }
}

public class DB_Queries {
   private String sql = "SELECT * FROM table";
   private DB_connect connect;

   public DB_Queries(DB_Connect connect) {
       this.connect= connect;
   }

   public void get_Data(){
        try{
            Statement stmt = connect.getConnection().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() );
        }
    }
}