设为首页 收藏本站
查看: 890|回复: 0

[经验分享] apache db

[复制链接]

尚未签到

发表于 2016-12-29 09:10:37 | 显示全部楼层 |阅读模式
queryRunner 摘抄
查询 runner object dbutils update 
日期:8月9日

讲师:佟刚
在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿。为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——DBUtils。我们今天主要学习了它所提供的两个类和一个接口。
组件下载地址:http://commons.apache.org/dbutils/
DbUtils类(org.apache.commons.dbutils.DbUtils)主要负责装载驱动、关闭连接的常规工作。
1.       close: 检查所提供的参数是不是NULL,如果不是的话,它们就关闭连接、声明和结果集。
2.       CloseQuietly:避免连接、声明或结果集为NULL的情况被关闭。
3.       CommitAndCloseQuietly(Connection conn):用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。
4.       LoadDriver(String driveClassName): 装载并注册JDBC驱动程序,如果成功就返回TRUE。
 
QreryRunner类(org.apache.commons.dbutils.QueryRunner) 显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。
1.       query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
2.       query(String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
3.       query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。
4.       update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。
 
ResultSetHandler接口(org.apache.commons.dbutils.ResultSethandler)执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。
1.       Object handle (java.sql.ResultSet .rs) :结果集(ResultSet)作为参数传入方法内,处理这个结果集,返回一个对象。
ArrayHandler
ArrayListHandler
BeanHandler
BeanListHandler
MapHandler
MapListHandler
ScalarHandler
我们学习了此组件的两个类和一个接口以后,写了下列代码供参考。
import java.sql.Connection;
import java.sql.SQLException;
 
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
 
public class TestQueryRunner {
 
         public static void main(String[] args) throws SQLException {
                   // TODO Auto-generated method stub
                   //queryOracle();
                   update();
         }
 
         private static void update() throws SQLException{
                   QueryRunner runner = new QueryRunner();
                   Connection conn = DBManager.getConnection();
                   //删除非 manager 中工资 低于 5000 的员工
                   String sql = "UPDATE examstudent SET student_name = ? WHERE flow_id = ?";
                   Object [] params = new Object[]{"Jerry", 5000};
 
                   runner.update(conn, sql, params);
         }
 
         private static void insert() throws SQLException{
                   QueryRunner runner = new QueryRunner();
                   Connection conn = DBManager.getConnection();
                   //删除非 manager 中工资 低于 5000 的员工
                 String sql = "INSERT INTO examstudent(flow_id, type, id_card, exam_card, student_name, location, grade) VALUES(?, ?, ?, ?, ?, ?, ?)";
                   Object [] params = new Object[]{5000, 6, "身份证", "准考证", "Tom", "北京", 99};
 
                   runner.update(conn, sql, params);
         }
 
         private static void delete() throws SQLException{
                   QueryRunner runner = new QueryRunner();
                   Connection conn = DBManager.getConnection();
                   //删除非 manager 中工资 低于 5000 的员工
                   String sql = "delete from employees " +
                                                "where employee_id not in " +
                                                "     (select distinct d.manager_id from departments d where d.manager_id is not null) " +
                                                "and salary < ?";
                   System.out.println(sql);
                   Object [] params = new Object[]{5000};
 
                   runner.update(conn, sql, params);
         }
 
         private static void queryOracle() throws SQLException{
                   QueryRunner runner = new QueryRunner();
 
                   Connection conn = DBManager.getConnection();
                   //oracle 中的别名可以别解析
                   String sql = "SELECT flow_id flowid, type, id_card idcard, exam_card examcard, student_name studentname, location, grade FROM examstudent";
                   Object obj = runner.query(conn, sql, new BeanListHandler(ExamStudent.class));
                   System.out.println(obj);
         }
 
         private static void query() throws SQLException {
                   //1. 创建一个 QueryRunner 的实例
                   QueryRunner runner = new QueryRunner();
 
 
                   Connection conn = DBManager.getConnection();
                   String sql = "SELECT id, name, address, phone FROM customers WHERE name LIKE ?";
                   Class type = Customer.class;
                   Object [] params = new Object[]{"%%"};
 
                   //2. 查询操作
                   //conn: 查询需要的数据库连接, sql: 查询使用的 sql 语句, rsh: 如何转换查询得到的结果集, params: 填补 sql 语句参数的数组
                   Object obj = runner.query(conn, sql, new BeanListHandler(type), params);
                   //System.out.println("^^" + obj);
 
                   sql = "SELECT flow_id flowid, type, id_card idcard, exam_card examcard, student_name studentname, location, grade FROM examstudent";
                   type = ExamStudent.class;
 
                   obj = runner.query(conn, sql, new BeanListHandler(ExamStudent.class));
                   System.out.println(obj);
                   }
}
几天来的学习令人获益匪浅。如同刚开始学习数据库时所说的那样,当今的企业开发大都是围绕数据库进行的,它重要性不言而喻。这些日子,我们从每一个细节入手,希望更广更深的了解掌握数据库开发技术。我的日志显然无法囊括全部所学内容。很多技术还需自己加紧练习,对于这些不敢保证自己的理解万分正确的技术点,我就暂时不写了。待到以后使用之时会提到。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-320869-1-1.html 上篇帖子: tomcat apache 下篇帖子: Apache James
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表