dbutils(python怎么安装dbutils)

本文目录
- python怎么安装dbutils
- mybatis和dbutils比,各自有什么优缺点
- python有mysqldb为什么还要dbutils
- DbUtils用过后怎么关闭
- android studio 为什么不能用dbutils
- dbutils中的使用类应该怎么使用
- DButils 如何打印最后执行的sql
python怎么安装dbutils
到python官网上去下载你需要的版本https://www.python.org/
然后就像安装普通软件那样安装就行了
如果是linux系统,一般默认系统里面已经安装好了,直接在终端里面输入python即可
mybatis和dbutils比,各自有什么优缺点
首先,mybatis的SQL是可以写在配置文件中,并且可以支持动态SQL,如果你只是使用mybatis的sqlMap而不是当作orm来用,那么无论你是单表还是多表查询,都跟你直接在数据库中写sql查询没多大差别,不存在多表sql不好写的问题。dbutils比较轻量,但是他的sql是直接传递进去,不支持动态sql,如果你想要将sql从java代码中分离出来,或是要进行动态sql,那么你就mybatis,如果你的应用很小,基本不需要考虑分离sql集中管理,也基本没啥复杂的sql,那么你就使用dbutils,直接将sql写在java代码里。个人推荐还是使用mybatis,一是他的sqlMap功能可以将Sql分离集中管理,而且还支持动态SQL,让你的java代码更加简洁,另外有时候修改SQL不需要重新编译,方便上线后做微调。
python有mysqldb为什么还要dbutils
DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。
DBUtils提供两种外部接口:
* PersistentDB :提供线程专用的数据库连接,并自动管理连接。
* PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
实测证明 PersistentDB 的速度是最高的,但是在某些特殊情况下,数据库的连接过程可能异常缓慢,而此时的PooledDB则可以提供相对来说平均连接时间比较短的管理方式。
另外,实际使用的数据库驱动也有所依赖,比如SQLite数据库只能使用PersistentDB作连接池。
也就是说dbutils更通知不限于mysql
DbUtils用过后怎么关闭
这个得要程序配合啊,如果获取了Connection之后,得手动关闭啊,我以前用实例验证过,获得Connection之后,用proxool连接池看到的链接确实没有释放掉。
刚才看了下,官网上的例子,有这么一段:
ResultSetHandler《Object》 h = ... // Define a handler the same as above example
// No DataSource so we must handle Connections manually
QueryRunner run = new QueryRunner();
Connection conn = ... // open a connection
try{
Object result = run.query(
conn, “SELECT * FROM Person WHERE name=?“, h, “John Doe“);
// do something with the result
} finally {
// Use this helper method so we don’t have to check for null
DbUtils.close(conn);
}
android studio 为什么不能用dbutils
dbutils属于第三方的辅助开发框架,在Android Studio中使用需要添加对应的依赖,TeachCourse分析添加依赖的方法有三种常用的方式:
第一种:
选中需要添加依赖的module,菜单“Build——》Edit Libraries and Dependencies——》点击+——》Library dependency”,然后输入dbutils,搜索
根据搜索的结果,选中目标jar包后,点击“OK”
第二种:
1.选中需要添加dbutils jar包的module,找到build.gradle文件后打开,在dependencies标签中添加依赖:compile ’com.sop4j:dbutils:2.2’
2.然后点击工具栏中的“Sync Project With Gradle Files”按钮,下载对应的jar包到本地
第三种:
1.选中需要添加依赖的module,在该module检查是否存在libs文件夹,如果没有,手动创建libs文件夹
2.将网上下载好的dbutils jar包复制到libs文件夹中,然后打开build.gradle文件,在dependencies标签中,手动添加依赖:compile files(’libs/jar包名称’)
dbutils中的使用类应该怎么使用
示例代码:
package com.exam.test;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import junit.framework.TestCase;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.exam.db.DbManager;
import com.exam.util.BasicRowProcessorEx;
public class TestSomething extends TestCase {
public void testDBUtilSelect() {
Connection conn = DbManager.getInstance().getConnection();
QueryRunner queryRunner = new QueryRunner();
try {
// 返回单行记录,使用Map
System.out.println(“使用Map处理单行记录!“);
Map《String, Object》 map = queryRunner.query(conn,
“select * from tab where rownum=1“, new MapHandler(),
(Object) null);
for (Iterator《Entry《String, Object》》 i = map.entrySet().iterator(); i
.hasNext();) {
Entry《String, Object》 e = i.next();
System.out.println(e.getKey() + “=“ + e.getValue());
}
System.out.println(“处理多行记录!“);
List《Map《String, Object》》 list = queryRunner.query(conn,
“select * from tab where rownum《=3“, new MapListHandler(),
(Object) null);
for (Iterator《Map《String, Object》》 li = list.iterator(); li
.hasNext();) {
System.out.println(“--------------“);
Map《String, Object》 m = li.next();
for (Iterator《Entry《String, Object》》 mi = m.entrySet()
.iterator(); mi.hasNext();) {
Entry《String, Object》 e = mi.next();
System.out.println(e.getKey() + “=“ + e.getValue());
}
}
System.out.println(“使用Bean处理单行记录!“);
// com.exam.test.TestSomething.Tab
Tab tab = queryRunner.query(conn,
“select tname from tab where rownum=1“,
new BeanHandler《Tab》(Tab.class));
System.out.println(“tname=“ + tab.getTname());
System.out.println(“tabtype=“ + tab.getTabtype());
System.out.println(“使用Array处理单行记录!“);
Object array = queryRunner.query(conn,
“select * from tab where rownum=1“, new ArrayHandler());
for (int i = 0; i 《 array.length; i++) {
System.out.println(array[i]);
}
System.out.println(“使用Array处理多行记录!“);
List《Object》 arraylist = queryRunner
.query(conn, “select * from tab where rownum《=3“,
new ArrayListHandler());
for (Iterator《Object》 itr = arraylist.iterator(); itr.hasNext();) {
Object a = itr.next();
System.out.println(“--------------“);
for (int i = 0; i 《 a.length; i++) {
System.out.println(a[i]);
}
}
System.out.println(“使用ColumnListHandler处理单行记录,返回其中指定的一列!“);
List《Object》 colList = queryRunner.query(conn,
“select * from tab where rownum=1“, new ColumnListHandler(
“tname“));
for (Iterator《Object》 itr = colList.iterator(); itr.hasNext();) {
System.out.println(itr.next());
}
System.out
.println(“使用ScalarHandler处理单行记录,只返回结果集第一行中的指定字段,如未指定字段,则返回第一个字段!“);
Object scalar1 = queryRunner.query(conn, “select * from tab“,
new ScalarHandler(“tname“));
System.out.println(scalar1);
Object scalar2 = queryRunner.query(conn,
“select tname,tabtype from tab“, new ScalarHandler());
System.out.println(scalar2);
// 使用自定义的行处理器
// Map中的KEY可按输入顺序输出
System.out.println(“使用Map处理单行记录(使用自定义行处理器)!“);
Map《String, Object》 linkedmap = queryRunner
.query(
conn,
“select tabtype,tname,’wallimn’ as programmer from tab where rownum=1“,
new MapHandler(new BasicRowProcessorEx()),
(Object) null);
for (Iterator《Entry《String, Object》》 i = linkedmap.entrySet()
.iterator(); i.hasNext();) {
Entry《String, Object》 e = i.next();
System.out.println(e.getKey() + “=“ + e.getValue());
}
// 使用自定义的行处理器
// Map中的KEY可按输入顺序输出
System.out.println(“处理多行记录(使用自定义行处理器)!“);
List《Map《String, Object》》 listLinedMap = queryRunner
.query(
conn,
“select tabtype,tname,’wallimn’ as programmer from tab where rownum《=3“,
new MapListHandler(new BasicRowProcessorEx()),
(Object) null);
for (Iterator《Map《String, Object》》 li = listLinedMap.iterator(); li
.hasNext();) {
System.out.println(“--------------“);
Map《String, Object》 m = li.next();
for (Iterator《Entry《String, Object》》 mi = m.entrySet()
.iterator(); mi.hasNext();) {
Entry《String, Object》 e = mi.next();
System.out.println(e.getKey() + “=“ + e.getValue());
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DbUtils.closeQuietly(conn);
}
public void testDBUtilInsertDeleteUpdateSelect() {
// 建一个简单的测试表,建表脚本如下
// create table T_DBUTILTEST(
// id integer,
// name varchar2(255)
// );
Connection conn = DbManager.getInstance().getConnection();
QueryRunner queryRunner = new QueryRunner(true);
try {
queryRunner.update(conn, “delete from T_DBUTILTEST“);
// queryRunner.update(conn, “truncate table T_DBUTILTEST“);
// 插一条
for (int i = 0; i 《 10; i++) {
queryRunner.update(conn,
“insert into T_DBUTILTEST (id,name) values (?,?)“, i,
““);
}
// 再插多条
queryRunner.batch(conn,
“insert into T_DBUTILTEST (id,name) values (?,?)“,
new Object { { 11, “batch:wallimn@sohu.com“ },
{ 12, “batch:wallimn@sohu.com“ } });
// 删除示例
queryRunner.update(conn, “delete from T_DBUTILTEST where id=1“);
queryRunner.update(conn, “delete from T_DBUTILTEST where id=?“, 2);
queryRunner.batch(conn, “delete from T_DBUTILTEST where id=?“,
new Object { { 3 }, { 4 } });
// 修改示例
queryRunner.update(conn,
“update T_DBUTILTEST set name = ? where id=?“, “修改后的新值“, 5);
System.out.println(“最终结果显示结果“);
List《Map《String, Object》》 list = queryRunner.query(conn,
“select name,id from T_DBUTILTEST“, new MapListHandler(),
(Object) null);
for (Iterator《Map《String, Object》》 li = list.iterator(); li
.hasNext();) {
System.out.println(“--------------“);
Map《String, Object》 m = li.next();
for (Iterator《Entry《String, Object》》 mi = m.entrySet()
.iterator(); mi.hasNext();) {
Entry《String, Object》 e = mi.next();
System.out.print(e.getValue());
System.out.print(“,“);
}
System.out.println();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DbUtils.closeQuietly(conn);
}
}
DButils 如何打印最后执行的sql
mybatis默认使用log4j,当有self4j这个日志jar包存在时会无法打印sql,请移除或者在工程启动时显示设置mybatis使用的日志类:
log4j.logger.org.apache.ibatis=debug,stdout log4j.logger.java.sql=debug,stdout
这样有时可能却不是个可行的办法,原因在于不可能移除self4j包,因为其他依赖包必须依赖这个包。 mybatis有如下方法来手动选择日志类,调用后成功打印日志 如果引用了slf4j的包,并且要使用log4j需要加入slf4j-log4j12的包,如果没有加入slf4j-log4j12的包是无法打印sql的。。具体log4j文件如下:
log4j.rootCategory=info, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.Conversion
Pattern=[QC] %p [%t] %C.%M(%L) | %m%n

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00








