Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将servlet连接到数据库as400_Java_Database_Jdbc_Connection_Driver - Fatal编程技术网

Java 将servlet连接到数据库as400

Java 将servlet连接到数据库as400,java,database,jdbc,connection,driver,Java,Database,Jdbc,Connection,Driver,我正在尝试开发一个android应用程序,它需要通过Javaservlet连接到远程数据库as400,并向用户返回一个JSON对象 这是我的DoGet方法代码: protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"

我正在尝试开发一个android应用程序,它需要通过Javaservlet连接到远程数据库as400,并向用户返回一个JSON对象

这是我的DoGet方法代码:

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws       ServletException, IOException {
    response.setContentType("application/json");
    PrintWriter out = response.getWriter();
    out.println("{");

    Connection conn = null;
    try {
    Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
        conn = DriverManager.getConnection( "jdbc:as400://ipaddress;database name=dbname", "username", "password");
        System.out.println("Connected to the database");
    } catch (Exception e) {
        System.out.println("error! 1");
        e.printStackTrace();
    }


    try {
        conn.close();
        System.out.println("Disconnected from database");
    } catch (Exception e) {
        System.out.println("error! 2");
        e.printStackTrace();
    }

}
在我通过eclipse启动servlet之后,它在Class.forName….处停止。。。。它给出了以下错误: 错误1. java.sql.SQLException:应用程序请求程序无法建立连接。连接超时:连接

