![](/img/trans.png)
[英]How can I generate entities from oracle database in intellij idea?
[英]How to connent to Oracle database with SSH in IntelliJ IDEA
我正在嘗試使用 SSH 配置數據源以從 IntelliJ 校外訪問數據庫。 配置如截圖所示,我得到了
[08006][17002] IO 錯誤:從讀取調用中得到減一,連接失效 30003 毫秒,認證失效 0 毫秒。 oracle.net.ns.NetException:從讀取調用中得到減一。
事實上,我已經成功地在 Java 程序中使用loginProxy()
和loginDB()
連接到數據庫。 通過運行代碼,我知道 jdbcPort 應該是動態的,並且我認為這也是應該在“數據源和驅動程序”配置 window 的“常規”選項卡中的“端口”空白處填寫的內容。
那么問題來了,如果要填寫的Port是DYNAMIC怎么配置呢? 還是我做錯了什么,所以實際上應該有另一種方法?
另一個問題: String URL = "jdbc:oracle:thin:@" + jdbcHost + ":" + jdbcPort + "/" + database;
這里用的是什么URL格式? 它看起來不像 SID、服務名稱或 TNS,但它確實有效……有趣的是,當我將“/”替換為與 SID 格式匹配的“:”時,它不再有效了。 ..
/**
* Login the proxy. Do not change this function.
*
* @return boolean
*/
public boolean loginProxy() {
if (getYESorNO("Using ssh tunnel or not?")) { // if using ssh tunnel
String[] namePwd = getUsernamePassword("Login cs lab computer");
String sshUser = namePwd[0];
String sshPwd = namePwd[1];
try {
proxySession = new JSch().getSession(sshUser, proxyHost, proxyPort);
proxySession.setPassword(sshPwd);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
proxySession.setConfig(config);
proxySession.connect();
proxySession.setPortForwardingL(forwardHost, 0, databaseHost, databasePort);
forwardPort = Integer.parseInt(proxySession.getPortForwardingL()[0].split(":")[0]);
// 👆 forwardPort is set here, seems to be dynamic...
} catch (JSchException e) {
e.printStackTrace();
return false;
}
jdbcHost = forwardHost; // 👈 this is used in case of SSH connection, which is "localhost"
jdbcPort = forwardPort; // 👈 this is used in case of SSH connection
} else {
jdbcHost = databaseHost;
jdbcPort = databasePort;
}
return true;
}
/**
* Login the oracle system. Change this function under instruction.
*
* @return boolean
*/
public boolean loginDB() {
String username = "myDBUsername";
String password = "myDBPassword";
/* Do not change the code below */
String URL = "jdbc:oracle:thin:@" + jdbcHost + ":" + jdbcPort + "/" + database;
try {
System.out.println("Logging " + URL + " ...");
conn = DriverManager.getConnection(URL, username, password);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
在常規選項卡上,您需要指定真實的數據庫服務器主機名和端口,而不是 localhost。 在下一個選項卡上配置 SSH 隧道后,所有連接操作都將自動完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.