DBUtil.java   // 数据库操作文件

  1. package com.bjpowernode.jdbc.util;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStream;
  6. import java.sql.Connection;
  7. import java.sql.DriverManager;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.sql.Statement;
  11. import java.util.Properties;
  12.  
  13. public class DBUtil {
  14.  
  15. private static String driver ;
  16. private static String url ;
  17. private static String uname ;
  18. private static String pwd ;
  19.  
  20. static{
  21.  
  22. try {
  23. //创建集合类对象
  24. Properties properties = new Properties();
  25. //把文件封装成字节输入流
  26. InputStream inStream = new FileInputStream(new File("./src/DBConfig.properties"));
  27.  
  28. /*

  29. 等同于     ResourceBundle isStream = ResourceBundle.getBundle("com.bjpowernode.jdbc.util.DBConfig"); //注意:DBConfig 不要添加后缀
  30.  
  31. */
  32. //把字节流加载到集合类中,在内存中以key和value的格式形成
  33. properties.load(inStream);
  34. //通过key获得value
  35. driver = properties.getProperty("driver");
  36. url = properties.getProperty("url");
  37. uname = properties.getProperty("uname");
  38. pwd = properties.getProperty("pwd");
  39. } catch (Exception e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. throw new RuntimeException("读取配置文件失败!",e);
  43. }
  44.  
  45. }
  46.  
  47. //获得连接
  48. public static Connection getConnection (){
  49. Connection conn = null;
  50. try {
  51. //1:注册驱动
  52. Class.forName(driver);
  53.  
  54. conn = DriverManager.getConnection(url,uname,pwd);
  55. } catch (Exception e) {
  56. // TODO Auto-generated catch block
  57. e.printStackTrace();
  58. throw new RuntimeException("连接数据库失败!",e);
  59. }
  60. return conn;
  61. }
  62.  
  63. //释放资源
  64. public static void close(ResultSet rs ,Statement pstm ,Connection conn){
  65. try{
  66. if (rs != null){
  67. rs.close();
  68. }
  69.  
  70. }catch(SQLException e){
  71. e.printStackTrace();
  72. throw new RuntimeException("rs关闭失败!",e);
  73. }
  74. try{
  75. if (pstm != null){
  76. pstm.close();
  77. }
  78.  
  79. }catch(SQLException e){
  80. e.printStackTrace();
  81. throw new RuntimeException("pstm关闭失败!",e);
  82. }
  83. try{
  84. if (conn != null){
  85. conn.close();
  86. }
  87.  
  88. }catch(SQLException e){
  89. e.printStackTrace();
  90. throw new RuntimeException("conn关闭失败!",e);
  91. }
  92.  
  93. }
  94. //开启事务
  95. public static void beginTransaction(Connection conn){
  96. try {
  97. if(conn != null){
  98. conn.setAutoCommit(false);
  99. }
  100. } catch (SQLException e) {
  101. // TODO Auto-generated catch block
  102. e.printStackTrace();
  103. throw new RuntimeException("开启事务失败!",e);
  104. }
  105. }
  106. //提交事务
  107. public static void commit(Connection conn){
  108. try {
  109. if(conn != null){
  110. conn.commit();
  111. }
  112. } catch (SQLException e) {
  113. // TODO Auto-generated catch block
  114. e.printStackTrace();
  115. throw new RuntimeException("提交事务失败!",e);
  116. }
  117. }
  118.  
  119. //回滚事务
  120. public static void rollback(Connection conn){
  121. try {
  122. if(conn != null){
  123. conn.rollback();
  124. }
  125. } catch (SQLException e) {
  126. e.printStackTrace();
  127. throw new RuntimeException("回滚事务失败!",e);
  128. }
  129. }
  130. }

