java连接数据库——JDBC连接数据库
DBUtil.java // 数据库操作文件
package com.bjpowernode.jdbc.util; import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DBUtil { private static String driver ;
private static String url ;
private static String uname ;
private static String pwd ; static{ try {
//创建集合类对象
Properties properties = new Properties();
//把文件封装成字节输入流
InputStream inStream = new FileInputStream(new File("./src/DBConfig.properties")); /*
等同于 ResourceBundle isStream = ResourceBundle.getBundle("com.bjpowernode.jdbc.util.DBConfig"); //注意:DBConfig 不要添加后缀 */
//把字节流加载到集合类中,在内存中以key和value的格式形成
properties.load(inStream);
//通过key获得value
driver = properties.getProperty("driver");
url = properties.getProperty("url");
uname = properties.getProperty("uname");
pwd = properties.getProperty("pwd");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("读取配置文件失败!",e);
} } //获得连接
public static Connection getConnection (){
Connection conn = null;
try {
//1:注册驱动
Class.forName(driver); conn = DriverManager.getConnection(url,uname,pwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("连接数据库失败!",e);
}
return conn;
} //释放资源
public static void close(ResultSet rs ,Statement pstm ,Connection conn){
try{
if (rs != null){
rs.close();
} }catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("rs关闭失败!",e);
}
try{
if (pstm != null){
pstm.close();
} }catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("pstm关闭失败!",e);
}
try{
if (conn != null){
conn.close();
} }catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("conn关闭失败!",e);
} }
//开启事务
public static void beginTransaction(Connection conn){
try {
if(conn != null){
conn.setAutoCommit(false);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("开启事务失败!",e);
}
}
//提交事务
public static void commit(Connection conn){
try {
if(conn != null){
conn.commit();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("提交事务失败!",e);
}
} //回滚事务
public static void rollback(Connection conn){
try {
if(conn != null){
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("回滚事务失败!",e);
}
}
}
Transfer_transaction.java // 调用数据库文件
package com.bjpowernode.jdbc.transfer; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import com.bjpowernode.jdbc.util.DBUtil; public class Transfer_transaction {
public static void main(String[] args) {
transfer("zs","ls",100);
}
/**
*
* @param from_act : 转出账户
* @param to_act :转入账户
* @param money : 转账金额
*/
private static void transfer(String from_act, String to_act, double money) { /*if(转出账户的金额 >= 转账金额){
转出账户 - 转账金额
转入账户 + 转账金额
}else{
提示余额不足
}*/
Connection conn = null;
//转出账户的金额
try {
//事务是针对连接开启的
conn = DBUtil.getConnection();
//开启事务
DBUtil.beginTransaction(conn); double from_money = getMoneyByAct(conn,from_act); if(from_money >= money){//转出账户的金额 >= 转账金额
//转账
//转出账户 - 转账金额
updateMoneyByAct(conn,from_money-money,from_act);
//转入账户的金额
double to_money = getMoneyByAct(conn,to_act);
//模拟异常
// Integer.parseInt("abc");
//转入账户+ 转账金额
updateMoneyByAct(conn,to_money+money,to_act);
//提交事务
DBUtil.commit(conn);
System.out.println("转账成功!");
}else{//提示余额不足
System.out.println("余额不足!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("转账失败!");
//回滚事务
DBUtil.rollback(conn);
}finally{
DBUtil.close(null, null, conn);
} }
/**
* 通过账户修改账户金额
*
* @param money : 需要修改的金额
* @param act : 账户名称
*/
private static void updateMoneyByAct(Connection conn ,double money, String act) {
// TODO Auto-generated method stub
// Connection conn = null;
PreparedStatement pstm = null; try {
// conn = DBUtil.getConnection(); String sql = "update t_account set money = ? where act_no = ?";
pstm = conn.prepareStatement(sql); pstm.setDouble(1, money);
pstm.setString(2, act); pstm.executeUpdate(); } catch (Exception e) {
// TODO: handle exception throw new RuntimeException("修改金额失败",e);
}finally{
DBUtil.close(null, pstm, null);
}
}
/**
* 通过账户查询账户金额
* @param act
* @return
*/
private static double getMoneyByAct(Connection conn ,String act) {
// Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
double from_money = 0;
try {
//获得连接
// conn = DBUtil.getConnection();
String sql = "select money from t_account where act_no = ?";
//创建数据库操作对象
pstm = conn.prepareStatement(sql);
//为占位符号赋值
pstm.setString(1, act);
//执行sql
rs = pstm.executeQuery();
/*while(rs.next()){
from_money = rs.getDouble("money");
}
if(rs.next()){
from_money = rs.getDouble("money");
}
*/
from_money = rs.next()?rs.getDouble("money"):0; } catch (Exception e) {
throw new RuntimeException("查询账户余额失败!",e);
}finally{
DBUtil.close(rs, pstm, null);
}
return from_money;
}
}
DBConfig.properties //数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://127.0.0.1\:3366/bjpowernode
uname=root
pwd=root
java连接数据库——JDBC连接数据库的更多相关文章
- Java开发JDBC连接数据库
Java开发JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含6个步骤: JDBC五部曲1.加载驱动2.获得链接3.获取statement对象 4.执行SQL语句5.产生resultset对 ...
- java开发JDBC连接数据库详解
JDBC连接数据库 好文一定要让大家看见 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机) ...
- Java中JDBC连接数据库代码和步骤详解总结
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Jav ...
- java开发JDBC连接数据库代码
JDBC连接数据库,创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 这通过java.lang.Class类的静态方法forName(String className)实 ...
- java中JDBC连接数据库操作的基本步骤
JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...
- 【Java】JDBC连接数据库
JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...
- Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查
前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...
- java的jdbc连接数据库,读取表中数据
连接数据库操作步骤如下 架包 jar 建表 源码解析 1:架包 jar根据自己本版本选择正确jar包,本例采用maven 管理局,在pom.xml 中添加如下代码,自动下载架包 <depende ...
- JAVA中JDBC连接数据库
这里列举了JDBC连接Oracle . SQLServer .MySQL 三种 数据库 1.Oracle连接(导入classes12.jar 包) public static Connection g ...
随机推荐
- Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴)
在开发一些系统应用的时候,我们会用到Android的剪贴板功能,比如将文本文件.或者其他格式的内容复制到剪贴板或者从剪贴板获取数据等操作.Android平台中每个常规的应用运行在自己的进程空间中,相对 ...
- 积累的VC编程小技巧之视图
1.如何得到视图指针 [问题提出] 现在你有一个多线程的Demo,你想在多线程里处理视图指针里的函数,我们给这个函数起个名字:Put();该如何实现呢? //有两种方法可以实现你的要求: ...
- VC/MFC 使edit控件不能进行粘贴操作
这里使用消息拦截的方法 BOOL PersonDlg::PreTranslateMessage(MSG* pMsg) { if (GetDlgItem(IDC_EDIT_USER_ID)->m_ ...
- iOS UIScrollView 停止滑动 减速
1.UIScrollView 减速 可能通过decelerationRate的属性来设置,它的值域是(0.0,1.0),当decelerationRate设置为0.1时,当手指touch up时就会很 ...
- Hibernate(六)——多对多关联映射
前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...
- Andy's First Dictionary
Description Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy ...
- Codeforces 474B Worms 二分法(水
主题链接:http://codeforces.com/contest/474/problem/B #include <iostream> #include <cmath> #i ...
- 摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32
1.CRC8.CRC16.CRC32 CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产 ...
- Java按钮设计
package com.han; import javafx.application.Application; import javafx.geometry.Insets; import javafx ...
- Python批量删除指定目录下的指定类型的文件
Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...