zoukankan      html  css  js  c++  java
  • JDBC连接数据库类(主要用于存储过程)

    数据库连接类(SQLCONN)在MSSQL2005上测试通过,因为决定以后好好学习英文以适应鬼佬API,所以注释都是全英。因水平有限,如果有错请指出~~

    另外这里返回的记录是封装在一个ArrayList里面 所以那些实时更新的操作是无力diesi~ 其实还可以把出参入参学C#一样封装在一个参数的类里面,但是 本人非常懒 就不搞了~~~

    补充两句: 最近在看资料的时候看到了很多批判JAVA效率的人和文章,有人甚至说JAVA垃圾,好吧,这些连JAVA编程思想都没有通读的人说的屌丝话我就不理睬了。因为我自己对JAVA也是理解不深,因此也不评价了。但是总觉得这种黑跟那些脑残粉一样,黑要有水平粉亦是,如果对某个物体完全不了解的情况下就肆意地去黑,随意地去粉,这跟脑残有什么区别呢?

    总结下来:跟C#比 Java的数据库连接方面做得真心不多 或者说JDBC做得不多 或者说JDBC面对编程人员做的不多(考虑很久远之前的连接数据库模型,现在的JDBC不能说做得不多) 看看C#的DataSet 等等各种DB容器 我就泪奔了~ 但是这不正是JAVA美妙的地方吗?没有的东西 做一个就好!

    最后 C#和Java给我的感觉就是 C#给我两个鬼带4个2 然后告诉我 这样出就赢了 而JAVA是给我一个大鬼 一个黑桃2 一个红桃2 一个方片2 一个小鬼 一个梅花2 然后跟我说 你自己看着办吧 骚年~~

    =======写在下午的话======

    由于实在太难用了 愤怒之下改代码了 ~~

    =======写在2013-7-5的话=======

    其实这个类已经被我改的差不多了。。。不过总体的思路还是没有变。。。以前一直不明白ResultSet跟DataSet有什么区别。。现在貌似是懂了 就是一个是动态数据 一个是静态数据 而现在的感觉是 这些静态容器其实没什么用。。。因为如果遵照JPA的游戏规则 按照O/R模型去玩的话 这些东西貌似又没什么必要了。。。

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package dataanalysis_erp_plug.DataAnalysis;
    
    import java.sql.*;
    import java.util.*;
    import java.util.logging.*;
    
    /**
     *
     * @author Administrator
     *
     * private function: open(): open a connection; close(): close a connection;
     *
     * public function: runSQL(): run a sql code and return a number. This number should be a number of be affected rows; getResultListFromProc(): run a stored procedure and return a ResultSet
     * getResultSetFromSQL(): run sql code and return a ResultSet
     *
     */
    public class SQLCONN {
        
        public ArrayList<Object[]> table = new ArrayList<Object[]>();
        public ArrayList outputParams = new ArrayList();
        
        private Connection conn = null;
        private String driver, serverName, userName, password;
        private ArrayList<Object[]> _outputParams = new ArrayList<Object[]>();
        private ArrayList<Object[]> _inputParams = new ArrayList<Object[]>();
    
        public SQLCONN(String driver, String serverName, String userName, String password) {
            this.serverName = serverName; //include a dbName here, ex: "jdbc:sqlserver://192.168.0.251\\GSSL; DatabaseName=Materials"
            this.driver = driver;
            this.password = password;
            this.userName = userName;
        }
    
        public int runSQL(String sql) {
            int returnNumber = -1;
            try {
                this.open();
                try (Statement stmt = conn.createStatement()) {
                    returnNumber = stmt.executeUpdate(sql);
                }
            } catch (ClassNotFoundException | SQLException ex) {
                Logger.getLogger(SQLCONN.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                this.close();
                return returnNumber;
            }
        }
    
        public ResultSet getResultSetFromSQL(String sql) {
            ResultSet returnResultSet = null;
            try {
                this.open();
                try (Statement stmt = conn.createStatement()) {
                    returnResultSet = stmt.executeQuery(sql);
                    returnResultSet.close();
                }
            } catch (ClassNotFoundException | SQLException ex) {
                Logger.getLogger(SQLCONN.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                this.close();
                return returnResultSet;
            }
        }
    
        /*
         * input Params:
         * procName: database stored process's name (String)
         * inputs: an ArrayList with an Object Array in it. Objcet[0] means input params name (String), object[1] means input params value (Object)
         * outputs: an ArrayList with an Object Array in it. Objcet[0] means output params name (String), object[1] means output params type (int from java.sql.Types.*)
         * 
         * output Params:
         * is a ArrayList. [0] is a ArrayList<Object[]> descript ResultSet. [1 ... n] is a set of database stored process output Params.
         * 
         * throw an exception when the number of inputparam don't match
         * 
         */
        
        public void runProc(String procName) throws Exception {
             int i = 0;
             this.outputParams.clear();
             this.table.clear();
             String callString = "{call " + procName + "(";
             if (this._inputParams.isEmpty() && this._outputParams.isEmpty()) {
                 callString = callString + ")}";
             } else {
                 callString = callString + "?";
                 if (!this._inputParams.isEmpty()) {
                     for (i = 1; i < this._inputParams.size(); i++) {
                         callString = callString + ",?";
                     }
                 }
                 if (!this._outputParams.isEmpty()) {
                     for (i = (this._inputParams.isEmpty() ? 1 : 0); i < this._outputParams.size(); i++) {
                         callString = callString + ",?";
                     }
                 }
                 callString = callString + ")}";
             }
             try {
                 this.open();
                 try (CallableStatement cstmt = conn.prepareCall(callString)) {
                     //init input params
                     if (this._inputParams != null) {
                         for (i = 0; i < this._inputParams.size(); i++) {
                             switch(this._inputParams.get(i).length){
                                 case 2:
                                     cstmt.setObject((String) this._inputParams.get(i)[0], this._inputParams.get(i)[1]);
                                     break;
                                 case 3:
                                     cstmt.setObject((String) this._inputParams.get(i)[0], this._inputParams.get(i)[1], (Integer) this._inputParams.get(i)[2]);
                                     break;
                                 case 4:
                                     cstmt.setObject((String) this._inputParams.get(i)[0], this._inputParams.get(i)[1], (Integer) this._inputParams.get(i)[2], (Integer) this._inputParams.get(i)[3]);
                                     break;
                                 default:
                                     throw new Exception("Error: the number of input param's input param is not match");
                             }
                         }
                     }
                     //init output params
                     if (this._outputParams != null) {
                         for (i = 0; i < this._outputParams.size(); i++) {
                             switch(this._outputParams.get(i).length){
                                 case 2:
                                     cstmt.registerOutParameter((String) this._outputParams.get(i)[0], (Integer) this._outputParams.get(i)[1]);
                                     break;
                                 case 3:
                                     cstmt.registerOutParameter((String) this._outputParams.get(i)[0], (Integer) this._outputParams.get(i)[1], (Integer) this._outputParams.get(i)[2]);
                                     break;
                                 default:
                                     throw new Exception("Error: the number of output param's input param is not match");
                             }
                         }
                     }
                     cstmt.execute();
                     //bind the ResultSet to HashMap
                     ResultSet rs = cstmt.getResultSet();
                     ResultSetMetaData rsmd = rs.getMetaData();
                     if (rs != null) {
                         while (rs.next()) {
                             Object[] col = new Object[rsmd.getColumnCount()];
                             for (i = 0; i < rsmd.getColumnCount(); i++) {
                                 col[i] = rs.getObject(i + 1);
                             }
                             this.table.add(col);
                         }
                     } else {
                         this.table = null;
                     }
                     //get output params
                     for (i = 0; i < this._outputParams.size(); i++) {
                         this.outputParams.add(cstmt.getObject((String) this._outputParams.get(i)[0]));
                     }
                 }
             } catch (ClassNotFoundException | SQLException ex) {
                 Logger.getLogger(SQLCONN.class.getName()).log(Level.SEVERE, null, ex);
             } finally {
                 this._inputParams.clear();
                 this._outputParams.clear();
                 this.close();
             }
        }
        
        /*
         * set input params
         */
        public void addInputParam(String paramName, Object value, int SQLType, int scale) {
            Object[] output = new Object[4];
            output[0] = paramName;
            output[1] = value;
            output[2] = SQLType;
            output[3] = scale;
            this._inputParams.add(output);
        }
        
        public void addInputParam(String paramName, Object value, int SQLType) {
            Object[] output = new Object[3];
            output[0] = paramName;
            output[1] = value;
            output[2] = SQLType;
            this._inputParams.add(output);
        }
        
        public void addInputParam(String paramName, Object value) {
            Object[] output = new Object[2];
            output[0] = paramName;
            output[1] = value;
            this._inputParams.add(output);
        }
        
        /*
         * set output params
         */
        public void addOutputParams(String paramName, int SQLType, int scale) {
            Object[] output = new Object[3];
            output[0] = paramName;
            output[1] = SQLType;
            output[2] = scale;
            this._outputParams.add(output);
        }
        
        public void addOutputParams(String paramName, int SQLType) {
            Object[] output = new Object[2];
            output[0] = paramName;
            output[1] = SQLType;
            this._outputParams.add(output);
        }
    
        private void open() throws ClassNotFoundException, SQLException {
            Class.forName(this.driver);
            this.conn = DriverManager.getConnection(this.serverName, this.userName, this.password);
            System.out.println("connected");
        }
    
        private void close() {
            try {
                this.conn.close();
                System.out.println("close");
            } catch (SQLException ex) {
                Logger.getLogger(SQLCONN.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    调用:

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package dataanalysis_erp_plug;
    
    import dataanalysis_erp_plug.DataAnalysis.*;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    /**
     *
     * @author Administrator
     */
    public class DataAnalysis_ERP_Plug {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
            String userName = "SQL用户名";
            String password = "密码";
            String serverName = "jdbc:sqlserver://SQL服务器名\\实例名;";
            String dbName = "DatabaseName=数据库名"; //allow empty, default value = "";
            SQLCONN sqlconn = new SQLCONN(driver, serverName + dbName, userName, password);
            
            //define input params
            sqlconn.addInputParam("input", "caca", java.sql.Types.VARCHAR, 50);
            //define output params
            sqlconn.addOutputParams("return", java.sql.Types.VARCHAR);
            try {
                sqlconn.runProc("testProc_noIOParam");
            } catch (Exception ex) {
                Logger.getLogger(DataAnalysis_ERP_Plug.class.getName()).log(Level.SEVERE, null, ex);
            }
            if (sqlconn.table.isEmpty()) {
                System.out.println("null");
            } else {
                System.out.println(sqlconn.table.get(0)[0]);
                System.out.println(sqlconn.outputParams.get(0));
                System.out.println("not null");
            }
        }
    }
  • 相关阅读:
    echarts之tooltip
    js随笔
    在wex5平台grid显示问题
    JSON.parse()和JSON.stringify()区别
    在wex5平台grid里面的gridselect下拉不能显示汉字问题
    wex5平台放入tabs组件后运行时显示空白
    正整数求n不用sqrt
    leetcode1143最长公共子序列
    美团Java一面(2020.3.19)
    leetcode138. 复制带随机指针的链表
  • 原文地址:https://www.cnblogs.com/gssl/p/3129187.html
Copyright © 2011-2022 走看看