帮忙解决数据库的连接池小问题,最终的目的是获取数据库的连接

发布于 2021-12-01 03:25:01 字数 4105 浏览 896 评论 11

写了一个获得数据库连接的类:
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class GetConn {
public  Connection getConn() throws ClassNotFoundException, SQLException, NamingException{
       //创建一个没有实例化的数据库的连接对象
        Connection conn=null;
       // 初始化上下文
        Context cxt=new InitialContext();
      //获取与逻辑名相关联的数据源对象
        DataSource  ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
      //通过数据源拿到数据库的连接
        conn=ds.getConnection();
      //返回连接
        return  conn;
}
}
***********************************************************************
Tomcat中配置的信息如下
<!-- The contents of this file will be loaded for each web application -->
<Context>
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

<Resource name="jdbc/news"
auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/abcd"/>
</Context>
***************************************************************
写了一个jsp页面,想要得到数据库的连接
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="GetConn"%>
<%@page import="java.sql.Connection"%>
<%
  GetConn   conn =new GetConn();
  Connection conn= conn.getConn();
%>
得到了数据库的连接:
<%=conn%>
*********************************************
浏览器报错
帮忙解决一下是什么原因造成的.....
***************************

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 


An error occurred at line: 5 in the jsp file: /index.jsp
GetConn cannot be resolved to a type
2: <%@page import="GetConn"%>
3: <%@page import="java.sql.Connection"%>
4: <%
5:  			 GetConn   conn =new GetConn();
6:  			 Connection conn= conn.getConn();
7: %>
8: 				寰楀埌浜嗘暟鎹簱鐨勮繛鎺�


An error occurred at line: 5 in the jsp file: /index.jsp
GetConn cannot be resolved to a type
2: <%@page import="GetConn"%>
3: <%@page import="java.sql.Connection"%>
4: <%
5:  			 GetConn   conn =new GetConn();
6:  			 Connection conn= conn.getConn();
7: %>
8: 				寰楀埌浜嗘暟鎹簱鐨勮繛鎺�


An error occurred at line: 6 in the jsp file: /index.jsp
Duplicate local variable conn
3: <%@page import="java.sql.Connection"%>
4: <%
5:  			 GetConn   conn =new GetConn();
6:  			 Connection conn= conn.getConn();
7: %>
8: 				寰楀埌浜嗘暟鎹簱鐨勮繛鎺�
9: <%=conn%>


Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:308)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.

Apache Tomcat/6.0.10


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

半世蒼涼 2021-12-02 05:57:08

是我搞错了,配置web.xml文件也可以用

  <!-- JNDI -->

 <resource-ref>

    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/news</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>

裸钻 2021-12-02 05:56:54

问题出在数据源的命名这里,命名不规范,容易被解释成包含目录

cxt.lookup("java:comp/env/jdbc/news"); //这里最终找的是news这个数据源,而不是jdbc/news

<Resource name="jdbc/news"      //这个地方要改成news,命名要规范点才行

吃颗糖壮壮胆 2021-12-02 05:56:53

非常的感谢了,但是我刚开始运行的时候也会出现上次的错误,但是在getConn的类中加了一个包,就得到了最后的连接,不知道和用不用放在这个包中有没有影响。。。

回眸一笑 2021-12-02 05:33:45
GetConn   conn =new GetConn();
 Connection conn= conn.getConn();
 两个变量名都叫conn 冲突了哦
吃颗糖壮壮胆 2021-12-02 05:03:31

我加了try-cache代码,可是最后的结果还是一样的....不知道是怎么回事.....

滥情空心 2021-12-02 04:55:56

回复
GetConn cannot be resolved to a type,这个也要确认一下,发一下你的目录结构?另外建议不要用默认包定义类

把昨日还给我 2021-12-02 04:05:07

谢谢帮助,我就是加了个包,但是现在才看到你的解答,跟我的想法可是不谋而合啊....

冬天旳寂寞 2021-12-02 02:38:03

能具体点吗?不知道您说的是哪些...

看透却不说透 2021-12-01 19:25:44

回复
错误信息看不完整呀。

鹤舞 2021-12-01 18:16:16

数据源应该要设置单例模式吧,然后让数据连接来获得连接。你定义一个局部变量,这样子的话,每次都是获得一个新的连接池。

顾忌 2021-12-01 14:51:39

提问要具点,到底是什么错?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文