开发者社区> 问答> 正文

如何才能根据这些查询到的信息切换数据库打到多数据源的功能?:报错

在1.8版本中。 在我数据库中有一个表,其中有连接数据库的url、用户名、密码等信息。

@JFinal 你好,想跟你请教个问题:你好,在1.8版本中。
在我数据库中有一个表,其中有连接数据库的url、用户名、密码等信息。如何才能根据这些查询到的信息切换数据库打到多数据源的功能?

展开
收起
kun坤 2020-06-05 22:40:07 587 0
1 条回答
写回答
取消 提交回答
  • 引用来自“JFinal”的评论

        创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com

    引用来自“孑然医生”的评论

    这种方式貌似必须在configPlugin里面设置。但是我要先连接数据库得到连接地址等信息啊

    引用来自“孑然医生”的评论

    List<Record> record=Db.find("select * from servicer s left join warehouse w on s.id=w.ser_id");    
            Plugins me= new Plugins();
            
            for (Record re : record) {
                String jdbcUrl="jdbc:mysql://localhost/"+re.getStr("name")+"?useUnicode=true&characterEncoding=GB2312";
                String name=re.getStr("ware_name");
                String pwd=re.getStr("ware_pwd");
                
                C3p0Plugin c3p0Plugin2 = new C3p0Plugin(jdbcUrl, name, pwd);
                me.add(c3p0Plugin2);
                ActiveRecordPlugin arpOracle = new ActiveRecordPlugin(re.getStr("id"),c3p0Plugin2);
                arpOracle.start();
                me.add(arpOracle);
            }
        Plugins 这个对象是 JFinal 启动时提供的,不能 new 出来使用,大概看出来你的意图,给个大概的程序如下:

    引用来自“JFinal”的评论

    List<Record> dataSources = Db.find(....);
    int i = 0;
    for (Record ds : dataSources) {
      C3p0Plugin cp = new C3p0Plugin(ds.getXxx, ...);
      cp.start();
      ActiveRecordPlugin arp = new ActiveRecordPlugin("config_" + (i++), cp);
      arp.start();
    }

    配置名这个参数在 for 循环中成了 config_0、config_1、config_2.... 这样的形式,最后需要手动调用一下cp.start() 与 arp.start(),包括你前面的 Db.find 如果想正常使用,也需要手动 arp.start(),除非你是在 configPlguin 中已经 me.add(arp) 了

    引用来自“孑然医生”的评论

    Plugins不能NEW出来的话,怎么得到?
    YourJFinalConfig 中的 configPlugin(Plugins me) 这里已经传给你了,如果你不在 configPlugin 中初始化,就不需要 new 出来,直接调用 plugin 的 start() 即可打完收工,Plugins 其实就是帮助调用 start() 的######回复 @JFinal : 请问如何关闭或者说删除、修改特定的configName的连接数据库信息?######回复 @孑然医生 : 仔细看看 jfinal 手册,节省你无数时间######回复 @JFinal : 多谢!花了您不少时间了######回复 @孑然医生 : 无需关闭######回复 @孑然医生 : 每个 new ActiveRecordPlugin 的arp对象,设置的 configName 必须不同,代码已经写给你了 "config_" + (i++), 这段在每次循环时会产生新的 configName ,就是为了防止你说的错误的######@JFinal很急,能否帮忙先解决下!在线等!######    创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com######这种方式貌似必须在configPlugin里面设置。但是我要先连接数据库得到连接地址等信息啊。在configPlugin方法里面去连接数据库得到另外的连接信息,会报错!######

    引用来自“JFinal”的评论

        创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com

    这种方式貌似必须在configPlugin里面设置。但是我要先连接数据库得到连接地址等信息啊

    ######回复 @JFinal : Plugins不能NEW出来的话,怎么得到?######回复 @孑然医生 : 搞定后别忘了回来分享######回复 @JFinal : 感激不尽######回复 @孑然医生 : c3p0Plugin也需要调用 start() 方法才可以,因为你这样都不是在 configPlugin 中######回复 @JFinal : plugin = new C3p0Plugin(jdbcUrl, name, pwd)me.add(plugin);active = new ActiveRecordPlugin("ser"+re.getInt("id").toString(),plugin); 这段代码给了地址和用户信息会报dataSource can not be null错误。######

    引用来自“JFinal”的评论

        创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com
    在configPlugin方法里面我试着链接数据库得到信息,但是会报错######

    引用来自“JFinal”的评论

        创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com

    引用来自“孑然医生”的评论

    这种方式貌似必须在configPlugin里面设置。但是我要先连接数据库得到连接地址等信息啊

    List<Record> record=Db.find("select * from servicer s left join warehouse w on s.id=w.ser_id");    
            Plugins me= new Plugins();
            
            for (Record re : record) {
                String jdbcUrl="jdbc:mysql://localhost/"+re.getStr("name")+"?useUnicode=true&characterEncoding=GB2312";
                String name=re.getStr("ware_name");
                String pwd=re.getStr("ware_pwd");
                
                C3p0Plugin c3p0Plugin2 = new C3p0Plugin(jdbcUrl, name, pwd);
                me.add(c3p0Plugin2);
                ActiveRecordPlugin arpOracle = new ActiveRecordPlugin(re.getStr("id"),c3p0Plugin2);
                arpOracle.start();
                me.add(arpOracle);
            }######

    引用来自“JFinal”的评论

        创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com

    引用来自“孑然医生”的评论

    这种方式貌似必须在configPlugin里面设置。但是我要先连接数据库得到连接地址等信息啊

    引用来自“孑然医生”的评论

    List<Record> record=Db.find("select * from servicer s left join warehouse w on s.id=w.ser_id");    
            Plugins me= new Plugins();
            
            for (Record re : record) {
                String jdbcUrl="jdbc:mysql://localhost/"+re.getStr("name")+"?useUnicode=true&characterEncoding=GB2312";
                String name=re.getStr("ware_name");
                String pwd=re.getStr("ware_pwd");
                
                C3p0Plugin c3p0Plugin2 = new C3p0Plugin(jdbcUrl, name, pwd);
                me.add(c3p0Plugin2);
                ActiveRecordPlugin arpOracle = new ActiveRecordPlugin(re.getStr("id"),c3p0Plugin2);
                arpOracle.start();
                me.add(arpOracle);
            }
        Plugins 这个对象是 JFinal 启动时提供的,不能 new 出来使用,大概看出来你的意图,给个大概的程序如下:
    List<Record> dataSources = Db.find(....);
    int i = 0;
    for (Record ds : dataSources) {
      C3p0Plugin cp = new C3p0Plugin(ds.getXxx, ...);
      cp.start();
      ActiveRecordPlugin arp = new ActiveRecordPlugin("config_" + (i++), cp);
      arp.start();
    }

    配置名这个参数在 for 循环中成了 config_0、config_1、config_2.... 这样的形式,最后需要手动调用一下cp.start() 与 arp.start(),包括你前面的 Db.find 如果想正常使用,也需要手动 arp.start(),除非你是在 configPlguin 中已经 me.add(arp) 了

    ######

    引用来自“JFinal”的评论

        创建多个数据源插件,并且为这多个数据源插创建 ActiveRecrodPlugin 对象 arp,然后为这多 arp 对象分别 arp.addMapping(tableName, ModelName.class),对于 Model来说,会自动切换到相应的数据源,对于 Db + Record 模式来说,需要使用 Db.use(configName) 来切换, JFinal 手册上有详细的例子,可以此下载:  http://www.jfinal.com

    引用来自“孑然医生”的评论

    这种方式貌似必须在configPlugin里面设置。但是我要先连接数据库得到连接地址等信息啊

    引用来自“孑然医生”的评论

    List<Record> record=Db.find("select * from servicer s left join warehouse w on s.id=w.ser_id");    
            Plugins me= new Plugins();
            
            for (Record re : record) {
                String jdbcUrl="jdbc:mysql://localhost/"+re.getStr("name")+"?useUnicode=true&characterEncoding=GB2312";
                String name=re.getStr("ware_name");
                String pwd=re.getStr("ware_pwd");
                
                C3p0Plugin c3p0Plugin2 = new C3p0Plugin(jdbcUrl, name, pwd);
                me.add(c3p0Plugin2);
                ActiveRecordPlugin arpOracle = new ActiveRecordPlugin(re.getStr("id"),c3p0Plugin2);
                arpOracle.start();
                me.add(arpOracle);
            }
        Plugins 这个对象是 JFinal 启动时提供的,不能 new 出来使用,大概看出来你的意图,给个大概的程序如下:

    引用来自“JFinal”的评论

    List<Record> dataSources = Db.find(....);
    int i = 0;
    for (Record ds : dataSources) {
      C3p0Plugin cp = new C3p0Plugin(ds.getXxx, ...);
      cp.start();
      ActiveRecordPlugin arp = new ActiveRecordPlugin("config_" + (i++), cp);
      arp.start();
    }

    配置名这个参数在 for 循环中成了 config_0、config_1、config_2.... 这样的形式,最后需要手动调用一下cp.start() 与 arp.start(),包括你前面的 Db.find 如果想正常使用,也需要手动 arp.start(),除非你是在 configPlguin 中已经 me.add(arp) 了

    Plugins不能NEW出来的话,怎么得到?
    2020-06-05 22:40:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载