Java访问MySQL数据库的SqlHelper类以及测试程序
2015-01-07 21:04
573 查看
第一步:新建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) + "\tpassword:" + rs.getString(3) + "\tsalary:" + 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") + "\tpassword:" + rs.getString("password") + "\tgender:" + rs.getString("gender") + "\tsalary:" + rs.getDouble("salary")); } } catch (SQLException e) { e.printStackTrace(); } finally { SqlHelper.close(SqlHelper.getRs(), SqlHelper.getPs(), SqlHelper .getConn()); } } }
相关文章推荐
- 如何在Java程序中访问mysql数据库中的数据并进行简单的操作
- 实现一个无锁的Stack,并写一段测试代码(多线程访问),证明这个Stack是线程安全的。给出程序以及运行的截图。
- 如何在Java程序中访问mysql数据库中的数据并进行简单的操作
- Java程序命令行参数使用以及参数最多个数测试
- Java访问MySQL数据库的SqlHelper类
- java服务端程序部署服务器以及压力测试过程
- JAVA 访问MySQL数据库(使用方法及测试)
- java例程练习(一个BirthDate类 以及简单的测试程序)
- 编写程序,测试字符串“你好,欢迎来到Java世界”的长度,将字符串的长度转换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。
- 简单得创建JAVASCRIPTE WEB丰富界面以及与JAVA服务互相访问
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- Java程序基础测试题目
- Java程序基础测试题目
- Java程序基础测试 基础笔试、面试常见问题集合
- Java程序的单元测试-分析并获取测试用例
- Java程序基础测试题目
- 一个用来测试Webservice里面方法的桌面小程序(用java写的)
- php输出标准xml,php访问mysql数据库简单例子(可以被asp等程序读取)
- java.io.File的小测试程序
- Spring学习以及测试程序笔记