您的位置:首页 > 编程语言 > Java开发

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());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