数据库问题

今天用了一天Jfinal连接数据库的操作,虽然api很多感觉可以各种姿势操作数据库,但是或许是对数据库的操作完全封装了,导致自己在使用过程中经常出现莫名的问题,比如模型中dao静态对象不允许调用,查询都不行,比如用new User().find(sql)查询报空指针,换Db.find(sql)又可以,总之用起来踩了很多坑还是没搞明白错误所在;还有个问题希望波总解答——我的服务是用jetty启动的,在configPlugin方法中用druidPlugin配置了mariaDB的连接,大概就是这段代码:

new DruidPlugin(PropKit.get("jdbcUrl",""),PropKit.get("username",""), PropKit.get("password",""));
ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
me.add(dp);
me.add(arp);
。。。

调试的原因jetty频繁的启动又关闭,最后导致再启动jetty时数据库报java.sql.SQLException: Too many connections错误。虽然知道连接被占满,但是这是通过插件建立的连接,我自己并没有获取到connection,那我怎么去主动释放数据库连接呢?谢谢

评论区

JFinal

2018-05-22 22:42

new User().find(sql) 这个报空指针,肯定是没添加是添加映射:
arp.addMapping("user", User.class);

当然,这个映射在 jfinal 中是可以用生成器自动搞定的,下载首页的 jfinal demo,里头有例子,看一下 _MappingKit.java 这个类

如果希望 jetty 不要频繁启动又关闭,可以将启动参数中的最后一个参数 5 改为 0

陈本布衣

2018-05-23 09:22

@JFinal 谢谢波总的解答,但还是有疑惑——这里不是不希望jetty频繁启动关闭,而是ide中开发的时候自己在启动和关闭服务器,但是最后导致数据库连接占满了,我主要是想搞清楚jfinal中是通过plugin的方式连接的数据库,自己并没有拿到数据库连接对象,又怎么去主动的关闭连接释放资源?

JFinal

2018-05-23 10:13

@陈本布衣 DruidPlugin 中的 stop() 方法就是释放资源的,很可能你是直接杀掉了 JVM 进程,所以这个方法没被调用, 一般也没啥事

陈本布衣

2018-06-06 16:35

经常做Model和数据库表的映射,那么请问波总映射数据库字段和Model定义的字段必须一致吗?不一致怎么映射呢?因为有时候只是想表单字段比如name和model中的name一致,但是数据库中我叫username,请问三者之间怎么建立的对应关系?谢谢波总解答

JFinal

2018-06-06 17:40

@陈本布衣 自动化对应的,不需要人工干预

陈本布衣

2018-06-06 18:33

@JFinal 自动化对应怎么理解?就是模型和数据库字段必须一样的意思吗?因为如果模型中的字段名字和数据库字段不一样,两者应该无法自动识别对应吧?比如模型中名叫a ,数据库字段叫 b,这两个能对应起来?

JFinal

2018-06-06 18:45

@陈本布衣 下载首页的 jfinal demo ,里面有现成的例子,比在这里用文字表达要好得多

热门反馈

扫码入社