java连接mysql(二)

模拟转账成功时的业务场景

 1 import java.sql.*;
 2
 3 public class TransactionDemo1 {
 4
11
12     public static void main(String[] args) throws SQLException, ClassNotFoundException {
13         String url = "jdbc:mysql://localhost/xh";
14         String username = "xiaohengdada";
15         String password = "123456";
16
17         Class.forName("org.gjt.mm.mysql.Driver");
18         Connection conn = null;
19         PreparedStatement st = null;
20         ResultSet rs = null;
21
22         try {
23             conn = DriverManager.getConnection(url, username, password);
24             conn.setAutoCommit(false);// 通知数据库开启事务(start transaction)
25             String sql1 = "update account set money=money+100 where name=‘A‘";
26             st = conn.prepareStatement(sql1);
27             int num1 = st.executeUpdate();
28             if (num1 > 0) {
29                 System.out.println("succeed to update A ");
30             }
31             String sql2 = "update account set money=money-100 where name=‘B‘";
32             st = conn.prepareStatement(sql2);
33             int num2 = st.executeUpdate();
34             if (num2 > 0) {
35                 System.out.println("succeed to update B ");
36             }
37             conn.commit();// 上面的两条SQL执行Update语句成功之后就通知数据库提交事务(commit)
38             System.out.println("成功!!!"); // log4j
39         } catch (Exception e) {
40             e.printStackTrace();
41         } finally {
42             // rs.close();
43             st.close();
44             conn.close();
45         }
46     }
47 }

 1 import java.sql.*;
 2
 3 public class TransactionDemo1 {
 4     public static void main(String[] args) throws SQLException, ClassNotFoundException {
 5         String url = "jdbc:mysql://localhost/xh";
 6         String username = "xiaohengdada";
 7         String password = "123456";
 8
 9         Class.forName("org.gjt.mm.mysql.Driver");
10         Connection conn = null;
11         PreparedStatement st = null;
12         ResultSet rs = null;
13
14         try {
15             conn = DriverManager.getConnection(url, username, password);
16             conn.setAutoCommit(false);// 通知数据库开启事务(start transaction)
17             String sql1 = "update account set money=money-100 where name=‘A‘";
18             st = conn.prepareStatement(sql1);
19             st.executeUpdate();
20             // 用这句代码模拟执行完SQL1之后程序出现了异常而导致后面的SQL无法正常执行,事务也无法正常提交,此时数据库会自动执行回滚操作
21             int x = 1 / 0;
22             String sql2 = "update account set money=money+100 where name=‘B‘";
23             st = conn.prepareStatement(sql2);
24             st.executeUpdate();
25             conn.commit();// 上面的两条SQL执行Update语句成功之后就通知数据库提交事务(commit)
26             System.out.println("成功!!!");
27         } catch (Exception e) {
28             e.printStackTrace();
29         } finally {
30             st.close();
31             conn.close();
32         }
33     }
34 }

 1 import java.sql.*;
 2
 3 public class TransactionDemo1 {
 4     public static void main(String[] args) throws SQLException, ClassNotFoundException {
 5         String url = "jdbc:mysql://localhost/xh";
 6         String username = "xiaohengdada";
 7         String password = "123456";
 8
 9         Class.forName("org.gjt.mm.mysql.Driver");
10         Connection conn = null;
11         PreparedStatement st = null;
12         ResultSet rs = null;
13
14           try{
15                 conn = DriverManager.getConnection(url,username,password);
16                 conn.setAutoCommit(false);//通知数据库开启事务(start transaction)
17                 String sql1 = "update account set money=money-100 where name=‘A‘";
18                 st = conn.prepareStatement(sql1);
19                 st.executeUpdate();
20                 //用这句代码模拟执行完SQL1之后程序出现了异常而导致后面的SQL无法正常执行,事务也无法正常提交
21                 int x = 1/0;
22                 String sql2 = "update account set money=money+100 where name=‘B‘";
23                 st = conn.prepareStatement(sql2);
24                 st.executeUpdate();
25                 conn.commit();//上面的两条SQL执行Update语句成功之后就通知数据库提交事务(commit)
26                 System.out.println("成功!!!");
27             }catch (Exception e) {
28                 try {
29                     //捕获到异常之后手动通知数据库执行回滚事务的操作
30                     conn.rollback();
31                 } catch (SQLException e1) {
32                     e1.printStackTrace();
33                 }
34                 e.printStackTrace();
35             }finally{
36
37             }
38     }
39 }

