JavaBean中使用JDBC方式进行事务处理转

在JavaBean数据库操作中,一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。我们通过提交commit()或是回滚rollback()来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。

   在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的, jdbc api中,可以通过调用setAutoCommit(false) 来禁止自动提交事务。然后就可以把多条更新数据库的sql语句做为一个事务,在所有操作完成之后,调用commit()来进行整体提交。倘若其中一项sql操作失败,就不会执行commit()方法,而是产生相应的sqlexception,此时就可以捕获异常代码块中调用rollback()方法撤消事务。下面是一个例子;

  比如:有两张表,一个记录用户帐户(useraccount),一个是系统帐(sysaccount),现在有一个用户要向系统寄钱买东西,就要此行下面两条语句:

String sql1 = "update useraccount set monery=monery-1000 where name='username'";
String sql2 = "update sysaccount set monery=monery+1000 where name='sysname'";

  但如果第一条执行了而第二条语句执行出错了就会造成不良后果。这是就可以用手动提交的方式来防止这种事情的发生:主要代码

try{
 .
 .
 .
 conn=DriverManager.getConnection("..."); //链接数据库

 conn.setAutoCommit(false);//禁止自动提交事务
 stmt = conn.Create....
 String sql1 = "update useraccount set monery=monery-1000 where name='usename'";
 String sql2 = "update sysaccount set monery=monery+1000 where name='sysname'";
 stmt=conn.createStatement();
 stmt.executeUpdate(sql1);
 stmt.executeUpdate(sql2);

 conn.commit(); //统一提交。

 }catch(SQLException e){
  conn.rollback(); //倘若其中一项sql操作失败,就不会执行commit()方法,而是产生相应的sqlexception,此时就可以捕获 异常代码块中调用rollback()方法撤消事务。
  e.printStackTrace();
 }
 finally{
  if(stmt!=null){
   stmt.close();
  }
  if(conn!=null){
   stmt.close();
  }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生管理系统是一个比较典型的CRUD应用,我们可以使用JSP + JDBC + MySQL来实现。 首先,我们需要创建一个数据库,包含学生信息的表。可以创建一个名为`student`的表,包含以下字段: ``` id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, age int(11) NOT NULL, gender varchar(10) NOT NULL, phone varchar(20) DEFAULT NULL, address varchar(100) DEFAULT NULL, PRIMARY KEY (id) ``` 接下来,我们需要创建一个JDBC连接池,以便在应用共享数据库连接。可以使用Tomcat自带的连接池,或者使用第三方的连接池库。这里我们使用Tomcat自带的连接池。 在`context.xml`文件添加以下内容: ``` <Context> <Resource name="jdbc/student" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="数据库用户名" password="数据库密码" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8"/> </Context> ``` 在`web.xml`文件添加以下内容: ``` <resource-ref> <description>Connection pool for MySQL</description> <res-ref-name>jdbc/student</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ``` 然后,我们可以编写一个JavaBean来代表学生对象。在`Student.java`文件添加以下内容: ```java public class Student { private int id; private String name; private int age; private String gender; private String phone; private String address; // 省略getter和setter方法 } ``` 接下来,我们可以编写一个DAO类来访问数据库。在`StudentDAO.java`文件添加以下内容: ```java public class StudentDAO { private DataSource dataSource; public StudentDAO() throws NamingException { Context context = new InitialContext(); dataSource = (DataSource) context.lookup("java:comp/env/jdbc/student"); } public List<Student> getAllStudents() throws SQLException { List<Student> students = new ArrayList<>(); try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM student")) { while (rs.next()) { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setGender(rs.getString("gender")); student.setPhone(rs.getString("phone")); student.setAddress(rs.getString("address")); students.add(student); } } return students; } public Student getStudentById(int id) throws SQLException { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM student WHERE id=?")) { stmt.setInt(1, id); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setGender(rs.getString("gender")); student.setPhone(rs.getString("phone")); student.setAddress(rs.getString("address")); return student; } } } return null; } public void addStudent(Student student) throws SQLException { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement( "INSERT INTO student (name, age, gender, phone, address) VALUES (?, ?, ?, ?, ?)")) { stmt.setString(1, student.getName()); stmt.setInt(2, student.getAge()); stmt.setString(3, student.getGender()); stmt.setString(4, student.getPhone()); stmt.setString(5, student.getAddress()); stmt.executeUpdate(); } } public void updateStudent(Student student) throws SQLException { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement( "UPDATE student SET name=?, age=?, gender=?, phone=?, address=? WHERE id=?")) { stmt.setString(1, student.getName()); stmt.setInt(2, student.getAge()); stmt.setString(3, student.getGender()); stmt.setString(4, student.getPhone()); stmt.setString(5, student.getAddress()); stmt.setInt(6, student.getId()); stmt.executeUpdate(); } } public void deleteStudent(int id) throws SQLException { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement("DELETE FROM student WHERE id=?")) { stmt.setInt(1, id); stmt.executeUpdate(); } } } ``` 最后,我们可以编写一个JSP页面来展示学生信息。在`index.jsp`文件添加以下内容: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <%@ page import="javax.naming.NamingException" %> <%@ page import="com.example.StudentDAO" %> <%@ page import="com.example.Student" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>学生管理系统</title> </head> <body> <h1>学生列表</h1> <table border="1"> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>电话</th> <th>地址</th> <th></th> </tr> <% StudentDAO dao = null; try { dao = new StudentDAO(); List<Student> students = dao.getAllStudents(); for (Student student : students) { %> <tr> <td><%= student.getId() %></td> <td><%= student.getName() %></td> <td><%= student.getAge() %></td> <td><%= student.getGender() %></td> <td><%= student.getPhone() %></td> <td><%= student.getAddress() %></td> <td> <a href="edit.jsp?id=<%= student.getId() %>">编辑</a> <a href="delete.jsp?id=<%= student.getId() %>" onclick="return confirm('确定删除?')">删除</a> </td> </tr> <% } } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } finally { if (dao != null) { dao.close(); } } %> </table> <p><a href="add.jsp">添加学生</a></p> </body> </html> ``` 在`edit.jsp`文件,我们可以使用同样的方式显示学生信息,并提供一个表单来编辑学生信息。在提交表单时,我们可以使用`StudentDAO`类来更新学生信息。 在`add.jsp`文件,我们可以提供一个表单来添加新的学生信息。在提交表单时,我们可以使用`StudentDAO`类来插入新的学生信息。 在`delete.jsp`文件,我们可以使用`StudentDAO`类来删除学生信息。 至此,我们已经完成了一个简单的学生管理系统的实现。注意,在实际应用,我们需要进行一些安全性和可靠性的考虑,例如输入验证、异常处理事务管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值