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());
}
}
}
java mysql sqlhelper_Java访问MySQL数据库的SqlHelper类以及测试程序相关推荐
- mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...
如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...
- java通过jdbc访问mysql,update数据返回值的思考
java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...
- Linux系统下授权MySQL账户访问指定数据库和数据库操作
Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...
- 授权MySQL账户访问指定数据库
需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全操作权限 操作如下: 1.登录MySQL数据库 m ...
- dao和mysql映射_hibernate通过数据库生成实体类,映射文件和DAO(实用)
hibernate通过数据库生成实体类,映射文件和DAO(实用) (2011-04-06 17:22:32) 标签: 杂谈 上次谈到利用MyEclipse从数据库反向生成实体类之JPA方式,这次我们来 ...
- java properties文件 安全_java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] | 学步园...
java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] 数据库读取工具类 package com.db; import java.sql.Connection; ...
- mysql providername_c#访问各数据库的providerName各驱动-阿里云开发者社区
如果为Mysql 数据库--->providerName="MySql.Data.MySqlClient"(没装mysql dotnet 安装版的话就得在C:\WINDOWS ...
- (0017)iOS 开发之Mac上安装Eclipse、创建java后台程序访问本地数据库
Mac 上安装Eclipse 1. Eclipse下载列表: http://www.eclipse.org/downloads/packages/release/Neon/2 2.不同的开发需求下载不 ...
- java mongodb id_Java访问MongoDB数据库生成的ID
自动生成的ID :"_id" : ObjectId("553f4d4d4700a63894bbebeb") 对应java中的类型: org.bson.types ...
- java程序无法访问远程数据库或远程服务(VPN)
打开idea >> run >> edit configurations >>templates >> 选择运行的模版,我们一般用Appli ...
最新文章
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
- 物联网技术与应用(第1-2课时)(cont.)
- linux 添加用户
- ALEIDoc EDI(2)--一般流程
- [leetcode] 912.排序数组
- 所以Apache基金会不受美国法律约束?
- linux非权限安装bioperl,bioperl的安装
- Skywalking-04:扩展Metric监控信息
- round - 精确的几位小数
- noi 3531 判断整除
- DataGridView 实现记录颜色间隔交替显示
- 华为云API Explorer开发者生态平台正式上线
- 删除隐藏版本信息 版本回退_Visual Studio Code 2019 August版本发布,新功能尝鲜
- 2019年最佳作家奖
- 国外大牛最终还是放弃迁移到微服务,为什么?
- ios 推送通知服务证书不受信任(Apple Push Service certificate is not trusted)
- 如何在Word中画横线?
- 为什么是NoSQL数据库?
- html5闪光效果,HTML5 canvas元素背景梦幻小星星闪烁特效
- 431 Request Header Fields Too Large 解决
热门文章
- STM32F407单片机移植ADS1115驱动程序
- 阿里云OSS使用Java上传文件
- 图形工作站/服务器硬件如何配置?这里有最新最全的硬件配置方案
- 一套绝佳的自定义3dmax快捷键!
- Python用QQ邮箱发送邮件,支持抄送和附件
- 谢谢版主整理的好材料,,妈妈再也不用担心的我的unity
- NVIDIA安装程序失败(组件全部未安装)
- 【微信小程序毕业设计源代码】校园考勤打卡及作业管理小程序系统丨前后分离VUE[包运行成功]
- Vmware报错“该虚拟机似乎正在使用中”获取该虚拟机所有权失败的解决
- eclipse工程图标上有个红色感叹号