发布网友 发布时间:2022-04-27 11:57
共3个回答
懂视网 时间:2022-05-02 12:15
public Object query(String sql, Object[] params, ResultSetHandler rsh) :
几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
public Object query(Connection conn, String sql, ResultSetHandler rsh):
执行一个不需要置换参数的查询操作。
public int update(Connection conn, String sql, Object[] params):
用来执行一个更新(插入、更新或删除)操作。
public int update(Connection conn, String sql) :
用来执行一个不需要置换参数的更新操作。
代码示例:
/**
* 使用dbutils组件的QueryRunner类完成CURD,以及批处理
* Created by cenyu on 16-12-18.
*/
public class bdutilsUpdate {
private Connection conn;
//1.删除
@Test
public void testDelete() throws SQLException {
String sql = "delete from Admin where id=?";
//连接对象
conn = JdbcUtils.getConnection();
//创建DBUtils核心工具类对象
QueryRunner qr=new QueryRunner();
qr.update(conn,sql,3);//一个参数
//关闭
DbUtils.close(conn);
}
//2.插入
@Test
public void testInsert() throws SQLException {
String sql = "INSERT INTO Admin(userName,password) VALUES (?,?)";
//连接对象
conn = JdbcUtils.getConnection();
//创建DBUtils核心工具类对象
QueryRunner qr=new QueryRunner();
qr.update(conn,sql,"a111","a111");//两个参数
//关闭
DbUtils.close(conn);
}
//3.更改
@Test
public void testUpdate() throws SQLException {
String sql = "UPDATE Admin SET userName=? WHERE id=?;";
//连接对象
conn = JdbcUtils.getConnection();
//创建DBUtils核心工具类对象
QueryRunner qr=new QueryRunner();
qr.update(conn,sql,"Juerry",5);//两个参数
//关闭
DbUtils.close(conn);
}
//4.查询
@Test
public void testFind() throws SQLException {
String sql = "select * from Admin where id=?";
//连接对象
conn = JdbcUtils.getConnection();
//创建DBUtils核心工具类对象
QueryRunner qr=new QueryRunner();
Admin admin=qr.query(conn,sql,new BeanHandler<Admin>(Admin.class),5);
//关闭
System.out.println(admin);
DbUtils.close(conn);
}
//5.批处理
@Test
public void testBatch() throws SQLException {
String sql = "insert into Admin (userName, password) values(?,?)";
conn = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
//批量处理
qr.batch(conn,sql,new Object[][]{{"jack1","888"},{"jack","999"}});
//关闭
conn.close();
}
}
ResultSetHandler接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式
ResultSetHandler接口的实现类BeanHandler:
将结果集中的第一行数据封装到一个对应的JavaBean实例中。BeanListHandler:
将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。ArrayHandler:
把结果集中的第一行数据转成对象数组。ArrayListHandler:
把结果集中的每一行数据都转成一个数组,再存放到List中。ScalarHandler
查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)MapHandler
查询返回结果的第一条记录封装为map
代码示例:
/**
* 测试ResultSetHandler对查询结构的封装类
* Created by cenyu on 16-12-18.
*/
public class bdutilsQuery {
private Connection conn;
// 一、查询, 自定义结果集封装数据
@Test
public void testQuery() throws Exception {
String sql = "select * from admin where id=?";
// 获取连接
conn = JdbcUtils.getConnection();
// 创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
// 查询
Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {
// 如何封装一个Admin对象
public Admin handle(ResultSet rs) throws SQLException {
if (rs.next()) {
Admin admin = new Admin();
admin.setUserName(rs.getString("userName"));
admin.setPassword(rs.getString("password"));
return admin;
}
return null;
}
}, 29);
// 测试
System.out.println(admin);
// 关闭
conn.close();
}
// 二、查询, 使用组件提供的结果集对象封装数据
// 1)BeanHandler: 查询返回单个对象
@Test
public void testQueryOne() throws Exception {
String sql = "select * from admin where id=?";
// 获取连接
conn = JdbcUtils.getConnection();
// 创建DbUtils核心工具类对象
QueryRunner qr = new QueryRunner();
// 查询返回单个对象
Admin admin = qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 29);
System.out.println(admin);
conn.close();
}
// 2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
@Test
public void testQueryMany() throws Exception {
String sql = "select * from admin";
conn = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
// 查询全部数据
List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
System.out.println(list);
conn.close();
}
@Test
// 3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
// 4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
// 5) ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
// 6) MapHandler 查询返回结果的第一条记录封装为map
public void testArray() throws Exception {
String sql = "select * from admin";
conn = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
// 查询
//Object[] obj = qr.query(conn, sql, new ArrayHandler());
//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
//Long num = qr.query(conn, sql, new ScalarHandler<Long>());
Map<String, Object> map = qr.query(conn,sql, new MapHandler());
conn.close();
}
}
DbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:public static void close(…) throws java.sql.SQLException:
DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。
public static void closeQuietly(…):
这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
public static void commitAndCloseQuietly(Connection conn):
用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
public static boolean loadDriver(java.lang.String driverClassName):
这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。
BenUtils组件和DbUtils组件
标签:runner 抽象 inpu 模拟 query dbutils apache 创建对象 UI
热心网友 时间:2022-05-02 09:23
1.什么是 commons-beanutils :
BeanUtils主要提供了对于JavaBean进行各种操作。
2.commons-beanutils 的作用:
在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,
但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的。
但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来解决这个问题。
3. org.apache.commons.beanutils:
这个包主要提供用于操作JavaBean的工具类,Jakarta-Common-BeanUtils的主要功能都在这个包里实现。
BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:
1Simple——简单类型,如Stirng、Int……
(对于Simple类型,第二个参数直接是属性名即可,详见代码)
2Indexed——索引类型,如 数组、arrayList……
(对于Indexed,则为“属性名[索引值]”,注意这里对于ArrayList和数组都可以用一样的方式进行操作,详见代码)
3Maped——这个不用说也该知道,就是指Map,比如HashMap……
(对于Map类型,则需要以“属性名(key值)”的形式,详见代码)
访问不同类型的数据可以直接调用函数getProperty和setProperty。它们都只有2个参数,第一个是JavaBean对象,第二个是要操作的属性名。
4.Converter 把Request或ResultSet中的字符串绑定到对象的属性
经常要从request,resultSet等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,下面的代码谁都写腻了。
不妨写一个Binder自动绑定所有属性:
其中BeanUtils的populate方法(Struts用于将一个map的值填充到一个bean中)或者getProperty,setProperty方法其实都会调用convert进行转换。
但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。 对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。
要把这个Converter注册,需要如下语句:
例:
BeanUtilsBean beanUtils =new BeanUtilsBean( convertUtils, new PropertyUtilsBean() ) ;
热心网友 时间:2022-05-02 10:41
是build path包,在弹出的对话框中选择你要导入的jar 。
在使用BeanUtils工具包之前我们需要的Jar包有以下几种:
1、BeanUtils相关包
commons-beanutils-1.8.3.jar
commons-beanutils-1.8.3-javadoc.jar
2、 commons-beanutils-1.8.3-javadoc.jar
commons-beanutils-bean-collections-1.8.3.jar
commons-beanutils-core-1.8.3.jar
commons-logging.jar