Java Tomcat 7无法获得与MySQL 5.5的数据库连接
当尝试访问从数据库读取的servlet时,我遇到以下错误: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
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