我正在創建一個連接到多個數據庫的java應用程序。用戶將能夠從下拉框中選擇他們想要連接的數據庫。Java連接到多個數據庫
程序然後通過將名稱傳遞給創建初始上下文的方法來連接到數據庫,以便它可以與Oracle Web邏輯數據源進行通信。
public class dbMainConnection {
private static dbMainConnection conn = null;
private static java.sql.Connection dbConn = null;
private static javax.sql.DataSource ds = null;
private static Logger log = LoggerUtil.getLogger();
private dbMainConnection(String database) {
try {
Context ctx = new InitialContext();
if (ctx == null) {
log.info("JDNI Problem, cannot get InitialContext");
}
database = "jdbc/" + database;
log.info("This is the database string in DBMainConnection" + database);
ds = (javax.sql.DataSource) ctx.lookup (database);
} catch (Exception ex) {
log.error("eMTSLogin: Error in dbMainConnection while connecting to the database : " + database, ex);
}
}
public Connection getConnection() {
try {
return ds.getConnection();
} catch (Exception ex) {
log.error("Error in main getConnection while connecting to the database : ", ex);
return null;
}
}
public static dbMainConnection getInstance(String database) {
if (dbConn == null) {
conn = new dbMainConnection(database);
}
return conn;
}
public void freeConnection(Connection c) {
try {
c.close();
log.info(c + " is now closed");
} catch (SQLException sqle) {
log.error("Error in main freeConnection : ", sqle);
}
}
}
我的問題是如果有人忘記爲數據庫創建數據源但是仍將其添加到下拉框中會發生什麼?現在發生的情況是,如果我嘗試連接到沒有數據源的數據庫,那麼它會報錯,無法獲得連接。這是我想要的,但如果我連接到一個數據庫,它首先有一個數據源,它可以工作,然後嘗試連接到沒有數據源的數據庫,它又出錯
javax .naming.NameNotFoundException:無法解析'jdbc.peterson'。解決'jdbc';剩餘的名字'彼得森'。
再次我希望,但什麼是混淆我是它,然後抓住最後一次正確的連接,也就是針對不同的數據庫,並處理一切,彷彿什麼都沒有發生。
任何人都知道這是爲什麼?是weblogic緩存連接還是作爲失敗安全的東西?以這種方式建立聯繫是不是一個好主意?
您是否嘗試將dbMainConnection的捕獲範圍中的ds值清空? –