论坛首页 Java企业应用论坛

struts2+spring3,spring3有没有办法动态改到datasourse中的user及password

浏览 14281 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (6)
作者 正文
   发表时间:2011-07-14  
newstong1 写道
kyan54 写道
cheng888qi 写道
继承下com.mchange.v2.c3p0.ComboPooledDataSource,覆盖setUser, setPassword,自己从数据库读取不行吗?

 

 

 

 

属性文件可以自己动态创建吧?

下面代码应该可以实现你说的这种

 

 

	private ComboPooledDataSource buildDataSource(Properties property)
			throws PropertyVetoException {
		ComboPooledDataSource ds = new ComboPooledDataSource();
		   //加载DataSource驱动
	      ds.setDriverClass(property.getProperty(DRIVER_CLASS));
	      //设置连接数据库的url
	      ds.setJdbcUrl(property.getProperty(JDBC_URL));
	      //设置数据库用户名
	      ds.setUser(property.getProperty(USER));
	      //设置数据库密码
	      
	      ds.setPassword(property.getProperty(PASSWORD));
	      //设置池的最大连接数
	      
	      ds.setMaxPoolSize(Integer.parseInt(property.getProperty(MAX_POOL_SIZE)));
	      //设置池的最小连接数
	      ds.setMinPoolSize(Integer.parseInt(property.getProperty(MIN_POOL_SIZE)));
	      ds.setMaxStatements(Integer.parseInt(property.getProperty(MAX_STATEMENTS)));
	      ds.setMaxIdleTime(Integer.parseInt(property.getProperty(MAX_IDLETIME)));
	      ds.setInitialPoolSize(Integer.parseInt(property.getProperty(INITIAL_POOLSIZE)));
	      ds.setCheckoutTimeout(Integer.parseInt(property.getProperty(CHECKOUT_TIMEOUT)));
	      ds.setIdleConnectionTestPeriod(Integer.parseInt(property.getProperty(IDLECONNECTIONTESTPERIOD)));
		return ds;
	}

 

如果按照这样写法,我原来的super.getJdbcTemplate().queryForInt( )这种方法是不是不能用了

 

jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dynamicDataSource);

我按照你们说的这种方法试了下 ,出了下面的错误:

Cannot create PoolableConnectionFactory (I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.)

是不是还有没想到的地方?

 

0 请登录后投票
   发表时间:2011-07-20  
楼主你可以这样
   List queryForList(String sql):
   List queryForList(String sql,Object[] args):
   List queryForList(String sql,Class requiredType):
   List queryForList(String sql, Object[] args, Class elementType):
   /*
   *示例
   */
   public class JdbcTemplateQuery
   {
   
    public static void main(String[] args)throws Exception
    {
  
     ComboPooledDataSource ds = new ComboPooledDataSource();
     ds.setDriverClass("com.mysql.jdbc.Driver");
     ds.setJdbcUrl("jdbc:mysql://localhost:3306/j2ee");
     ds.setUser("root");
     ds.setPassword("32147");
          ds.setMaxPoolSize(40);
          ds.setMinPoolSize(2); 
          ds.setMaxStatements(180); 
    
     //创建一个JdbcTemplate
     JdbcTemplate jt = new JdbcTemplate();
     //为JdbcTemplate指定DataSource
     jt.setDataSource(ds);
     //如果只需返回一个特定值,可直接查询
     int count = jt.queryForInt("select count(*) from mytable");
     System.out.println(count);
          //此处的转换实际非常简单:只支持Varchar->String的转换。
     String nametmp = (String)jt.queryForObject("select name from mytable where name='wawa2'",String.class);
     System.out.println(nametmp);
  
          
     List namelist = jt.queryForList("select name from mytable");
  
     for (Iterator it = namelist.iterator();it.hasNext(); )
     {
      System.out.println(it.next().getClass());           
          }
  
     //返回系列值
     List list = jt.queryForList("select * from mytable");
  
     for (Iterator it = list.iterator();it.hasNext(); )
     {
      System.out.println(it.next().getClass());
              System.out.println((Map)it.next());
     }
    }
   }

0 请登录后投票
   发表时间:2011-07-21  
我试下看看,感谢各位好心人回贴,哈哈
0 请登录后投票
   发表时间:2011-07-21  
这样做会存在什么隐患吗??
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics