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连接数据库的更多相关文章

  1. Java开发JDBC连接数据库

    Java开发JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含6个步骤: JDBC五部曲1.加载驱动2.获得链接3.获取statement对象 4.执行SQL语句5.产生resultset对 ...

  2. java开发JDBC连接数据库详解

    JDBC连接数据库 好文一定要让大家看见 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机) ...

  3. Java中JDBC连接数据库代码和步骤详解总结

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤:         1.加载JDBC驱动程序:         在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Jav ...

  4. java开发JDBC连接数据库代码

    JDBC连接数据库,创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 这通过java.lang.Class类的静态方法forName(String className)实 ...

  5. java中JDBC连接数据库操作的基本步骤

    JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...

  6. 【Java】JDBC连接数据库

    JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...

  7. Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查

    前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...

  8. java的jdbc连接数据库,读取表中数据

    连接数据库操作步骤如下 架包 jar 建表 源码解析 1:架包 jar根据自己本版本选择正确jar包,本例采用maven 管理局,在pom.xml 中添加如下代码,自动下载架包 <depende ...

  9. JAVA中JDBC连接数据库

    这里列举了JDBC连接Oracle . SQLServer .MySQL 三种 数据库 1.Oracle连接(导入classes12.jar 包) public static Connection g ...

随机推荐

  1. 外国的Delphi网站

    www.phidels.com delphifr.com http://www.swissdelphicenter.com/torry/showcode.php?id=787 B4A delphifa ...

  2. iOS 5 故事板入门(4)

    原文: http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-2 让 AddPlayer 窗口动起来 现在,我们先 ...

  3. ecshop 微信支付插件

    眼下已完毕支付測试,可以支付成功,支付逻辑自己实现.后台通知.发货通知.订单查询未測. 当中用到了redis 下载

  4. 写给C语言新手的话

    首先声明啊,写这个是因为一些加我QQ的朋友问我学习经验,我才写的. 另外,如果是二级党,那么请用谭浩强老师的书.然后你就可以不用看了.倒不是有偏见,而是我写的这个东西,根本不是为了考试,而是为了和新手 ...

  5. HDU--杭电--4504--威威猫系列故事——篮球梦--DP

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  6. Linux vmstat命令详解

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  7. uva--562Dividing coins +dp

    题意: 给定一堆硬币,然后将他们分成两部分,使得两部分的差值最小;输出这个最小的差值. 思路: 想了好久都没想到一个合适的状态转移方程.后面看了别人的题解后,才知道能够转成背包问题求解. 我们将全部的 ...

  8. 有时候碰到String赋值就出错,原因有三

    1. String所在的对象,根本就不存在(不是String不存在,而是它所属的类对象不存在) 2. 增加一个String作为类元素后,运行直接就崩溃.一次又一次找原因,结果发现,只需要完全重编译就行 ...

  9. 15个最好的HTML5前端响应式框架(2014)

    文中的多个框架基于SASS创建,SCSS是一种比LESS更简洁的样式表编程语言,它能够编绎成CSS,可复用CSS代码,声明变量,甚至是函数,类Ruby/Python的语法.參见: LESS vs SA ...

  10. hdu 1240 Asteroids!(BFS)

    题目链接:点击链接 简单BFS,和二维的做法相同(需注意坐标) 题目大意:三维的空间里,给出起点和终点,“O”表示能走,“X”表示不能走,计算最少的步数 #include <iostream&g ...