2014-05-07 213 views
0

我正在使用Windows 7,64位并使用Eclipse for J2EE。我想通过J2EE代码显示来自Oracle数据库的值。我试着用oracle教程。但是我在Eclipse控制台中遇到了以下错误。请建议我。J2EE连接远程Oracle数据库表

附加信息: 1.在远程oracle设置中,我可以看到服务名称已启用,但未启用SID。 2.我的服务名称是'sample.lan',因此我在lan内部工作。是否需要进行任何更改如果我通过LAN连接远程oracleDB表?

连接字符串:

<%@ page import="java.sql.*" %> 

Class.forName("oracle.jdbc.driver.OracleDriver"); 

connection = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:service-name", "username", "password"); 

错误:

Connection Failed! Check output console 
java.sql.SQLRecoverableException: I/O-Error: The Network Adapter could not establish the connection 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:711) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:558) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at org.apache.jsp.testDBconnection_jsp._jspService(testDBconnection_jsp.java:94) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection 
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:445) 
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464) 
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594) 
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:229) 
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486) 
    ... 32 more 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:162) 
    at oracle.net.nt.ConnOption.connect(ConnOption.java:133) 
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411) 
    ... 37 more 
+0

您甚至无法启动数据库连接。发布你如何尝试连接。此外,请检查您的服务器是否允许通过TCP/IP进行连接,并发送正确的参数/凭证。 –

+0

如果你真的使用**服务名**(而不是** SID **),那么URL应该是:'jdbc:oracle:thin:@ // host:1521/service-name'(注意'/'而不是':') –

+0

@a_horse_with_no_name:在我添加//而不是:后,出现错误'端口号的数字格式无效' – kuttyraj

回答

1
  1. 确保您可以随时随地可以执行Java代码到达您的数据库主机的端口1521。
  2. 请确保您可以使用某些标准数据库客户端(例如SQL * plus)连接到您的数据库,以检查您的数据库是否配置正确
  3. 检查您的连接URL以确定它是否正确对文档这里http://www.orafaq.com/wiki/JDBC

除此之外,只是一句话:如果你的想法是要教育自己或学习JDBC,这是完全正确的;如果您的代码旨在用于生产,我强烈建议您不要将数据库访问混合到您的Presentantion层(JSP)中。我建议你考虑在这种情况下将你的应用程序分成由其责任定义的层。 http://en.wikipedia.org/wiki/Multitier_architecture