官方对mysql使用标准三步走:
sql="insert into users(age) values(?)";
正常的操作是
stmt = db.Prepare(sql)
stmt.Exec(...)
stmt.Close
prepare的时候会先从连接池里取一个连接,然后根据sql语句 创建一个stmt。但是对于同一种数据频繁数据的场景来说,一次prepare就可以了,没必要每次都重写创建一次stmt。
因此在mysqlConn的时候维护一个cache,以sql语句为key,对应的stmt为value。
同一个sql语句直接返回stmt。
当DB.Close的时候,会调用每次mysqlConn的Close,此时遍历cache释放stmt(stmt.Close()) ,释放cache。
具体操作看我github提交的源码。
在理,这个库我看了下,其实实现就是相当于我之前说的维护一个sql语句和stmt的map。。这种就容易犯忘记释放的错误。
所以我倾向于交给驱动层去处理,缺点也显而易见就是太底层了,扩展性不方便。
#8
更多评论