Java 我是否必须为每个查询连接到数据库?

Java 我是否必须为每个查询连接到数据库?,java,database,oracle,Java,Database,Oracle,我使用以下代码连接到Oracle的数据库: Connection conn = null; Statement stmt = null; ResultSet rset = null; String jdbc_url = "jdbc:oracle:thin:hr/hr@localhost:1521:XE"; String query = ""; try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); con

我使用以下代码连接到Oracle的数据库:

Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
String jdbc_url = "jdbc:oracle:thin:hr/hr@localhost:1521:XE";
String query = "";
try {
   DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
   conn = DriverManager.getConnection(jdbc_url);
   stmt = conn.createStatement();
   query = "select username " + " from users ";
   rset = stmt.executeQuery(query);

   // my codes

} catch (SQLException sqle) {
   System.out.println("result error, " + e.getMessage());
} catch (NumberFormatException nfe) {

} finally {
   try {
      rset.close();
      stmt.close();
      conn.close();

   } catch (Exception e) {
      System.out.println("Error in closing " + e.getMessage());
   }
}

我是否必须在为我想要的每个查询所做的每个操作中使用此代码?建立连接并终止它?每次?

您不必每次都连接。只要确保每次都关闭结果集和语句。有关良好的DB包装器类,请参见示例

您可以使
连接成为构造函数中初始化的类变量。大概是这样的:

public class DbWrapper {
    private Connection conn = null;
    String jdbc_url="jdbc:oracle:thin:hr/hr@localhost:1521:XE";

    public DbWrapper() {
        conn=DriverManager.getConnection(jdbc_url);
    }

    public Arraylist<User> getUsers() {
         ...
    }
}
公共类DbWrapper{
专用连接conn=null;
字符串jdbc_url=“jdbc:oracle:thin:hr/hr@localhost:1521:XE”;
公共DbWrapper(){
conn=DriverManager.getConnection(jdbc_url);
}
公共Arraylist getUsers(){
...
}
}

我建议使用池连接/数据源

一个数据源实例是一个工作单元,在工作单元完成时应该关闭(但请注意,如果使用池连接,它不会关闭db连接)


也考虑使用更高级的JPA。

< P>如果您的应用程序运行在一个服务器上,例如Tomcat,GLasFISH,最好的方法是使用连接。否则,由于您使用的是Oracle JDBC驱动程序,因此可以使用该类

为了获取
连接
对象,可以实现。一个简单的方法是使用

这样,您就可以更改代码:

Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
String query = "";
try {
   conn = DBEnum.ORACLE_XE.getConnection();
   stmt = conn.createStatement();
   query = "select username " + " from users ";
   rset = stmt.executeQuery(query);

   // my codes

} catch (SQLException sqle) {
   System.out.println("result error, " + e.getMessage());
} catch (NumberFormatException nfe) {

} finally {
   try {
      rset.close();
      stmt.close();
      conn.close();

   } catch (Exception e) {
      System.out.println("Error in closing " + e.getMessage());
   }
}

这是服务器端代码还是客户端代码?我建议您最好使用连接池。Oracle驱动程序有一个可以使用的连接池。另一方面,您可以实现此数据源的共享静态变量或使用单例设计模式。
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
String query = "";
try {
   conn = DBEnum.ORACLE_XE.getConnection();
   stmt = conn.createStatement();
   query = "select username " + " from users ";
   rset = stmt.executeQuery(query);

   // my codes

} catch (SQLException sqle) {
   System.out.println("result error, " + e.getMessage());
} catch (NumberFormatException nfe) {

} finally {
   try {
      rset.close();
      stmt.close();
      conn.close();

   } catch (Exception e) {
      System.out.println("Error in closing " + e.getMessage());
   }
}