zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL连接类型下的事务处理(mysql不同连接的事务)

mysql事务连接 类型 不同 事务处理
2023-06-13 09:11:23 时间

MySQL连接类型下的事务处理

在MySQL中,连接类型是指客户端应用程序和数据库服务器之间的连接方式。MySQL支持多个连接类型,包括本地连接、TCP/IP连接、Web连接和SSL连接等。根据连接类型的不同,事务处理的方式也有其特定的规则和要求。

本地连接事务处理

本地连接是指应用程序与MySQL数据库在同一台计算机上运行。在这种连接类型下,事务处理非常简单。应用程序调用MySQL的事务处理命令(BEGIN、COMMIT或ROLLBACK)即可进行事务操作。

以下是一个本地连接的示例(使用Python编程语言):

`python

import mysql.connector

# 连接到本地MySQL数据库

mydb = mysql.connector.connect(

host= localhost ,

user= root ,

password= password ,

database= mydatabase

)

# 创建游标对象

mycursor = mydb.cursor()

# 开始事务

mycursor.execute( BEGIN )

# 执行SQL语句

sql = INSERT INTO customers (name, address) VALUES (%s, %s)

val = ( John , Highway 21 )

mycursor.execute(sql, val)

# 提交事务

mydb.commit()


TCP/IP连接事务处理
在TCP/IP连接下,事务处理的过程与本地连接类似。应用程序需要调用MySQL的事务处理命令,然后利用socket建立TCP/IP连接到服务器,执行SQL语句,提交/回滚事务。
以下是一个TCP/IP连接的示例(使用Java编程语言):
```javaimport java.sql.*;
public class JdbcTest { static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/mydatabase";
static final String USER = "root"; static final String PASS = "password";
public static void mn(String[] args) { Connection conn = null;
Statement stmt = null; try {
// 注册 JDBC 驱动 Class.forName(JDBC_DRIVER);
// 打开连接 System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
// 开始事务 conn.setAutoCommit(false);
// 执行查询 System.out.println("插入数据...");
stmt = conn.createStatement(); String sql = "INSERT INTO customers (name, address) VALUES ("John", "Highway 21")";
stmt.executeUpdate(sql);
// 提交事务 conn.commit();
System.out.println("插入完成...");
// 关闭资源 stmt.close();
conn.close(); } catch(SQLException se) {
// 回滚事务 if(conn != null) {
try { System.err.print("回滚事务...");
conn.rollback(); } catch(SQLException excep) {
excep.printStackTrace(); }
}
// 处理 JDBC 错误 se.printStackTrace();
} catch(Exception e) { // 处理 Class.forName 错误
e.printStackTrace(); } finally {
// 关闭资源 try {
if(stmt!=null) stmt.close(); } catch(SQLException se2) {
} try {
if(conn!=null) conn.close(); } catch(SQLException se) {
se.printStackTrace(); }
} System.out.println("Goodbye!");
}}

Web连接事务处理

当应用程序通过Web服务器与MySQL数据库连接时,需要考虑Web服务器和MySQL服务器之间的网络通信问题。在这种情况下,应用程序通常使用MySQL提供的Java Servlet或JSP技术来访问数据库,这将导致特定的连接类型和事务处理方式。

以下是一个采用Servlet连接MySQL的示例:

`java

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

public class InsertCustomer extends HttpServlet {

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType( text/html );

PrintWriter out = response.getWriter();

Connection conn = null;

PreparedStatement stmt = null;

String customerName = request.getParameter( customerName );

String customerAddress = request.getParameter( customerAddress );

try {

// 加载驱动程序

Class.forName( com.mysql.cj.jdbc.Driver );

// 建立连接

conn = DriverManager.getConnection( jdbc:mysql://localhost/mydatabase , root , password );

// 开始事务

conn.setAutoCommit(false);

// 执行插入操作

String sql = INSERT INTO customers (name, address) VALUES (?, ?)

stmt = conn.prepareStatement(sql);

stmt.setString(1, customerName);

stmt.setString(2, customerAddress);

stmt.executeUpdate();

// 提交事务

conn.commit();

out.println(

插入成功!

);

} catch (SQLException e) {

// 回滚事务

if (conn != null) {

try {

System.out.println( 回滚事务 );

conn.rollback();

} catch(SQLException excep) {

excep.printStackTrace();

}

}

// 显示错误信息

out.println(

插入失败!

" + e.getMessage() + "

);

} catch (Exception e) {

e.printStackTrace();

} finally {

// 关闭连接和语句对象

try {

if (stmt != null) stmt.close();

if (conn != null) conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}


SSL连接事务处理
当应用程序使用SSL协议来安全地访问MySQL数据库时,需要使用SSL连接。SSL连接与TCP/IP连接非常相似,但需要建立一个安全的socket连接,以保护数据传输。
以下是一个使用Java连接SSL MySQL的示例:
```javaimport java.sql.*;
import java.util.Properties;import javax.net.ssl.*;
public class SSLTest {
public static void mn(String args[]) {
Properties props = new Properties(); props.setProperty("user", "root");
props.setProperty("password", "password"); props.setProperty("useSSL", "true");
props.setProperty("sslMode", "VERIFY_IDENTITY"); props.setProperty("trustCertificateKeyStoreUrl", "file:///path/to/cacert.pem");
props.setProperty("trustCertificateKeyStorePassword", "");
String url = "jdbc:mysql://localhost:3306/mydatabase";
try { Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket) socketFactory.createSocket("localhost", 3306);
socket.setEnabledCipherSuites(socket.getSupportedCipherSuites()); System.out.println("Connected to database via SSL...");
Connection conn = DriverManager.getConnection(url, props); conn.setAutoCommit(false);
Statement stmt = conn.createStatement(); String sql = "INSERT INTO customers (name, address) VALUES ("John", "Highway 21")";
stmt.executeUpdate(sql); conn.commit();
stmt.close(); conn.close();
} catch (ClassNotFoundException e) { e.printStackTrace();
} catch (SQLException e) { e.printStackTrace();
} catch (Exception e) { e.printStackTrace();
} }
}

参考文献:

1. MySQL Transactions w3schools.com

2. MySQL Connector/J Developer Guide Oracle.com


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL连接类型下的事务处理(mysql不同连接的事务)