我对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/