at com.ibm.as400.access.JDError.throwSQLException(JDError.java:565)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3332)
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1393)
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1230)
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:371)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at it.liuc.webtest.Servlet1.doGet(Servlet1.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.ibm.as400.access.PortMapper.getSocketConnection(PortMapper.java:273)
at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:161)
at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2334)
at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2250)
at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3042)
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2606)
at com.ibm.as400.access.AS400.signon(AS400.java:3921)
at com.ibm.as400.access.AS400.connectService(AS400.java:1175)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3324)
... 20 more
java.lang.NullPointerException
at it.liuc.webtest.Servlet1.doGet(Servlet1.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
看起来它无法连接到服务器,但我确信用户名、密码和数据库名是正确的。我必须在IP地址后插入端口吗?还有其他建议吗

谢谢你的回答

它停在课堂上。因为名字

这是不正确的。那条线被执行了;如果失败,您将看到ClassNotFoundException

您正在尝试执行下面的一行,即建立连接的地方。这就是失败的地方

检查您正在使用的URL。我还要确保您运行的客户机可以看到数据库服务器。可以从客户端计算机ping数据库服务器吗?您可以使用某种非JDBC客户机连接到数据库吗?您是否有权使用已授予的凭据访问该数据库?拥有该数据库的DBA是否知道您的应用程序正在尝试连接到该数据库

更新:为了确保我理解正确,您说您在运行Java客户端的机器上打开了一个命令shell,并键入了ping ip地址,其中ip地址与您在连接URL中输入的值相同

如果我在我的机器上打开一个命令shell并ping Google,它如下所示:

C:>ping www.google.com

Pinging www.l.google.com [74.125.130.147] with 32 bytes of data:

Reply from 74.125.130.147: bytes=32 time=29ms TTL=42
Reply from 74.125.130.147: bytes=32 time=27ms TTL=42
Reply from 74.125.130.147: bytes=32 time=29ms TTL=42
Reply from 74.125.130.147: bytes=32 time=28ms TTL=42

Ping statistics for 74.125.130.147:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 27ms, Maximum = 29ms, Average = 28ms

C:>
如果您的计算机没有,那么您的答案是:您的客户机无法看到网络上的数据库服务器

端口很重要,因为设置数据库的DBA可能没有使用默认端口。你需要和数据库的负责人谈谈,然后把问题解决

它停在课堂上。因为名字

这是不正确的。那条线被执行了;如果失败,您将看到ClassNotFoundException

您正在尝试执行下面的一行,即建立连接的地方。这就是失败的地方

检查您正在使用的URL。我还要确保您运行的客户机可以看到数据库服务器。可以从客户端计算机ping数据库服务器吗?您可以使用某种非JDBC客户机连接到数据库吗?您是否有权使用已授予的凭据访问该数据库?拥有该数据库的DBA是否知道您的应用程序正在尝试连接到该数据库

更新:为了确保我理解正确,您说您在运行Java客户端的机器上打开了一个命令shell,并键入了ping ip地址,其中ip地址与您在连接URL中输入的值相同

如果我在我的机器上打开一个命令shell并ping Google,它如下所示:

C:>ping www.google.com

Pinging www.l.google.com [74.125.130.147] with 32 bytes of data:

Reply from 74.125.130.147: bytes=32 time=29ms TTL=42
Reply from 74.125.130.147: bytes=32 time=27ms TTL=42
Reply from 74.125.130.147: bytes=32 time=29ms TTL=42
Reply from 74.125.130.147: bytes=32 time=28ms TTL=42

Ping statistics for 74.125.130.147:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 27ms, Maximum = 29ms, Average = 28ms

C:>
如果您的计算机没有,那么您的答案是:您的客户机无法看到网络上的数据库服务器

端口很重要,因为设置数据库的DBA可能没有使用默认端口。您需要与数据库负责人联系,并对其进行分类。

堆栈跟踪中的ConnectionTimedOut使其看起来像

AS/400未配置为回复TCP连接 中间有个防火墙 在app server机器上,尝试对DB服务器中的AS/400端口执行telnet,查看它是否能够连接,即使它自动断开连接,或者只是挂起。您可以使用Wireshark更详细地查看发生了什么。

堆栈跟踪中的ConnectionTimedOut使其看起来像

AS/400未配置为回复TCP连接 中间有个防火墙
在app server机器上,尝试对DB服务器中的AS/400端口执行telnet,查看它是否能够连接,即使它自动断开连接,或者只是挂起。您可以使用Wireshark查看更详细的情况。

您是否为该程序提供了适当的驱动程序库?首先下载数据库连接驱动程序并导入到程序中。并创建到远程数据库的连接,给出类路径和连接路径。然后在程序中,类路径和连接路径在程序中给出。运行你的程序。它将解决您的问题。

您是否为该程序提供了适当的驱动程序库?首先下载数据库连接驱动程序并导入到程序中。并创建到远程数据库的连接,给出类路径和连接路径。然后在程序中,类路径和连接路径在程序中给出。运行你的程序。它将解决您的问题。

这与android无关,也与ser无关
vletsI不太了解as400 DB,但连接字符串中缺少DB服务器的端口号。这与android和servletsI无关。vletsI不太了解as400 DB,但连接字符串中缺少DB服务器的端口号。AS/400需要回复TCP连接吗?已经有另一个软件使用ADO/ODBC连接到此数据库,并且运行良好。我试着做一个telnet,但它说它无法建立连接。我不确定如何配置AS/400,但数据库没有响应JDBC驱动程序。如果您已经有了到它的ODBC连接,您可以使用ODBC-JDBC桥作为解决方法。as/400需要如何回复TCP连接?已经有另一个软件使用ADO/ODBC连接到此数据库,并且运行良好。我试着做一个telnet,但它说它无法建立连接。我不确定如何配置AS/400,但数据库没有响应JDBC驱动程序。如果您已经有了ODBC连接,可以使用ODBC-JDBC桥作为解决方法。首先,感谢您的回答。我为我糟糕的英语和java语言道歉,但是我对这个服务器很生气。Ping不起作用。我有权限,并且凭据正确。是的,老板知道我的申请,如果你是这个意思的话。港口呢?哪一个是正确的?我在网上找到了很多,但仍然无法连接。首先,谢谢你的回答。我为我糟糕的英语和java语言道歉,但是我对这个服务器很生气。Ping不起作用。我有权限,并且凭据正确。是的,老板知道我的申请,如果你是这个意思的话。港口呢?哪一个是正确的?我试着在网上找到了很多,但仍然无法连接。