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. HTML5在input背景提示文本(placeholder)的CSS美化

    本文转自http://www.webhek.com/html5-placeholder-css/ 在火狐浏览器中的写法和在谷歌浏览器和Safari里的写法有些不同.但相信以后会统一. /* 通用 */ ...

  2. MSYS2 环境搭建(在Qt Creator可以设置环境变量来进行引用这些库)

    本机环境:Windows XP 32位MSYS2地址:http://sourceforge.net/projects/msys2/ 下载32位版本,地址:http://sourceforge.net/ ...

  3. Lucene.Net 2.3.1开发介绍 —— 三、索引(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的 ...

  4. centos7 opera济览器安装

    网网下rpm安装包: http://www.opera.com/computer/thanks?partner=www&par=id%3D39136%26amp;location%3D403& ...

  5. Oracle heap 表的主键 dump 分析

    1. 创建heap 表: create table t1 (id char(10) primary key,a1 char(10),a2 char(10),a3 char(10)); SQL> ...

  6. sql server 2012 数据库还原方法

    USE master RESTORE DATABASE WSS_Content FROM DISK = N'D:\bak\contentbak.bak' WITH REPLACE, NORECOVER ...

  7. codeforces.com/contest/325/problem/B

    http://codeforces.com/contest/325/problem/B B. Stadium and Games time limit per test 1 second memory ...

  8. php使用http请求头实现文件下载

    众所周知php对http协议的依赖特别强,像java或者asp.net在某些情况下可以不依赖http例如asp.net的winform,对php来说文件下载可以使用http的请求头加上php的IO就可 ...

  9. Windows移动开发(四)——闭关修炼

    非常久不写博客了,不是由于不想写,仅仅是近期公司任务比較多,最终十一有时间出来冒泡了. 今天继续介绍移动开发中的重中之重--内存管理. C#代码是托管代码,C# 程序猿非常少像C/CPP程序猿那样为程 ...

  10. Linux 之 rsyslog

    Linux 之 rsyslog 系统日志转发 一.rsyslog 介绍 ryslog 是一个快速处理系统日志的程序,提供了高性能.安全功能和模块化设计.rsyslog 是syslog 的升级版,它将多 ...