首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JDBC系列--登录练习和事务控制

JDBC系列--登录练习和事务控制

作者头像
玖柒的小窝
修改于 2021-10-25 10:35:49
修改于 2021-10-25 10:35:49
4590
举报
文章被收录于专栏:各类技术文章~各类技术文章~

登陆练习

需求: 1.通过键盘录入用户名和密码 2.判断用户是否登录成功 select * from user where username = "" and password = ""; 如果这个sql有查询结果,则成功反之失败

数据库

更改配置文件即可

代码
代码语言:javascript
复制
 package cn.caq.jdbc;
 ​
 import cn.caq.utils.JDBCutils;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Scanner;
 ​
 /**
  * 需求:
  * 1.通过键盘录入用户名和密码
  * 2.判断用户是否登录成功
  */
 ​
 public class JDBCDemo08 {
 ​
     public static void main(String[]args){
         //1.键盘录入,接受用户名和密码
         Scanner scanner = new Scanner(System.in);
         System.out.println("请输入username:");
         String username = scanner.nextLine();
         System.out.println("请输入password");
         String password = scanner.nextLine();
 ​
         //2.调用方法
 //        JDBCDemo08 jdbcDemo08 = new JDBCDemo08();
 //        boolean login = jdbcDemo08.login(username, password);
         boolean flag = new JDBCDemo08().login(username, password);
 ​
         //3.判断结果,输出不同语句
         if (flag){
             System.out.println("Success!!!!!!");
         }else {
             System.out.println("username or passwd False!!!!!!!!");
         }
 ​
     }
 ​
     //登录方法
     public boolean login(String username,String password){
         if (username == null || password == null){
             return false;
         }
         Connection conn = null;
         Statement stmt = null;
         ResultSet rs = null;
         //1.连接数据库
         try {
             conn = JDBCutils.getConnection();
             //2.定义sql
             String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
             //3.获取执行sql的对象
             stmt = conn.createStatement();
             //4.执行sql语句
             rs = stmt.executeQuery(sql);
             //5.判断
             return rs.next();//有下一行返回true
         } catch (SQLException throwables) {
             throwables.printStackTrace();
         } finally {
             JDBCutils.close(rs,stmt,conn);
         }
 ​
         return false;//如果出现异常返回false
     }
 }
 ​
 输出结果为:
 请输入username:
 zs
 请输入password
 123
 Success!!!!!!
 ​
     
 请输入username:
 sadfa
 请输入password
 24323
 username or passwd False!!!!!!!!
复制代码

JDBC控制事务

1.事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。

2.操作:

1.开后事务 2.提交事务 3.回滚事务

3.使用connection对象来管理事务

开启事务: setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开后事务 在执行sql之前开启事务 提交事务: commit() 当所有sql都执行完提交事务 回滚事务: rollback() 在catch中回滚事务

转账实例

代码语言:javascript
复制
 package cn.caq.jdbc;
 ​
 import cn.caq.utils.JDBCutils;
 ​
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 ​
 /**
  * 事务操作
  */
 ​
 public class JDBCDemo10 {
     public static void main(String[] args) {
         Connection conn = null;
         PreparedStatement pstmt1 = null;
         PreparedStatement pstmt2 = null;
         //1.获取连接
         try {
             conn = JDBCutils.getConnection();
             //开启事务
             conn.setAutoCommit(false);
 ​
             //2.定义sql
             //2.1张三 - 500
             String sql1 = "update account set balance = balance - ?  where id = ?";
             //2.1李四 + 500
             String sql2 = "update account set balance = balance + ?  where id = ?";
             //3.获取执行sql对象
             pstmt1 = conn.prepareStatement(sql1);
             pstmt2 = conn.prepareStatement(sql2);
             //4.设置参数
             pstmt1.setDouble(1, 500);
             pstmt1.setInt(2, 1);
 ​
             pstmt2.setDouble(1, 500);
             pstmt2.setInt(2, 2);
 ​
             //5.执行sql
             pstmt1.executeUpdate();
 ​
             //手动制造异常
             int i = 3 / 0;
 ​
             pstmt2.executeUpdate();
 ​
             //提交事务
             conn.commit();
 ​
         } catch (Exception throwables) {
             try {
                 if (conn != null) {
                     conn.rollback();
                 }
             } catch (SQLException e) {
                 e.printStackTrace();
             }
             throwables.printStackTrace();
         }
     }
 }
 ​
 ​
 如果中途出现任何异常,则触发回滚操作!
     输出结果为:
     java.lang.ArithmeticException: / by zero
     at cn.caq.jdbc.JDBCDemo10.main(JDBCDemo10.java:43)
复制代码

金额没有发生变化

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 登陆练习
    • 数据库
    • 代码
  • JDBC控制事务
    • 转账实例
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档