java mysql sqlhelper_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

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

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());

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值