记录学习Tomcat JSDI数据源技术的问题

在学习Tomcat JSDI数据源技术时,遇到'Name jdbc is not bound in this Context'错误。问题源于在WEB工程的context.xml中配置数据源导致,解决方法是将数据源配置移到Tomcat的conf/context.xml中,成功解决了找不到jdbc数据源的问题。
摘要由CSDN通过智能技术生成

我的记录是随机的,遇见啥就记录啥。

           今天学习Tomcat JSDI数据源技术只遇见了一个问题 就是报错:

Name jdbc is not bound in this Context :not find [jdbc]

  原因是在教学书上写时是建议在WEB工程目录下建立文件context.xml,并配置数据源信息。但是,按照书上的使用的话,就会报这个错。其实这个错误也很明显的提醒你是什么问题了,是找不到jdbc这个数据源,就可能是ctx.lookup("jdbc")的时候根本就找不到。经过网上找寻资料后,我最终还是选择了在Tomcat的目录下的conf/context.xml配置数据源信息,结果就成功了微笑。可能是我水平不到家的问题,不会使用在WEB工程目录下建立的文件context.xml .快哭了.接下来附上.java .xml.的代码.

.context.xml

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context path="/MyServer" reloadable="true" crossContext="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
<Loader delegate="true" />
<Resource name="JDBC"
    type="javax.sql.DataSource"
    auth="Container"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/data"
    username="root"
    password="123"
    maxActive="4"
    maxIdle="2"
    maxWait="6000" />
</Context>

 

WEB工程目录下的,在<web-app>内
web.xml

 <resource-ref>
  <description>DB</description>
  <res-ref-name>JDBC</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>

 

.java

 public void getNewuser(String name){ //Tomcat JSDI数据源技术

		 
		 Connection conn = null;
    	 PreparedStatement pstmt = null;
    	 DataSource ds= null;
    	  
		 
		 String sql = "insert into user(ID,password,name,mark)value(?,?,?,?)";
		  
			String [] strs = name.split("[,]");
			
			System.out.print(name);
			System.out.print(strs[0]+strs[1]);
			System.out.print(strs[2]);
		 
		  try {        
			  
			     InitialContext ctx=new InitialContext();       //暂时没找出context.xml在WENT-INF下的使用方法                   
		    	 ds = (DataSource)ctx.lookup("java:comp/env/JDBC"); //暂时使用context.xml在Tomcat的conf下的使用方法
		    	 conn = ds.getConnection();
		    	 pstmt = conn.prepareStatement(sql);
		    	 pstmt.setInt(1, Integer.valueOf(strs[0]));
		    	 pstmt.setInt(2,Integer.valueOf(strs[1]));
				 pstmt.setString(3,strs[2]);
				 pstmt.setInt(4,0);
				 pstmt.addBatch();  //批执行
		    	 int[] row = pstmt.executeBatch(); //批执行
		  
			   if(row.length>0){
				   System.out.print("成功增了"+row.length+"条记录");
			   }
			
			  
			/*  Class.forName("com.mysql.jdbc.Driver");
				
	          String url = "jdbc:mysql://localhost:3306/data";
	          String username ="root";
	          String password = "123";
	          
	          Connection conn = DriverManager.getConnection(url,username,password);
	          PreparedStatement ps = conn.prepareStatement(sql);
	          
	            ps.setInt(1,Integer.valueOf(strs[0]));
				ps.setInt(2,Integer.valueOf(strs[1]));
			    ps.setString(3,strs[2]);
			    ps.setInt(4,0);
			   
              
			    
	          ps.addBatch();
	      
	          int[] row = ps.executeBatch();
	          if(row.length>0) {
	          System.out.print("成功增了"+row.length+"条记录");
	          }*/
	         pstmt.close();
	          conn.close();   
              
		  } catch(Exception e){
	            e.printStackTrace();
	            System.out.print("错误");
	           }
					
		//  return retList.toArray(new user[0]) 
	 }



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值