[英]How to connect JDBC to tns oracle
我可以使用tns文件从plsql连接到数据库
现在我想使用JDBC从我的Java连接到数据库。
我搜索谷歌,我发现我必须使用此连接字符串:
"jdbc:oracle:thin:@//host:port))/tnsfile)";
我的电脑名是myPC
在tnsfile中写入的端口是5151
所以我尝试了这个连接String
"jdbc:oracle:thin:@//myPC:5151))/tnsfile"
但我得到了这个例外
java.sql.SQLRecoverableException: IO ERROR: SO Exception was generated
您必须将名为oracle.net.tns_admin
的属性设置为指向包含tnsnames.ora
文件的文件夹的位置。 然后在数据库URL中的@
符号后面指定该文件中的条目。 检查下面的例子。 您可以在此处找到更多信息: 数据源和URL - Oracle文档
import java.sql.*;
public class Main {
public static void main(String[] args) throws Exception {
System.setProperty("oracle.net.tns_admin", "C:/app/product/11.2.0/client_1/NETWORK/ADMIN");
String dbURL = "jdbc:oracle:thin:@ENTRY_FROM_TNSNAMES";
Class.forName ("oracle.jdbc.OracleDriver");
Connection conn = null;
Statement stmt = null;
try {
conn = DriverManager.getConnection(dbURL, "your_user_name", "your_password");
System.out.println("Connection established");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT dummy FROM dual");
if (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
if (stmt != null) try { stmt.close(); } catch (Exception e) {}
if (conn != null) try { conn.close(); } catch (Exception e) {}
}
}
}
tnsnames.ora
文件中的示例条目:
my_net_service_name= (DESCRIPTION= (ADDRESS=(some address here)) (CONNECT_DATA= (SID=some_SID_name)))
其中my_net_service_name
字符串是我必须从我的Java示例中为ENTRY_FROM_TNSNAMES
my_net_service_name
字符串。
而不是硬编码tnsnames.ora的路径,更好地从环境中找到它:
public static void setTnsAdmin() {
String tnsAdmin = System.getenv("TNS_ADMIN");
if (tnsAdmin == null) {
String oracleHome = System.getenv("ORACLE_HOME");
if (oracleHome == null) {
return; //failed to find any useful env variables
}
tnsAdmin = oracleHome + File.separatorChar + "network" + File.separatorChar + "admin";
}
System.setProperty("oracle.net.tns_admin", tnsAdmin);
}
请尝试以下方法:
System.setProperty("oracle.net.tns_admin", PATH_TO_TNSNAMES.ORA);
Class.forName ("oracle.jdbc.OracleDriver");
dbUrl = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+IPHOST+")(PORT="+PORT+"))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME="+DBNAME+")))"
conn = DriverManager.getConnection(dbUrl, USERNAME, PASSWORD);
一定要有最新版本的ojdbc.jar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.