我的问题是关于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() );
}
}
}
答案 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命名约定并使用类DBConnect
和DBQueries
。
最好创建语句而不是重用单一语句来避免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() );
}
}
}