设置回滚点:

 1 import java.sql.*;
 2
 3 public class TransactionDemo1 {
 4     public static void main(String[] args) throws SQLException, ClassNotFoundException {
 5         String url = "jdbc:mysql://localhost/xh";
 6         String username = "xiaohengdada";
 7         String password = "123456";
 8
 9         Class.forName("org.gjt.mm.mysql.Driver");
10         Connection conn = null;
11         PreparedStatement st = null;
12         ResultSet rs = null;
13         Savepoint sp = null;
14
15         try {
16             conn = DriverManager.getConnection(url, username, password);
17             conn.setAutoCommit(false);// 通知数据库开启事务(start transaction)
18
19             String sql1 = "update account set money=money-100 where name=‘A‘";
20             st = conn.prepareStatement(sql1);
21             st.executeUpdate();
22
23             // 设置事务回滚点
24             // sp = conn.setSavepoint();
25
26             String sql2 = "update account set money=money+100 where name=‘B‘";
27             st = conn.prepareStatement(sql2);
28             st.executeUpdate();
29
30             sp = conn.setSavepoint();
31             // 程序执行到这里出现异常,后面的sql3语句执行将会中断
32             int x = 1 / 0;
33
34             String sql3 = "update account set money=money+100 where name=‘C‘";
35             st = conn.prepareStatement(sql3);
36             st.executeUpdate();
37
38             conn.commit();
39
40         } catch (Exception e) {
41             try {
42                 /**
43                  * 我们在上面向数据库发送了3条update语句, sql3语句由于程序出现异常导致无法正常执行,数据库事务而已无法正常提交,
44                  * 由于设置的事务回滚点是在sql1语句正常执行完成之后,sql2语句正常执行之前,
45                  * 那么通知数据库回滚事务时,不会回滚sql1执行的update操作
46                  * 只会回滚到sql2执行的update操作,也就是说,上面的三条update语句中,sql1这条语句的修改操作起作用了
47                  * sql2的修改操作由于事务回滚没有起作用,sql3由于程序异常没有机会执行
48                  */
49                 conn.rollback(sp);// 回滚到设置的事务回滚点
50                 // 回滚了要记得通知数据库提交事务
51                 conn.commit();
52             } catch (SQLException e1) {
53                 e1.printStackTrace();
54             }
55             e.printStackTrace();
56         } finally {
57         }
58     }
59 }

时间: 2024-10-29 19:09:47

java连接mysql(二)的相关文章

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu

通过java连接mysql总结

简介:通过java连接mysql需要用到JDBC驱动.JDBC驱动安装在mysql-client客户端,mysql-server服务端不需要安装. 数据库安装初始化略.测试用到的命令: 1.创建测试用库,表,字段: create database score; use score; create table score(id nvarchar(10),stu_id nvarchar(10),c_name nvarchar(10),grade nvarchar(10)); insert into

Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句'' ""作用

//方法一,可以验证登录,但方法不实用.package com.swift; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class Logi

【JDBC编程】Java 连接 MySQL 基本过程以及封装数据库工具类

鉴于linux系统下安装oracle数据库过于麻烦,而相关的java连接mysql基本方法的参考文章过少且参差不齐,故本人查阅了一些书和网络资料写下此文章. 从数据库环境搭建.基本语法到封装工具类全过程,可作为参考.转载请注明来源. 一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static connection getConnection(String u

java连接mysql

1.下载jar包 网址:http://dev.mysql.com/downloads/ -->点击:"MySQL Connector/J 5.1 - Generally Available (GA) release (recommended)" -->点击:(mysql-connector-java-5.1.10.zip)后面的download按钮 -->点击:"? No thanks, just take me to the downloads!"

java连接mysql的过程

今天突然心血来潮,想要用java连接mysql,记得以前是在vs2010的环境下用C#连接sql sever,其实他们的方法都差不多. 现在就可以简单的介绍下java如何连接mysql 第一步,设计mysql的数据库,设计数据库的时候特别要注意,数据库名是xsxx,表名字是xs.注意在设置字符的时候一定要选用utf8,不然就会以你不懂的形式出现. 第二步:在esclip中新建项目,项目名称是TestJDBC,新建class名称为TestJDBC,添加引用项目文件 第三步:项目中的相关代码: --

Java连接MySQL Warning: Establishing SSL connection without server's identity verification is not recommended

1. 数据库 1.1 创建表 在当前数据库students中,创建数据表student: 1 mysql> create table student( 2 -> studentid char(10),#学生ID 3 -> name varchar(10),#学生姓名 4 -> age smallint,#学生年龄 5 -> grade smallint)#成绩 6 -> ; 1.2 插入信息: INSERT student VALUES("1*********

java连接MySQL,SQL server数据库

java连接MySQL: 首先导入jar包文件: 下载地址:http://download.csdn.net/detail/chongzi321/5703641 然后: 1 Connection ct = null; 2 Statement sm = null; 3 ResultSet rs = null; 4 5 try{ 6 Class.forName("com.mysql.jdbc.Driver"); 7 ct = DriverManager.getConnection(&quo

java连接MySQL进行增删改操作时报错

java连接MySQL数据库后执行execute语句,控制台总是报错,如下: Exception in thread "main" java.sql.SQLException: Could not retrieve transation read-only status server ……? Caused by: java.sql.SQLException: Unknown system variable 'tx_read_only' 我捣鼓了一整个下午,参考别人的代码,甚至完全套用别