java.sql.SQLException: 无法从套接字读取更多的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.sql.SQLException: 无法从套接字读取更多的数据相关的知识,希望对你有一定的参考价值。

java.sql.SQLException: 无法从套接字读取更多的数据
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1117)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1069)
at oracle.jdbc.driver.T4C8TTIpro.receive(T4C8TTIpro.java:130)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:866)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:267)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:413)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:164)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:34)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:752)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at cn.yc.coon.Demo.main(Demo.java:17)

java语句:
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521: PLSExtProc","zwl","zwl");
System.out.println("连接成功!");

tnsnames.ora文件
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
本来SID是ORAL,可是用ORAL也是报错,求解

参考技术A 这个是SQLException,确认是连接的哪个数据库,如果数据库对的话,就看一下SQL取数语句了。 参考技术B 我记得是orcl吧

Tomcat 8 - java.sql.SQLException:无法为连接 URL 'jdbc:mysql://xxx/myApp' 创建类 '' 的 JDBC 驱动程序

【中文标题】Tomcat 8 - java.sql.SQLException:无法为连接 URL \'jdbc:mysql://xxx/myApp\' 创建类 \'\' 的 JDBC 驱动程序【英文标题】:Tomcat 8 - java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'jdbc:mysql://xxx/myApp'Tomcat 8 - java.sql.SQLException:无法为连接 URL 'jdbc:mysql://xxx/myApp' 创建类 '' 的 JDBC 驱动程序 【发布时间】:2015-04-27 20:33:24 【问题描述】:

我在网上到处寻找解决问题的方法,但我没有运气! :(

我正在尝试开发一个能够连接到 MySQL 数据库(连接池)并将其部署在 Tomcat 8 服务器上的 servlet。

我在 META-INF 中有一个 context.xml 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
   <Context antiJARLocking="true" path="/DBConnectionPoolTest">
       <Resource name="jdbc/testdb"
                 auth="Container"
                 type="javax.sql.DataSource"
                 username="xxx" password="xxx"
                 driverclassname="com.mysql.jdbc.Driver"
                 url="jdbc:mysql://xxx/myApp"
                 maxactive="10"
                 maxidle="4" />
   </Context>

在 WEB-INF 中我创建了 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">   
    <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/testdb</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

最后,在 servlet 类上,我使用:

Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
dataSource = (DataSource) envContext.lookup("jdbc/testdb");
...
connection = dataSource.getConnection();

但是在这一行,当我尝试从数据源获取连接时,出现以下异常:

java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'jdbc:mysql://xxx/myApp'
t org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2065)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1939)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
    at DBPoolConnectionServlet.processRequest(DBPoolConnectionServlet.java:73)
...
Caused by: java.sql.SQLException: No suitable driver

我以为可能是没有 JDBC Driver 造成的,所以我把mysql-connector-java-5.1.34-bin.jar 放进去:

    pom.xml 依赖 Tomcat LIB 文件夹 webapp 内的WEB-INF/lib 文件夹

但没有运气。

你能告诉我我做错了什么吗?我觉得很菜鸟... :(

非常感谢您花时间阅读(并希望回答)我的问题!!!

【问题讨论】:

你说你把JDBC驱动bin放到Tomcat LIB文件夹下,是不是JDBC的.jar文件? 是的,对不起,我在复制和粘贴过程中错过了扩展,它是一个 jar 文件。 【参考方案1】:

看起来你一切都很好,所以:

driverClassName="com.mysql.jdbc.Driver"(大写可能很重要)。

您放置 mysql-connector-java-5.1.34-bin.jar(它必须在 tomcat/lib 中检测到 jar 扩展名(不要将它放在您的 webapp 路径上,它应该由 tomcat 类加载器加载) .

如果它没有帮助并且您正在从 IDE 启动您的 webapp。尝试启动 tomcat 表单控制台并手动部署您的应用程序。如果您安装了多个 tomcat,请确保 CATALINA_HOME 设置为您放置 mysql jar 的那个。

【讨论】:

我尝试了手动部署,但结果是一样的。无论如何,深入了解堆栈跟踪我注意到以下错误:Caused by: java.sql.SQLException: No suitable driver 小伙子,非常感谢!!!你以某种方式解决了我的问题!!! :D 在寻找No suitable driver 异常后,我发现了这个问题:***.com/questions/5556664/…,特别是这个答案:***.com/a/19259608/1133284 出于某种原因,我需要打电话给Class.forName("com.mysql.jdbc.Driver");,即使我不应该这样做!!! :) 每次需要连接时都必须调用 Class.forName 吗? @RTF 不,我想你只需要一次,在任何连接之前!【参考方案2】:

可能的问题是 Tomcat 在类加载期间多次遇到驱动程序 jar。驱动 jar 只需要在 Tomcat lib 目录下,而不是在您的 Web 应用程序的 WEB-INF/lib 下。在这两个位置都有驱动程序 jar 导致我出现奇怪的类加载问题,表现为错误提示 “无法创建具有空类和空 url 的 jdbc 驱动程序”。请参阅此答案以了解其他数据库中的类似问题:https://***.com/a/11604084/2200690

更新:我不再从 Eclipse 中启动 Tomcat 以确保 Eclipse 和 Tomcat 设置不会混淆(相反,我只是从 bin 目录启动 Tomcat 并远程调试 jvm Eclipse)。一旦我做了这个改变,我可以在 Web-INF/lib 和 Tomcat lib 目录中都有驱动程序 jar,这没关系。

【讨论】:

【参考方案3】:

修复 Netbeans/Tomee/MySQL 连接问题和解决失败的步骤 - 在上下文路径 /RA7Web-1.0-SNAPSHOT 部署应用程序但上下文无法启动:

    使用 appBase 的完整路径名编辑 Tomee 服务器上的 server.xml:

     <!-- Fixed the problem of cannot deploy by providing a full path  for appBase -->`
     <Host name="localhost"  
           appBase="C:\apache\apache-tomee-7.0.2-plume\webapps"
           unpackWARs="true" autoDeploy="true">
    

    将以下内容添加到您的项目 web-xml:

    <resource-ref>
        <description>Resource Allocation database</description>
        <res-ref-name>jdbc/resourcealloc</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    

    将以下内容添加到您的 Context.xml:

      <Resource name="jdbc/resourcealloc"
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
            password="mySecretPwd"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/resourcealloc"
            maxActive="15"
            maxIdle="3"/>
    

    以下 resources.xml 已生成,但我必须编辑几个反斜杠以使其与我的 URL 匹配:

      <resources>
          <Resource id="jdbc/resourcealloc" type="javax.sql.DataSource">
              jdbcDriver=com.mysql.jdbc.Driver
              password=mySecretPwd
              userName=root
              jdbcUrl=jdbc:mysql://localhost:3306/resourcealloc?zeroDateTimeBehavior=convertToNull
          </Resource>
      </resources>
    

【讨论】:

以上是关于java.sql.SQLException: 无法从套接字读取更多的数据的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:无法从底层数据库获取连接! — HSQLDB

java.Sql.SQLException,无法加载类 net.ucanaccess.jdbc.UcanaccessDriver

无法获得 JDBC 连接;嵌套异常是 java.sql.SQLException:无法加载 JDBC 驱动程序类 'org.hsql.jdbcDriver'

java.sql.SQLException:无法锁定表“更改”;用户当前正在使用

Apache Derby - java.sql.SQLException:无法启动数据库

java.sql.SQLException: 无法从套接字读取更多的数据