Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 Tomcat 7无法获得与MySQL 5.5的数据库连接_Java_Mysql_Tomcat_Ubuntu - Fatal编程技术网

Java Tomcat 7无法获得与MySQL 5.5的数据库连接

Java Tomcat 7无法获得与MySQL 5.5的数据库连接,java,mysql,tomcat,ubuntu,Java,Mysql,Tomcat,Ubuntu,当尝试访问从数据库读取的servlet时,我遇到以下错误: HTTP Status 500 - ... java.lang.NullPointerException com.pdq.sms.db.DatabaseAccess.getConnection(DatabaseAccess.java:39) com.pdq.sms.db.DataRow.Read(DataRow.java:79) com.kessel.controllers.Home.doPost(Home.ja

当尝试访问从数据库读取的servlet时,我遇到以下错误:

HTTP Status 500 -
...
java.lang.NullPointerException
    com.pdq.sms.db.DatabaseAccess.getConnection(DatabaseAccess.java:39)
    com.pdq.sms.db.DataRow.Read(DataRow.java:79)
    com.kessel.controllers.Home.doPost(Home.java:50)
    com.kessel.controllers.Home.doGet(Home.java:39)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.26 logs.
查看Tomcat日志文件,我发现:“名称testapp在此上下文中未绑定”

这是服务器.xml的相关部分

<Host name="myserver.org" appBase="webapps/test" 
      unpackWARs="true" autoDeploy="true">
   <Context path="/" docBase="testapp" reloadable="false">
      <Resource name="jdbc/testapp" auth="Container"
          type="javax.sql.DataSource" maxActive="100" maxIdle="10" maxWait="10000"
          validationQuery="SELECT 1" driverClassName="com.mysql.jdbc.Driver"
          username="myuser" password="mypass"
          url="jdbc:mysql://localhost:3306/test_db?zeroDateTimeBehavior=convertToNull" />
    </Context>"
</Host>"
用户在MySQL服务器上设置正确,我可以手动连接并选择、插入相关数据库


我没有做对什么?

首先以简单的java proagram编写jdbc代码,不要忘记将jdbc驱动程序添加为外部jar文件。
您还可以尝试将jdbc jar文件放在tomcat lib文件夹或jre/lib/ext文件夹中,这是因为当servlet编译时,它将借助cse中的lib-jar文件将其放在第三方jar中。如果jdbc连接代码没有错误,它将在添加jar文件后运行该文件

更改您的resourceName

   java:comp/env/jdbc/testapp


NPE只是您自己代码中的一个bug。请先修复它,以便揭示真正的原因。也许您错误地接受和抑制了任何捕获到的异常,并继续代码流,而不是直接抛出它们?@BalusC什么让您认为这是代码中的错误?同样的代码在我使用Tomcat 7和MySQL 5.1运行的另一台服务器上运行良好。自从部署之后,我根本没有修改过代码。因为它是一个
运行时异常
,它起源于您自己的代码(
com.pdq.sms.db.DatabaseAccess
类来自您的代码库,对吗?)。请注意,这个bug不是您具体问题的原因,而是它隐藏了真正的潜在问题。因此,如果您首先修复了这个bug,那么真正的底层问题应该会被另一个更清晰的异常暴露出来;Context ctx=新的InitialContext();ds=(数据源)ctx.lookup(resourceName);ds看起来是空的,因为调用它的getConnection()会抛出NPE。现在,我在NamingException(这是IntialContext()或lookup()方法引发的唯一一个异常)的try/catch块中看到了这一点,它只是打印出异常的消息,我认为它是:“Name testapp未绑定在此上下文中”。通过直接引发异常修复异常的打印。应用程序必须崩溃,而不是继续使用
null
变量。好的,真正的根本原因是一个
命名异常:名称testapp在此上下文中没有绑定
?它没有任何区别。初始查找时(首次运行数据库代码时)不会引发任何异常。“Name testapp未绑定到此上下文”来自Tomcat,在我尝试访问数据库时记录,而不是在加载应用程序时记录。我尝试将上下文定义移动到它自己的context.xml文件中,但也没有成功。。。
   java:comp/env/jdbc/testapp
  java://comp/env/jdbc/testapp