2020年10月26日:
使用treadlocal来管理同一事务进行操作:
在完成项目的时候,有时一项工作需要几个事务共同完成来保证正常的运行,因此需要使用threadlocal来管理同一个数据库连接,以此来保证事务的正常运行。以下是我写的管理数据库连接的代码:
package shujuku;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class shuju {
private static ThreadLocal<Connection> conns=new ThreadLocal<Connection>();
public static Connection getConnection()
{
Connection conn=conns.get();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e1){
e1.printStackTrace();
}
if(conn==null){
try {
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/kecheng?serverTimezone=UTC","root","150023");
conns.set(conn);
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
public static void close(Connection connection)
{
try {
if (connection != null)
{
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void commitAndclose() {
Connection connection=conns.get();
if(connection!=null) {
try {
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
conns.remove();
}
public static void rollbackAndclose() {
Connection connection=conns.get();
if(connection!=null) {
try {
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
conns.remove();
}
}
此段代码用于数据库连接,并将事务设置为了手动提交,而且使用了threadlocal来进行管理,这样一来就不用担心事务会发生错误了。