JDBC登录功能实现

模拟淘宝登录

package com.bjsxt.jdbc2;import com.bjsxt.entity.User;
import entity.Emp;import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** 模拟淘宝登录的功能***/
public class TestLogin {/*** 前台* @param args*/public static void main(String[] args) {//1.输入用户名和密码Scanner input = new Scanner(System.in);System.out.println("请输入用户名");String userId = input.next();System.out.println("请输入密码");String password = input.next();//2.调用后台判断登录是否成功并返回结果给前台User user  = login(userId,password);//3.在前台输入结果if(user == null){System.out.println("登录失败");}else{System.out.println("欢迎您:"+user.getRealName());}}public static User login(String userId,String pwd){Connection conn = null;Statement stmt = null;ResultSet rs = null;User user2 = null; //默认登录失败try{String driver = "com.mysql.cj.jdbc.Driver";String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";String user = "root";String password = "root";//1.加载驱动Class.forName(driver);//2.和数据库建立连接conn = DriverManager.getConnection(url, user, password);//3.创建一个SQL命令发送器(手枪)stmt = conn.createStatement();//4.准备一个SQL命令,并使用SQL命令发送器发送过去,并返回结果String sql = "select * from t_user where userid = '"+userId+"' and password='"+pwd+"'";System.out.println(sql);rs = stmt.executeQuery(sql);//5.处理结果(将ResultSet的数据封装到一个List中)if(rs.next()){//获取当前行各个字段的值//String userId = rs.getString("userid");String realName = rs.getString("REALNAME");//String password = rs.getString("password");double money = rs.getDouble("money");//将当前行各个字段的值封装到一个Emp对象中user2 = new User(userId,realName,pwd,money);}}catch (SQLException e){e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {//6.关闭资源try {if(rs != null){rs.close();}} catch (SQLException e) {e.printStackTrace();}try {if(stmt != null){stmt.close();}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();}} catch (SQLException e) {e.printStackTrace();}}return user2;}}

缺点:有sql注入风险
解决:使用PreparedStatement

package com.bjsxt.jdbc2;import com.bjsxt.entity.User;import java.sql.*;
import java.util.Scanner;/*** 模拟淘宝登录的功能** 关系* public interface PreparedStatement extends Statement*** PreparedStatement优点* 1.安全性高  避免SQL注入 因为不是基于字符串拼接* 2.代码不繁琐,可读性高。不用进行复杂的字符串拼接* 3.性能高**/
public class TestLogin2 {/*** 前台* @param args*/public static void main(String[] args) {//1.输入用户名和密码Scanner input = new Scanner(System.in);System.out.println("请输入用户名");String userId = input.next();System.out.println("请输入密码");String password = input.next();//2.调用后台判断登录是否成功并返回结果给前台User user  = login(userId,password);//3.在前台输入结果if(user == null){System.out.println("登录失败");}else{System.out.println("欢迎您:"+user.getRealName());}}public static User login(String userId,String pwd){Connection conn = null;//Statement stmt = null;PreparedStatement pstmt = null;ResultSet rs = null;User user2 = null; //默认登录失败try{String driver = "com.mysql.cj.jdbc.Driver";String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";String user = "root";String password = "root";//1.加载驱动Class.forName(driver);//2.和数据库建立连接conn = DriverManager.getConnection(url, user, password);//3.创建一个SQL命令发送器(手枪)//stmt = conn.createStatement();String sql = "select * from t_user where userid =? and password=?";//? 占位符pstmt = conn.prepareStatement(sql);//4.准备一个SQL命令,并使用SQL命令发送器发送过去,并返回结果//System.out.println(sql);//rs = stmt.executeQuery(sql);pstmt.setString(1, userId);//  从1开始pstmt.setString(2, pwd);rs = pstmt.executeQuery();//5.处理结果(将ResultSet的数据封装到一个List中)if(rs.next()){//获取当前行各个字段的值//String userId = rs.getString("userid");String realName = rs.getString("REALNAME");//String password = rs.getString("password");double money = rs.getDouble("money");//将当前行各个字段的值封装到一个Emp对象中user2 = new User(userId,realName,pwd,money);}}catch (SQLException e){e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {//6.关闭资源try {if(rs != null){rs.close();}} catch (SQLException e) {e.printStackTrace();}try {if(pstmt != null){pstmt.close();}} catch (SQLException e) {e.printStackTrace();}try {if(conn != null){conn.close();}} catch (SQLException e) {e.printStackTrace();}}return user2;}}

事务管理

package com.bjsxt.jdbc2;import java.sql.*;/*** 银行转账*/
public class TestTransaction {public static void main(String[] args){Connection conn = null;CallableStatement cst;try{String driver = "com.mysql.cj.jdbc.Driver";String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";String user = "root";String password = "root";//1.加载驱动//Class.forName(driver);//2.和数据库建立连接conn = DriverManager.getConnection(url, user, password);//3.创建一个SQL命令发送器(手枪)Statement stmt = conn.createStatement();//设置事务不再自动提交conn.setAutoCommit(false);//4.准备一个SQL命令,并使用SQL命令发送器发送过去,并返回结果stmt.executeUpdate("update t_user set money = money - 2000 where userid = 'lisi'");//stmt.executeUpdate("update t_user set money = money1 + 2000 where userid = 'zhangsan'");stmt.executeUpdate("update t_user set money = money + 2000 where userid = 'zhangsan'");//事务成功结束conn.commit();}catch (SQLException e){e.printStackTrace();//事务失败结束try {conn.rollback();} catch (SQLException ex) {ex.printStackTrace();}}finally {//6.关闭资源
//            stmt.close();
//            conn.close();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19级:班级日常分享,一天一瞬间

点击上方蓝色关注我们!19级的同学们目前正在做KTV点歌系统项目,截止今日为止,项目已经进展了1天多了,进度还在可控范围内,大部分组的后台都已完成,刘娜小组稍微比较慢了点儿。李磊小组的进度最快&#xff0…

Attentive Sequence to Sequence Networks

转载自 Attentive Sequence to Sequence Networks Attentive Sequence to Sequence Networks 1、Encoder-Decoder 框架 首先我们模型的整体框图如下: Encoder-Decoder 框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章&a…

ssl2331OJ1373-鱼塘钓鱼 之3【dp】

前言 上篇: 纯贪心做法 堆优化贪心 题目:OJ1373 正题 有N个鱼塘,给出每分钟可以钓到的鱼数和每钓一次下一次钓减少的鱼数和到下一个鱼塘需要几分钟(不能回头)。求限定时间内最多能够钓到的鱼数 解题思路 用f[i][…

多线程三种创建方式

方法一:继承Thread Thread package com.bjsxt.create;/*** author dell* data 2021/3/2* 创建一个线程对象,并启动线程** 注意:启动main方法,自动创建main线程* * thread.join() 阻塞乌龟线程,乌龟执行完…

20级四班班级管理规章制度

点击上方蓝色关注我们!

完全图解RNN、RNN变体、Seq2Seq、Attention机制

转载自 完全图解RNN、RNN变体、Seq2Seq、Attention机制 完全图解RNN、RNN变体、Seq2Seq、Attention 机制 本文首发于知乎专栏“ai insight”! 本文主要是利用图片的形式,详细地介绍了经典的RNN、RNN几个重要变体,以及Seq2Seq模型、Attent…

OJ1306-最长公共子上升序列【dp】

前言 这是一道比较久之前的题了,之前没做完。不过这次不是因为我改了,而是数据改了(可能之前有问题),然后偶然今天翻的时候就发现自己对了QAQ。 题目 OJ1306 就是给出两个序列,求出这两个序列中公共的最…

多线程三种同步方式(模拟银行取款)

方法一:同步代码块 Accoun package com.bjsxt.synch1;/*** 银行账户类*/ public class Account {private int balance 600;//余额/*** 取款* param money*/public void withDraw(int money){this.balance this.balance -money;}/*** 查看余额* return*/public i…

今天就唠叨唠叨吧……

点击上方蓝色关注我们!看书这个爱好是从去年年底开始的。看关于教育教学管理类型的书籍是从今年前半年开始的,有好些书都是王晓春老师写的,例如《做一个专业的班主任》、《问题学生诊疗手册》《今天怎样做教师》,每本书都有不一样…

利用redis保存验证码并设置过期时间

package com.atguigu.jedis;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCode {public static void main(String[] args) {//模拟验证码发送verifyCode("13678765435");//模拟验证码校验//getRedisCode("13678765435",&q…

洛谷P2085ssl1411OJ1370-最小函数值【堆,贪心】

前言 有一个东西卡了我一会 折叠N*或N 正整数集 (由全体正整数组成的集合) N*:{1,2,3,…,n,…} 题目 洛谷P2085 OJ1370 给出n个ai,bi,ci。定义一个函数 fi(x)aix2bixci(x∈N∗)fi(x)aix2bixci(x∈N∗)然后求最小的m个数解题思路 这道题比较简单,一下就想到了…

如何轻松愉快的理解条件随机场(CRF)

转载自 如何轻松愉快的理解条件随机场(CRF) 如何轻松愉快的理解条件随机场(CRF)? 理解条件随机场最好的办法就是用一个现实的例子来说明它。 但是目前中文的条件随机场文章鲜有这样干的,可能写文章的人…

ASP.NET Core MVC 控制器创建与依赖注入

在我最后一篇关于 ASP.NET Core 释放IDsiposable对象的文章(中文、英文原文)中,Mark Rendle 指出,MVC 控制器在请求结束时也会释放资源。乍一看,此范围内的资源在请求结束时会释放似乎是显而易见的,但是 MV…

多线程的线程通信(生产消费)

消费者线程 package com.bjsxt.commu5;/*** 消费者线程*/ public class ConsumeRunnable implements Runnable {//private Product product new Product();private Product product;private Object obj new Object();public ConsumeRunnable() {}public ConsumeRunnable(Pr…

19级:一天一瞬间

点击上方蓝色关注我们!3班的KTV项目周期为两周,目前时间将近一周,除李磊小组进度超出之外,其余四个小组的进度都属正常。上午大致的将每个小组的前台功能过了一遍,刘文瑞小组还剩几个点歌功能未实现,整体的…

数组与集合相互转换

数组Array与集合List相互转化有两种方式&#xff0c;一种是自己手动转化&#xff0c;一种是直接使用集合或数组自带的方法转化 数组转化集合&#xff1a; 方法一&#xff1a;手动转化 List<String> list new ArrayList<>(); String[] array new String[] {"…

拥抱.NET Core系列:依赖注入(2)

上一篇“拥抱.NET Core系列&#xff1a;依赖注入&#xff08;1&#xff09;大体介绍了服务注册、获取和生命周期&#xff0c;这一篇来做一些补充。由于内容跨度大&#xff08;.NET Core、ASP.NET Core&#xff09;&#xff0c;所以文章并不是非常的贯穿&#xff0c;大家可以挑着…

使用Docker 实现微服务并搭建博客,一文全掌握

转载自 使用Docker 实现微服务并搭建博客&#xff0c;一文全掌握 Docker 是一个容器工具&#xff0c;提供虚拟环境。很多人认为&#xff0c;它改变了我们对软件的认识。 本文&#xff0c;通过搭建一个博客的例子&#xff0c;来介绍如何使用Docker实现微服务。 站在 Docker …