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

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

登陆练习


需求:

1.通过键盘录入用户名和密码

2.判断用户是否登录成功

select * from user where username = "" and password = "";

如果这个sql有查询结果,则成功反之失败


数据库


image.png

更改配置文件即可

image.png


代码


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中回滚事务

下面通过一个转账实例来加深印象


转账实例


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)

金额没有发生变化

image.png

成功了


小总结


通过事务的控制,来解决数据传输中可能遇到的问题,通过在程序中实现这一操作能很好的加深我们的印象



相关文章
|
5天前
|
SQL 前端开发 关系型数据库
考古Servlet+JDBC实现简约的登录注册界面
考古Servlet+JDBC实现简约的登录注册界面
20 1
|
5天前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
45 0
|
5天前
|
前端开发 Java Maven
Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块
Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块
63 0
|
7月前
|
Java 数据库连接 数据库
JDBC知识【JDBC练习】第五章
JDBC知识【JDBC练习】第五章
|
11月前
|
前端开发 测试技术 数据库
【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能(下)
【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能
84 0
|
11月前
|
Java 数据库连接 数据库
【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能(上)
【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能
105 0
|
11月前
|
存储 SQL Java
|
SQL Java 数据库连接
JDBC系列--template实例练习
JDBC系列--template实例练习
67 0
|
Java 数据库连接
JDBC练习
JDBC练习
62 0
JDBC练习