Transfer_transaction.java  // 调用数据库文件

  1. package com.bjpowernode.jdbc.transfer;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6.  
  7. import com.bjpowernode.jdbc.util.DBUtil;
  8.  
  9. public class Transfer_transaction {
  10. public static void main(String[] args) {
  11. transfer("zs","ls",100);
  12. }
  13. /**
  14. *
  15. * @param from_act : 转出账户
  16. * @param to_act :转入账户
  17. * @param money : 转账金额
  18. */
  19. private static void transfer(String from_act, String to_act, double money) {
  20.  
  21. /*if(转出账户的金额 >= 转账金额){
  22. 转出账户 - 转账金额
  23. 转入账户 + 转账金额
  24. }else{
  25. 提示余额不足
  26. }*/
  27. Connection conn = null;
  28. //转出账户的金额
  29. try {
  30. //事务是针对连接开启的
  31. conn = DBUtil.getConnection();
  32. //开启事务
  33. DBUtil.beginTransaction(conn);
  34.  
  35. double from_money = getMoneyByAct(conn,from_act);
  36.  
  37. if(from_money >= money){//转出账户的金额 >= 转账金额
  38. //转账
  39. //转出账户 - 转账金额
  40. updateMoneyByAct(conn,from_money-money,from_act);
  41. //转入账户的金额
  42. double to_money = getMoneyByAct(conn,to_act);
  43. //模拟异常
  44. // Integer.parseInt("abc");
  45. //转入账户+ 转账金额
  46. updateMoneyByAct(conn,to_money+money,to_act);
  47. //提交事务
  48. DBUtil.commit(conn);
  49. System.out.println("转账成功!");
  50. }else{//提示余额不足
  51. System.out.println("余额不足!");
  52. }
  53. } catch (Exception e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. System.out.println("转账失败!");
  57. //回滚事务
  58. DBUtil.rollback(conn);
  59. }finally{
  60. DBUtil.close(null, null, conn);
  61. }
  62.  
  63. }
  64. /**
  65. * 通过账户修改账户金额
  66. *
  67. * @param money : 需要修改的金额
  68. * @param act : 账户名称
  69. */
  70. private static void updateMoneyByAct(Connection conn ,double money, String act) {
  71. // TODO Auto-generated method stub
  72. // Connection conn = null;
  73. PreparedStatement pstm = null;
  74.  
  75. try {
  76. // conn = DBUtil.getConnection();
  77.  
  78. String sql = "update t_account set money = ? where act_no = ?";
  79. pstm = conn.prepareStatement(sql);
  80.  
  81. pstm.setDouble(1, money);
  82. pstm.setString(2, act);
  83.  
  84. pstm.executeUpdate();
  85.  
  86. } catch (Exception e) {
  87. // TODO: handle exception
  88.  
  89. throw new RuntimeException("修改金额失败",e);
  90. }finally{
  91. DBUtil.close(null, pstm, null);
  92. }
  93. }
  94. /**
  95. * 通过账户查询账户金额
  96. * @param act
  97. * @return
  98. */
  99. private static double getMoneyByAct(Connection conn ,String act) {
  100. // Connection conn = null;
  101. PreparedStatement pstm = null;
  102. ResultSet rs = null;
  103. double from_money = 0;
  104. try {
  105. //获得连接
  106. // conn = DBUtil.getConnection();
  107. String sql = "select money from t_account where act_no = ?";
  108. //创建数据库操作对象
  109. pstm = conn.prepareStatement(sql);
  110. //为占位符号赋值
  111. pstm.setString(1, act);
  112. //执行sql
  113. rs = pstm.executeQuery();
  114. /*while(rs.next()){
  115. from_money = rs.getDouble("money");
  116. }
  117. if(rs.next()){
  118. from_money = rs.getDouble("money");
  119. }
  120. */
  121. from_money = rs.next()?rs.getDouble("money"):0;
  122.  
  123. } catch (Exception e) {
  124. throw new RuntimeException("查询账户余额失败!",e);
  125. }finally{
  126. DBUtil.close(rs, pstm, null);
  127. }
  128. return from_money;
  129. }
  130. }

DBConfig.properties   //数据库配置文件

  1. driver=com.mysql.jdbc.Driver
  2. url=jdbc\:mysql\://127.0.0.1\:3366/bjpowernode
  3. uname=root
  4. 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. How to initialize a static const map in c++?

    #include <map> using namespace std; struct A{ static map<int,int> create_map() { map< ...

  2. android:改动PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色

    1.改动PagerTabStrip中的背景颜色 我们在布局中直接设置background属性就可以: <android.support.v4.view.ViewPager android:id= ...

  3. vim Diff,Easy,Read-Only 的区别

    我用的是vim 7.4,在windows上面安装完 vim 之后会出现不同的vim图标,gVim ,vim gVim 是在windows下的Gui图形用户界面的的 vim (GUI Vim),支持wi ...

  4. 14.2.4 InnoDB Undo Logs

    14.2.4 InnoDB Undo Logs : 一个Undo log (或者成为回滚段) 是一个存储区域 持有被活动事务修改的数据的copy. 如果另外的事务需要看原始的数据(作为一致性读操作的一 ...

  5. go iota

    package main import ( "fmt" ) const ( a = 'A' b c = iota d ) func main() { fmt.Println(a) ...

  6. QT操作Excel(通过QAxObject使用了OLE,前提是本地安装了Excel)

    新建QT GUI项目,在选择选项中勾选ActiveQT Container. #include <qaxobject.h> QAxObject *obj = new QAxObject(& ...

  7. Android开发之style属性和提前定义样式

    摘要 Android平台定义的主题样式: android:theme="@android:style/Theme.Dialog" // 将一个Activity显示为对话框模式and ...

  8. maven使用.02.一些概念

    在上一篇POST中,简要的介绍了一下maven的特点,优势,安装.并建立了一个简单地Hello world工程.这一篇POST中,将主要会介绍一下Maven的一些约定. pom.xml文件 Maven ...

  9. CentOS6-釋放ip重新分配,centos7 ifconifg没有ip

    http://bbs.csdn.net/topics/390725823 系统win7 ,dhcp自动获取ip虚拟机是10.0 安装之后我装了ubuntu  选用 NAT网络, 刚装完我能上网 ,但是 ...

  10. delphi 文件的读取(二进制文件和文本文件)

    http://blog.csdn.net/earbao/article/details/9174033