• Java访问MySQL数据库的SqlHelper类以及测试程序


    第一步:新建SqlHelper类;
    第二步:新建一个属性文件dbinfo.properties,具体内容如下:
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/test
    userName=root
    password=10Floor
    第三步:完成SqlHelper类;一定要记着引入数据库驱动程序。SqlHelper类的具体内容如下:
    package edu.xaut.wuqiang.demo;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    
    public class SqlHelper {
        // 定义要使用的变量
        private static Connection conn = null;
        private static PreparedStatement ps = null;
        private static ResultSet rs = null;
        private static CallableStatement cs = null;
    
        private static String driver = "";
        private static String url = "";
        private static String userName = "";
        private static String password = "";
    
        private static Properties pp = null;
        private static FileInputStream fis = null;
    
        public static Connection getConn() {
            return conn;
        }
    
        public static PreparedStatement getPs() {
            return ps;
        }
    
        public static ResultSet getRs() {
            return rs;
        }
       
        public static CallableStatement getCs() {
            return cs;
        }
    
        // 加载驱动,只需要一次
        static {
            try {
                // 从配置文件dbinfo.properties中读取配置信息
                pp = new Properties();
                fis = new FileInputStream("dbinfo.properties");
                pp.load(fis);
                driver = pp.getProperty("driver");
                url = pp.getProperty("url");
                userName = pp.getProperty("userName");
                password = pp.getProperty("password");
    
                Class.forName(driver);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fis != null)
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                fis = null;
    
            }
        }
    
        // 得到连接
        public static Connection getConnection() {
            try {
                conn = DriverManager.getConnection(url, userName, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        // 处理多个update/delete/insert
        public static void executeUpdateMultiParams(String[] sql,
                String[][] parameters) {
            try {
                // 获得连接
                conn = getConnection();
                // 可能传多条sql语句
                conn.setAutoCommit(false);
                for (int i = 0; i < sql.length; i++) {
                    if (parameters[i] != null) {
                        ps = conn.prepareStatement(sql[i]);
                        for (int j = 0; j < parameters[i].length; j++)
                            ps.setString(j + 1, parameters[i][j]);
                    }
                    ps.executeUpdate();
                }
                conn.commit();
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                throw new RuntimeException(e.getMessage());
            } finally {
                // 关闭资源
                close(rs, ps, conn);
            }
        }
    
        // update/delete/insert
        // sql格式:UPDATE tablename SET columnn = ? WHERE column = ?
        public static void executeUpdate(String sql, String[] parameters) {
            try {
                // 1.创建一个ps
                conn = getConnection();
                ps = conn.prepareStatement(sql);
                // 给?赋值
                if (parameters != null)
                    for (int i = 0; i < parameters.length; i++) {
                        ps.setString(i + 1, parameters[i]);
                    }
                // 执行
                ps.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();// 开发阶段
                throw new RuntimeException(e.getMessage());
            } finally {
                // 关闭资源
                close(rs, ps, conn);
            }
        }
    
        // select
        public static ResultSet executeQuery(String sql, String[] parameters) {
            ResultSet rs = null;
            try {
                conn = getConnection();
                ps = conn.prepareStatement(sql);
                if (parameters != null) {
                    for (int i = 0; i < parameters.length; i++) {
                        ps.setString(i + 1, parameters[i]);
                    }
                }
                rs = ps.executeQuery();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            } finally {
    
            }
            return rs;
        }
    
        // 调用无返回值存储过程
        // 格式: call procedureName(parameters list)
        public static void callProc(String sql, String[] parameters) {
            try {
                conn = getConnection();
                cs = conn.prepareCall(sql);
                // 给?赋值
                if (parameters != null) {
                    for (int i = 0; i < parameters.length; i++)
                        cs.setObject(i + 1, parameters[i]);
                }
                cs.execute();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            } finally {
                // 关闭资源
                close(rs, cs, conn);
            }
        }
    
        // 调用带有输入参数且有返回值的存储过程
        public static CallableStatement callProcInput(String sql, String[] inparameters) {
            try {
                conn = getConnection();
                cs = conn.prepareCall(sql);
                if(inparameters!=null)
                    for(int i=0;i<inparameters.length;i++)
                        cs.setObject(i+1, inparameters[i]);               
                cs.execute();
            }
            catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            }finally{
               
            }
            return cs;
        }
       
        // 调用有返回值的存储过程
        public static CallableStatement callProcOutput(String sql,Integer[] outparameters) {
            try {
                conn = getConnection();
                cs = conn.prepareCall(sql);                   
                //给out参数赋值
                if(outparameters!=null)
                    for(int i=0;i<outparameters.length;i++)
                        cs.registerOutParameter(i+1, outparameters[i]);
                cs.execute();
            }
            catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            }finally{
               
            }
            return cs;
        }
    
        public static void close(ResultSet rs, Statement ps, Connection conn) {
            if (rs != null)
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            rs = null;
            if (ps != null)
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            ps = null;
            if (conn != null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            conn = null;
        }
    }
    
    
    测试需要做哪些工作呢
    1、创建数据库、数据表添加数据
    因为我的数据库中已经有数据了,我就不再创建了
    
    MySQL数据库中有一个test数据库
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | test               |
    +--------------------+
    mysql> use test
    Database changed
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | products       |
    | testtime       |
    | types          |
    | userinfo       |
    | users          |
    +----------------+
    mysql> desc userinfo;
    +----------+-------------+------+-----+---------+----------------+
    | Field    | Type        | Null | Key | Default | Extra          |
    +----------+-------------+------+-----+---------+----------------+
    | id       | int(11)     | NO   | PRI | NULL    | auto_increment |
    | username | varchar(13) | NO   | UNI | NULL    |                |
    | password | varchar(13) | NO   |     | NULL    |                |
    | gender   | varchar(6)  | YES  |     | NULL    |                |
    | salary   | double(7,2) | YES  |     | NULL    |                |
    +----------+-------------+------+-----+---------+----------------+
    mysql> select * from userinfo;
    +----+----------+----------+--------+---------+
    | id | username | password | gender | salary  |
    +----+----------+----------+--------+---------+
    |  2 | Lily     | 123456   | female | 5500.00 |
    |  3 | Jim      | xaut     | male   | 6600.00 |
    |  6 | Tom      | 82312012 | male   | 5900.00 |
    |  7 | Lucy     | ncist    | female | 6000.00 |
    +----+----------+----------+--------+---------+
    存储过程:
    mysql> DELIMITER //
    mysql> CREATE PROCEDURE `test`.`proc_userinfo_insert`(
        -> username VARCHAR(13),
        -> `password` VARCHAR(13),
        -> gender VARCHAR(6),
        -> salary DOUBLE(7,2)
        -> )
        -> BEGIN
        -> INSERT INTO userinfo (username,`password`,gender,salary) VALUES (username,`password`,gender,salary);
        -> END
        -> //
    
    mysql> DELIMITER //
    mysql> CREATE PROCEDURE `test`.`proc_userinfo_update`(
        -> username VARCHAR(13),
        -> `password` VARCHAR(13),   
        -> salary DOUBLE(7,2)
        -> )
        -> BEGIN
        -> UPDATE userinfo SET `password`=pword,salary=saly WHERE username=uname;
        -> END
        -> //
    
    mysql> DELIMITER //
    mysql> CREATE PROCEDURE `test`.`proc_userinfo_delete`(
        -> uname VARCHAR(13)
        -> )
        -> BEGIN
        -> DELETE FROM userinfo WHERE username=uname;
        -> END
        -> //
    
    
    mysql> delimiter //
    mysql> CREATE PROCEDURE `test`.`proc_userinfo_findByUsername`
        -> (
        -> IN uname VARCHAR(13)
        -> )
        -> BEGIN
        -> SELECT * FROM userinfo WHERE username=uname;
        -> END
        -> //
    
    mysql> delimiter //
    mysql> CREATE PROCEDURE `test`.`proc_userinfo_getCount`
        -> (
        -> out num int
        -> )
        -> BEGIN
        -> SELECT COUNT(*) FROM userinfo;
        -> END
        -> //
    
    编写测试程序
    package edu.xaut.wuqiang.demo;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.junit.Test;//必须引入的
    
    public class TestSqlHelper {
        // 测试SqlHelper
        @Test//每一个测试的方法前都要加@Test
        public void testSqlHelper1() {// 一条SQL语句insert/update/delete
            testInsert();
            testUpdate();
            testDelete();
        }
    
        @Test
        public void testSqlHelper2() {// 测试一个事务的提交
            testUpdateMuti();
        }
    
        @Test
        public void testSqlHelper3() {// 测试SQl的Select语句
            testQuery();
        }
    
        @Test
        public void testSqlHelper4() {// 测试调用无返回值的存储过程
            testInsertProc();
            testUpdateProc();
            testDeleteProc();
        }
    
        @Test
        public void testSqlHelper5() {// 测试调用有返回值的存储过程
            testCallProcOutput();
            testCallProcInput();
        }
    
        private void testCallProcInput() {
            ResultSet rs = null;
            try {
                String sql = "{call proc_userinfo_findByUsername(?)}";
                String[] in = { "Tom" };
                // Integer[] out ={Types.INTEGER};
                CallableStatement cs = (CallableStatement) SqlHelper.callProcInput(
                        sql, in);
                rs = cs.executeQuery();
                while (rs.next()) {
                    System.out.println("username:" + rs.getString(2)
                            + "	password:" + rs.getString(3) + "	salary:"
                            + rs.getDouble(5));
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            } finally {
                SqlHelper.close(rs, SqlHelper.getCs(), SqlHelper.getConn());
            }
        }
    
        private void testCallProcOutput() {
            ResultSet rs = null;
            try {
                String sql = "{call proc_userinfo_getCount(?)}";
                Integer[] out = { Types.INTEGER };
                CallableStatement cs = (CallableStatement) SqlHelper
                        .callProcOutput(sql, out);
                rs = cs.executeQuery();
                while (rs.next()) {
                    System.out.println("Record numbers:"+rs.getInt(1));
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            } finally {
                SqlHelper.close(rs, SqlHelper.getCs(), SqlHelper.getConn());
            }
        }
    
        private void testDeleteProc() {
            String sql = "{call proc_userinfo_delete(?)}";
            String[] parameters = { "Jim" };
            SqlHelper.callProc(sql, parameters);
        }
    
        private void testUpdateProc() {
            String sql = "{call proc_userinfo_update(?,?,?)}";
            String[] parameters = { "Lucy", "ncist", "5200.00" };
            SqlHelper.callProc(sql, parameters);
        }
    
        private void testInsertProc() {
            String sql = "{call proc_userinfo_insert(?,?,?,?)}";
            String[] parameters = { "wYan", "wyan7", "female", "5600.00" };
            SqlHelper.callProc(sql, parameters);
        }
    
        private void testUpdateMuti() {
            String sql1 = "UPDATE userinfo SET salary=salary-100 WHERE username = ?";
            String sql2 = "UPDATE userinfo SET salary=salary+100 WHERE username = ?";
            String[] sql = { sql1, sql2 };
            String[] sql1_params = { "Tom" };
            String[] sql2_params = { "Jim" };
            String[][] parameters = { sql1_params, sql2_params };
            SqlHelper.executeUpdateMultiParams(sql, parameters);
        }
    
        private void testInsert() {
            String sql = "INSERT INTO userinfo (username,password,gender,salary) VALUES (?,?,?,?)";
            String[] parameters = { "wqiang", "wYan", "male", "6000.00" };
            SqlHelper.executeUpdate(sql, parameters);
        }
    
        private void testUpdate() {
            String sql = "UPDATE userinfo SET password=?,salary=? WHERE username = 'Jim'";
            String[] parameters = { "xaut", "6500.00" };
            SqlHelper.executeUpdate(sql, parameters);
        }
    
        private void testDelete() {
            String sql = "DELETE FROM userinfo WHERE username = ?";
            String[] parameters = { "xiaoqiang" };
            SqlHelper.executeUpdate(sql, parameters);
        }
    
        private void testQuery() {
            String sql = "SELECT * FROM userinfo";
            try {
                ResultSet rs = SqlHelper.executeQuery(sql, null);
                while (rs.next()) {
                    System.out.println("userName:" + rs.getString("userName")
                            + "	password:" + rs.getString("password")
                            + "	gender:" + rs.getString("gender") + "	salary:"
                            + rs.getDouble("salary"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                SqlHelper.close(SqlHelper.getRs(), SqlHelper.getPs(), SqlHelper
                        .getConn());
            }
        }
    }
    


  • 相关阅读:
    生产者和消费者,锁,队列
    爬虫日记-xpath来临
    进程进阶
    Entity Framework 复杂类型(转)
    EF Code First 学习笔记:约定配置(转)
    EF Code First学习笔记 初识Code First(转)
    JSON草稿
    JSON实例(单对象)
    JSON语法2
    JSON 语法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318192.html
Copyright © 2020-2023  润新知