我有一段非常简单的Java代码,在那里我尝试从Java连接到我的Oracle DB。
在Windows下一切正常,但当我尝试在Ubuntu上运行时,我得到了一个错误。
我读了很多书,也试过很多解决方法。这是我的代码:
package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class OracleJDBC {
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String password = "*****";
private static String dbname = "XE";
private static String username = "userir";
public Connection getConnection() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
Connection connection = null;
try {
connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:" + dbname, username,
password);
} catch (SQLException e) {
System.out.println("Connection Failed");
e.printStackTrace();
return null;
}
return connection;
}
public void closeConnection(Connection connection) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
当我运行它时,我收到一个错误:
连接失败Java.sql.sqlRecoverable异常:IO错误:网络适配器无法在oracle.jdbc.driver.T4CConnection处建立连接。登录(T4CConnection.Java:458)在oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.Java:546)在oracle.jdbc.driver.T4CConnection.(T4CConnection.Java:236)在oracle.jdbc.driver.T4CdriverExtension.GetConnection(T4CdriverExtension.Java:32)在.net.ns.nsprotocol.connect(Nsprotocol.Java:247)在oracle.jdbc.driver.t4cconnection.connect(T4cconnection.Java:1102)在oracle.jdbc.driver.t4cconnection.登录(T4cconnection.Java:320)...其他原因:Java.net.Connection Exception:Java.net.plainsockeTimpl.socketConnect(本机方法)在Java.net.abstractplainsockeTimpl.doConnect(
我以sysdba身份登录:sqlplus sys
我启动了db:startup
我以userir的身份登录到Oracle。XE存在。
我不知道,我做错了什么...
提前感谢您的提示!
我猜是有防火墙或网络设备阻止了您从Linux box到oracle服务器的访问。请注意StackTrace的“Connection Refired”部分。
...
java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at
...
Oracle监听端口1521,不是吗?也许可以在linux box上使用shell,看看是否可以直接telnet到oracle主机1521
telnet localhost 1521
你的连接也被拒绝了吗?我猜Linux box没有打开端口1521是因为任何原因(防火墙或oracle侦听器没有运行)。
此外,在部署到Linux时,您是否确定要连接到它的本地主机,还是希望Oracle服务器位于不同的计算机上?如果Oracle服务器在另一台计算机上,则该计算机的名称需要在连接字符串中,而不是“localhost”。
欢迎来到JDBC最糟糕的部分;找出那该死的连接串。
验证连接字符串。
由于忘记使用正确的主机名更新localhost,我在各种数据库中都遇到过类似的问题。
connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:" + dbname, username,
password);
确保连接字符串与您在sqlplus中指定的内容相匹配,并且您应该很好。
正在查找连接字符串
确定连接字符串可能会比较困难,但由于您可以通过sqlplus进行连接,因此应该比较容易:
我的SqlPlus连接字符串看起来像:SqlPlus用户/pass@(description=(address=(protocol=tcp)(host=hostname.network)(port=1521))(connect_data=(SID=remote_sid))
如果我将其引入Java,那么现在就像:“jdbc:oracle:thin:user/pass@//hostname.network:1521/remote_sid”;
或者,如果通过SQLDeveloper进行连接,则字符串由连接属性组成:
现在困难的部分是如果你真的是localhost并且需要从那里找出连接字符串。
首先,尝试您的IP地址,而不是localhost(在我的屏幕截图中是192.168.0.106),生成如下字符串:
“jdbc:oracle:thin:user/pass@//192.168.0.106:1521/remote_sid”;
如果这不起作用,请检查防火墙,确保端口1521是打开的(假设您没有更改端口设置,如果更改了,请相应地更改文本)
如果仍然没有解决方案,您将需要检查您的侦听器文件。如果是这样的话,我将链接到一些文档,并请参考一些更资深的Oracle/Linux大师的文档
我试图制作一个跨平台的JavaFX应用程序,它在Windows和OSX机器上工作得很好,但在Linux上不行。 jar是在Intellij思想中使用基本的JavaFX配置构建的。 有人帮忙吗?
我遵照这些指示: Windows全局安装PHAR的过程与在Windows上手动安装Composer的过程相同: 为PHP二进制文件创建目录;例如,C:\bin 追加;C:\bin到您的PATH环境变量(相关帮助) 下载https://phar.phpunit.de/phpunit-6.2.phar 并将文件另存为C:\bin\phpunit。法尔 打开命令行(例如,按Windows R»键入cmd
这个问题在下面的示例中重现。 } 据我所知,发生此异常是因为多个线程试图保存同一个对象。这就是我使用同步块的原因。 null null
Windows---------------: Linux---------- 那么,什么是主要的原因是这个问题,看起来一切都好从其他的选择 Apache Maven 3.6.0(97C98EC64A1FDFEE7767CE5FFB20918DA4F719F3;2018-10-24T14:41:47-04:00)Maven主页:/home/user/tools/Maven/apache-maven
结果在Windows和Linux之间有所不同。 Linux:鼠标位置:0,0 Windows:鼠标位置:623.0,367.0 我不知道为什么它不能在windows上工作,甚至似乎与lwjgl版本完全无关,因为我尝试了3.1.6、3.2.1、3.2.2和3.2.3-snapshot,所有这些版本都是一样的。所以问题要么是我在创建窗口时忘记了一些东西,要么是windows在某个更新中损坏了一些东西,
Peer.JS server.js github链接到项目:链接 新来的赫罗库。任何帮助都将不胜感激!