如何在Java应用程序和Oracle DB之间创建常量连接
我的问题是关于JDBC连接是如何工作的,以及如何以请求的方式设置它。首先,我的应用程序包含两个类-DB_Connect(使用标准连接创建如何在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
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() );
}
}
}