java jdbc连接异常问题数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java jdbc连接异常问题数据库相关的知识,希望对你有一定的参考价值。
我用的是sqlserver 2000 异常如下:
[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ConnectDB.main(ConnectDB.java:18)
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Connection refused: connect
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ConnectDB.main(ConnectDB.java:18)
我刚刚升级了sp3补丁 但是查询分析器的 关于里面的还是 194的版本显示!jdbc驱动程序已经装了 那三个文件复制到jdk的jre的exe目录下了。安装sql的时候没有设密码之类的东西!忘高手帮解答!谢谢了!
java源文件如下!
import java.sql.*;
public class ConnectDB
public static void main(String args[])
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=STU";
Connection con=null;
Statement stat=null;
ResultSet re=null;
try
//DriverManager.registerDriver(null);
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("驱动程序已安装");
System.out.println("即将链接数据库");
catch(Exception e)
System.out.print("无法加载驱动程序");
return;
try
con=DriverManager.getConnection(url,"sa","");
stat=con.createStatement();
re=stat.executeQuery("SELECT*FROM student");
System.out.println("查询结果为:");
while(re.next())
System.out.println(re.getString(1)+re.getString(2)+re.getString(3));
re.close();
stat.close();
con.close();
catch(SQLException ex)
while(ex!=null)
ex.printStackTrace();
ex=ex.getNextException();
我这里有XP3驱动包..已经发给楼主了...
祝楼主早日成功! 参考技术A 给一个网址吧,,因为看异常信息看不出更多信息:
http://blog.163.com/lirason@126/blog/static/10167853620090592816510/
估计还是数据库的问题,看看连接rul的是否准确.
参考资料:http://blog.163.com/lirason@126/blog/static/10167853620090592816510/
参考技术B 打SP4的补丁吧我以前也是没打 报错(Unknown Source) 参考技术C 我也遇见过这样的问题,打上sp4的补丁就OK了 参考技术D 在确认 url和驱动都正确的话,打个sp4补丁吧!!!
java.sql.SQLException:Io 异常:在与 oracle 的 JDBC 连接期间从读取调用中得到减一
【中文标题】java.sql.SQLException:Io 异常:在与 oracle 的 JDBC 连接期间从读取调用中得到减一【英文标题】:java.sql.SQLException: Io exception: Got minus one from a read call during JDBC connection with oracle 【发布时间】:2010-03-02 14:16:45 【问题描述】:您好,我是 java 新手,当我尝试将 oracle 与我的 java 示例代码连接时,我遇到了上述异常
我的代码是
import java.sql.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DbConnectivity extends HttpServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
try
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:8080:orcl", "system", "tiger");\\ The Exception thrown here
Statement stmt = con.createStatement();
ResultSet rst = stmt.executeQuery("select * from users");
System.out.println(rst.getString(1));
stmt.close();
con.close();
catch (ClassNotFoundException e)
e.printStackTrace();
catch (SQLException e)
e.printStackTrace();
抛出的异常是
java.sql.SQLException: Io exception: Got minus one from a read call
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.wipro.connnection.DbConnectivity.doGet(DbConnectivity.java:16)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
帮我解决这个问题
【问题讨论】:
【参考方案1】:首先,连接 URL 错误。 Post 8080 通常由像 Apache Tomcat 这样的网络服务器使用。 Oracle 本身使用默认端口 1521。另请参阅this Oracle JDBC documentation。
另外你忘了打电话给ResultSet#next()
。这会将光标设置到结果集中的下一行。结果集在第一行之前返回。如果您不移动光标,对ResultSet
的任何getXXX()
调用都将失败。
如果您希望结果集中有多行,那么您需要使用while
循环:
resultSet = statement.executeQuery();
while (resultSet.next())
String columnname = resultSet.getString("columnname");
// ...
或者,如果您希望只有一行,那么您也可以继续使用 if
语句:
resultSet = statement.executeQuery();
if (resultSet.next())
String columnname = resultSet.getString("columnname");
// ...
有关正确使用基本 JDBC 的更多提示和示例(也在 JSP/Servlet 中),您可能会发现this article 很有用。例如,您关闭语句和连接的方式很容易导致资源泄漏。在 GET 请求上加载 JDBC 驱动程序也不必要地昂贵。只需在应用程序启动或 servlet 初始化期间执行一次。
【讨论】:
调试程序时发现 Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:8080:orcl", "system", "tiger") 抛出的异常;你能通过这条线吗 先修复连接URL。 Oracle 肯定不会监听 8080 端口。通常是 Tomcat 监听 8080,而不是数据库服务器。 Oracle 默认使用 1521。 我在另一条评论中看到您在使用 1521 时得到了 ORA 12505,在这种情况下,只需检查 ora-code.com:ora-12505.ora-code.com【参考方案2】:Oracle 通常使用端口 1521 进行数据库访问,而您似乎使用的是端口 8080。您应该检查以确保您指定了正确的端口。
【讨论】:
我也尝试使用 1521,但在这种情况下它拒绝连接数据库并出现 ora 12505 错误【参考方案3】:我看到的一个错误是您需要执行 rs.next(); 这将得到他的第一个结果集。
例如
while (!rs.next())
//read rs.getString(1);
【讨论】:
【参考方案4】:package testing;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.*;
public class OracleJDBC
public static void main(String[] argv)
System.out.println("-------- Oracle JDBC Connection Testing ------");
try
Class.forName("oracle.jdbc.driver.OracleDriver");
catch (ClassNotFoundException e)
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return;
System.out.println("Oracle driver registered");
Connection conn=null;
try
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orclh", "scott",
"tiger");
Statement stmt= conn.createStatement();
ResultSet r=stmt.executeQuery("Select * from emp");
while(r.next())
String str= r.getString("ename");
System.out.println (str);
catch (SQLException e)
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
【讨论】:
【参考方案5】:解决方案 1:
我认为这个异常是由于操作系统内部环境问题。
type 4 驱动程序也有同样的问题。但是 type 1 驱动程序没有给出这个异常。 所以目前我正在使用 type 1 驱动程序。
检查端口号,sid
tnsnames.ora
C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\SAMPLE\tnsnames.ora
解决方案 2:
在您的计算机上安装 vmware,安装操作系统,然后程序将使用 type 4 驱动程序。
【讨论】:
【参考方案6】:我知道这个帖子有点老了,但这对我有用。
使用 oracle db 客户端(如 sql developer 或其他工具)检查连接,以确保连接字符串正常工作并能够使用它连接到数据库。 如果您使用的是 XE 的 Oracle db Express Edition, 无论 Web 客户端在哪里运行,SID 都是 XE,端口是 1521。您也可以从 Web 客户端设置和其他地方进行检查。
【讨论】:
【参考方案7】:This is occur due to wrong connectivity with database connection.
In your program you write
Connection con = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:8080:orcl", "system","tiger");
Go to D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
在这里你可以找到这样的文件:
**abcd** =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = **1521**))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = abcd)
)
)
现在您将连接编写如下:
("jdbc:oracle:thin:@localhost:1521:abcd","your_db_name","your_password")
在此之后你不会得到异常。
【讨论】:
这个问题已经在 3 个多月前收到了一个接受的、赞成的答案,而您迟到的答案并没有增加任何新内容。 @ChristianKönig 当我搜索这个时,我没有得到合适的答案。 您在写答案的确切页面上 - 滚动到顶部并阅读 BalusC 提供的答案 - 它以 开头首先,连接 URL 错误。 Post 8080 通常由像 Apache Tomcat 这样的网络服务器使用。 Oracle 本身使用默认端口 1521。以上是关于java jdbc连接异常问题数据库的主要内容,如果未能解决你的问题,请参考以下文章
网页显示无法打开JDBC连接事务;嵌套异常java.sql.SQLException:无法连接、 如何处理这种问题