java - 如何在java(JDBC)中没有任何框架的情况下处理事务?

标签 java jdbc service transactions

我对java很陌生。我正在使用简单的 JSP/Servlet 和 Service/Dao 架构学习 JDBC。请考虑下面给出的代码快照。

package com.login.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        HelloService helloService = new HelloService();
        helloService.doMyUnitOfWork();
    }

}

class HelloService {
    public void doMyUnitOfWork() {
        HelloDao helloDao = new HelloDao();
        // I want to execute all below three works in single unit, it means I want to use single transaction for all database operations.
        // Thus any of my below database operation fails I want to rollback all of them, otherwise commit all in database.
        helloDao.doMyWork1();
        helloDao.doMyWork2();
        helloDao.doMyWork3();
    }
}

class HelloDao {
    public void doMyWork1() {
        // this will do database operation 1.
    }

    public void doMyWork2() {
        // this will do database operation 2.
    }

    public void doMyWork3() {
        // this will do database operation 3.
    }
}

正如我在上面的代码快照中提到的,我需要使用简单的 JDBC 在服务层处理事务。当我尝试用 Google 搜索时,我得到的结果几乎是 Spring 和 EJB,而不是简单的 JDBC。

这可能吗?如果是,那么如何?

提前致谢。

最佳答案

是的,这是可能的。像 Hibernate 这样的框架在内部使用 jdbc。

您可以通过以下方式开始交易

connection.setAutoCommit(false);

您可以回滚您的交易:

connection.rollback();

如果你想将数据保存在数据库中,你可以调用:

connection.commit();

您可以使用以下方式关闭交易:

connection.close();

这是示例:

Connection connection = ...
try{
connection.setAutoCommit(false);


Statement statement1 = null;
try{
    statement1 = connection.createStatement();
    statement1.executeUpdate(
        "update people set name='John' where id=123");
} finally {
    if(statement1 != null) {
        statement1.close();
    }
}


Statement statement2 = null;
try{
    statement2 = connection.createStatement();
    statement2.executeUpdate(
        "update people set name='Gary' where id=456");
} finally {
    if(statement2 != null) {
        statement2.close();
    }
}

connection.commit();


} catch(Exception e) {
connection.rollback();
}finally {
if(connection != null) {
    connection.close();
}
}

http://tutorials.jenkov.com/jdbc/transaction.html 复制,以防被删除。

关于java - 如何在java(JDBC)中没有任何框架的情况下处理事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874998/

相关文章:

java - 使用maven将第三方代码添加到具有依赖项的eclipse项目中?

java - 将命令作为文本文件传递给程序

java - 如何将 JNA + native 库与 JNLP Web 启动一起使用 [在 Mac 上]?

java - 具有不同 sql 查询的批处理 preparedstatement

java - JPA2中使用字符串建表(类似JDBC)

mysql - Spring batch itemwriter删除mysql中的记录

Android 媒体播放器服务最佳实践

java - 将整个 JList 显示到 JTextArea

.net - 如何使用多个参数调用 RESTful WCF 服务方法?

C# 检查服务是否设置为自动(延迟启动)