第一步:新建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());

}

}

}

java mysql sqlhelper_Java访问MySQL数据库的SqlHelper类以及测试程序相关推荐

  1. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

  2. java通过jdbc访问mysql,update数据返回值的思考

    java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...

  3. Linux系统下授权MySQL账户访问指定数据库和数据库操作

    Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...

  4. 授权MySQL账户访问指定数据库

    需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全操作权限 操作如下: 1.登录MySQL数据库 m ...

  5. dao和mysql映射_hibernate通过数据库生成实体类,映射文件和DAO(实用)

    hibernate通过数据库生成实体类,映射文件和DAO(实用) (2011-04-06 17:22:32) 标签: 杂谈 上次谈到利用MyEclipse从数据库反向生成实体类之JPA方式,这次我们来 ...

  6. java properties文件 安全_java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] | 学步园...

    java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] 数据库读取工具类 package com.db; import java.sql.Connection; ...

  7. mysql providername_c#访问各数据库的providerName各驱动-阿里云开发者社区

    如果为Mysql 数据库--->providerName="MySql.Data.MySqlClient"(没装mysql dotnet 安装版的话就得在C:\WINDOWS ...

  8. (0017)iOS 开发之Mac上安装Eclipse、创建java后台程序访问本地数据库

    Mac 上安装Eclipse 1. Eclipse下载列表: http://www.eclipse.org/downloads/packages/release/Neon/2 2.不同的开发需求下载不 ...

  9. java mongodb id_Java访问MongoDB数据库生成的ID

    自动生成的ID :"_id" : ObjectId("553f4d4d4700a63894bbebeb") 对应java中的类型: org.bson.types ...

  10. java程序无法访问远程数据库或远程服务(VPN)

    打开idea >> run  >>  edit configurations   >>templates   >> 选择运行的模版,我们一般用Appli ...

最新文章

  1. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
  2. 物联网技术与应用(第1-2课时)(cont.)
  3. linux 添加用户
  4. ALEIDoc EDI(2)--一般流程
  5. [leetcode] 912.排序数组
  6. 所以Apache基金会不受美国法律约束?
  7. linux非权限安装bioperl,bioperl的安装
  8. Skywalking-04:扩展Metric监控信息
  9. round - 精确的几位小数
  10. noi 3531 判断整除
  11. DataGridView 实现记录颜色间隔交替显示
  12. 华为云API Explorer开发者生态平台正式上线
  13. 删除隐藏版本信息 版本回退_Visual Studio Code 2019 August版本发布,新功能尝鲜
  14. 2019年最佳作家奖
  15. 国外大牛最终还是放弃迁移到微服务,为什么?
  16. ios 推送通知服务证书不受信任(Apple Push Service certificate is not trusted)
  17. 如何在Word中画横线?
  18. 为什么是NoSQL数据库?
  19. html5闪光效果,HTML5 canvas元素背景梦幻小星星闪烁特效
  20. 431 Request Header Fields Too Large 解决

热门文章

  1. STM32F407单片机移植ADS1115驱动程序
  2. 阿里云OSS使用Java上传文件
  3. 图形工作站/服务器硬件如何配置?这里有最新最全的硬件配置方案
  4. 一套绝佳的自定义3dmax快捷键!
  5. Python用QQ邮箱发送邮件,支持抄送和附件
  6. 谢谢版主整理的好材料,,妈妈再也不用担心的我的unity
  7. NVIDIA安装程序失败(组件全部未安装)
  8. 【微信小程序毕业设计源代码】校园考勤打卡及作业管理小程序系统丨前后分离VUE[包运行成功]
  9. Vmware报错“该虚拟机似乎正在使用中”获取该虚拟机所有权失败的解决
  10. eclipse工程图标上有个红色感叹号