• JDBC方式执行SQL,支持CRUD返回LIST


    背景:

    用惯了Mybatis,接收一个老项目使用Hibernate,特别不习惯。新的功能需要系统后台定时执行任务,顾使用JDBC封装工具类执行

    源代码

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.ytforever.listener.ResourceManager;
    
    /**
     * 使用JDBC连接数据库,处理系统自动执行任务等 特点: 直接执行sql,返回List<Map<字段名,值>>
     * 
     * @author ZhangLi
     * @date 2018年3月2日 下午2:57:58
     */
    public class JDBCUtil {
        private static String sql;
    
        public static List<Map<String, Object>> selectRS(String sql) {
            JDBCUtil.sql = sql;
            return selectRS();
        }
    
        public static List<Map<String, Object>> selectRS() {
            ArrayList<Map<String, Object>> rsList = new ArrayList<Map<String, Object>>();
            Map<String, Object> rsMap = null;
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;
            try {
                conn = JDBCUtil.getConnection("detection1", "detection1");
                conn.setAutoCommit(false);
                stmt = conn.prepareStatement(sql);
                rs = stmt.executeQuery();
                ResultSetMetaData rsmd = rs.getMetaData();// 取得数据库的列名
                int numberOfColumns = rsmd.getColumnCount();
                while (rs.next()) {
                    rsMap = new HashMap<String, Object>(numberOfColumns);
                    for (int i = 1; i < numberOfColumns + 1; i++) {
                        rsMap.put(rsmd.getColumnName(i), rs.getObject(i));
                    }
                    rsList.add(rsMap);
                }
                conn.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null)
                        rs.close();
                    if (stmt != null)
                        stmt.close();
                    if (conn != null)
                        conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
    
            }
            return rsList;
        }
    /**
    * 连接Oracle数据库
    */
    public static Connection getConnection(String user, String password) {
            Connection con = null;
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                con = DriverManager.getConnection(
                        "jdbc:oracle:thin:@localhost:1521/orcl", user, password);
                return con;
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args) {
            String sql = String.format("select * from V_ITEM t  where t.product_code='%s' and t.procedure_code='%s' and form_id is not null","YQ","2");
            List<Map<String, Object>> selectRS = JDBCUtil.selectRS(sql);
            for (Map<String, Object> map : selectRS) {
                map.get("FORM_ID");
            }
        }
    
    }

    特点:

    1、特别方便

    2、习惯写Sql的程序员看着特别亲切

    3、转换为List之后,返回前台Json,前台人员也很舒服

    于2018-03-02 16:05完成于西安逸翠园二期2号楼2单元

    沫沫金

    QQ:976465996

    欢迎同仁联系,拍砖。

  • 相关阅读:
    Django Form组件实例:登录界面[Form表单提交,Ajax提交]
    开张啦!
    CART剪枝
    TensorFlow全新的数据读取方式:Dataset API入门教程
    关于神经网络中的padding
    cs231n(一)
    协方差与pearson相关系数
    Auto Encoder
    markdown公式编辑参考
    Python使用日常
  • 原文地址:https://www.cnblogs.com/zl0828/p/8493769.html
Copyright © 2020-2023  润新知