iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【JDBC】笔记(2)-
  • 367
分享到

【JDBC】笔记(2)-

【JDBC】笔记(2)- 2020-11-05 18:11:59 367人浏览 才女
摘要

1、需求:模拟用户登录功能的实现;2、业务描述:程序运行的时候,提供输入的入口,可以让用户输入用户名和密码;用户输入用户名和密码后,提交信息,java程序收集到用户信息..... 一.实现功能

【JDBC】笔记(2)-

1、需求:模拟用户登录功能的实现;2、业务描述:程序运行的时候,提供输入的入口,可以让用户输入用户名和密码;用户输入用户名和密码后,提交信息,java程序收集到用户信息.....

一.实现功能:

    1、需求:
        模拟用户登录功能的实现
    2、业务描述:
        程序运行的时候,提供输入的入口,可以让用户输入用户名和密码
        用户输入用户名和密码后,提交信息,java程序收集到用户信息
        java程序连接数据库验证用户名和密码是否合法,并显示结果(登录成功/登录失败)
    3、用户信息表
    +----+-----------+----------+----------+
    | id | loginName | loginPwd | realName |
    +----+-----------+----------+----------+
    |  1 | abc       | 123      | 张三     |
    |  2 | wwe       | 456      | 李四     |
    +----+-----------+----------+----------+

 

二.代码实现:

import java.sql.*;
import java.util.*;


public class JDBCTest01 {
    public static void main(String[] args) {
        //初始化界面(用户输入账号和密码)
        Map userLoginInfo = initUI();
        //验证用户名和密码(JDBC)
        boolean loginSuccess = login(userLoginInfo);
        //显示结果:
        System.out.println(loginSuccess==true?"登录成功":"登录失败");
    }

    
    private static boolean login(Map userLoginInfo) {
        //打标记(登录结果)
        boolean loginSuccess = false;

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            //1、注册驱动
            Class.forName("com.Mysql.cj.jdbc.Driver");
            //2、获取连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode",
                    "root","888");
            //3、获取数据库操作对象
            statement = connection.createStatement();
            //4、执行sql
            String sql = "select * from t_user where loginName = ""+userLoginInfo.get("loginName")+""" +
                    " and loginPwd = ""+userLoginInfo.get("loginPwd")+"" ";
            resultSet = statement.executeQuery(sql);
            //5、处理结果集
            //不需要while结果集,因为查询结果不是 无 就是 1条记录
            if (resultSet.next()){
                loginSuccess = true;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //从小到大分别关闭三个资源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
        //最后返回 登录结果(boolean)
        return loginSuccess;
    }

    
    private static Map initUI() {
        Scanner s=new Scanner(System.in);

        System.out.println("用户名:");
        String loginName = s.nextLine();

        System.out.println("密码:");
        String loginPwd = s.nextLine();

        //用 HashMap(键值对的方式)存储用户输入的 账号和密码
        Map userLoginInfo = new HashMap<>();
        userLoginInfo.put("loginName",loginName);
        userLoginInfo.put("loginPwd",loginPwd);

        return userLoginInfo;
    }
}
 

 

三.效果展示:

1.输入合法的用户名和密码:

点击查看
用户名:
abc
密码:
123
登录成功

Process finished with exit code 0
点击查看
用户名:
wwe
密码:
456
登录成功

Process finished with exit code 0

2.输入不合法的用户名和密码:

点击查看
用户名:
hahaha
密码:
123
登录失败

Process finished with exit code 0
 

 

四.SQL注入现象:

1.用户为:任意字符

  密码为:任意字符" or "1"="1

用户名:
yyds
密码:
yyds" or "1"="1
登录成功

Process finished with exit code 0

  当用户输入信息为这种情况时,也能登录成功,这种现象叫做 SQL注入现象;因为以上字符正好完成了sql语句的拼接,然后此(本不应该被编译的)sql语句被发送给DBMS,DBMS进行编译,这样正好把用户提供的"非法信息"编译进去,导致原sql语句的含义被扭曲了;

2.总结SQL注入的根本原因是:

用户输入的信息中含有sql语句的关键字,并且这些关键字参与sql语句的编译过程,导致sql语句的原意被扭曲,进而达到sql注入;

3.如何解决SQL注入问题? 

SQL注入问题根本在于"输入的非法信息"不应该被编译,所以只要让用户提供的信息不参与SQL语句的编译,就解决了问题,那么就必须使用 --- java.sql.PreparedStatement;

4.java.sql.PreparedStatement:

PreparedStatement 接口继承了 java.sql.PreparedStatement;

PreparedStatement 属于预编译的数据库对象;

PreparedStatement 的原理是:预先对SQL语句的框架进行编译,然后再给SQL语句传值;

 

改进后的登录系统代码:【JDBC】笔记(3)--- 提高用户登录功能的安全性 (javaSE+MySQL+JDBC)[ 应用 PreparedStatement ]

 

 

您可能感兴趣的文档:

--结束END--

本文标题: 【JDBC】笔记(2)-

本文链接: https://www.lsjlt.com/news/9037.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3-2笔记
    一.深复制和浅复制1.引用和赋值引用是一个值,指向某些数据列表引用是指向一个列表的值当你将列表赋给你一个变量时,实际上是将列表的‘引用’赋给了改变变量。id() : 在内存中一个独特的空间,相当于索引>>> a=[1,2,...
    99+
    2023-01-31
    笔记
  • Python学习笔记(2)
    Unicode字符串: GB2312编码为表示中文产生 python内部编码是unicode编码Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填0 就可以以Unicode表示的字...
    99+
    2023-01-31
    学习笔记 Python
  • Python学习笔记(2)
    Python开发IDE:pycharm   ,eclipse 快捷键:Ctrl+?整体注释 一·运算符   +(加)   -(减)  *(乘)   /(除)  **(幂)  %(余)   //(商)     判断某个东西是否在某个东西里边...
    99+
    2023-01-30
    学习笔记 Python
  • 2018-12-3python笔记(2.
    python的强大之处在于它有很多的模块和方法比如 string os sys 模块 模块是Python组织代码的基本方式。一个Python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module)...
    99+
    2023-01-31
    笔记 python
  • docker笔记2-docker介绍
        docker是基于go语言实现的云开源项目。    docker的主要目标是“Build,Ship and Run Any App,Anywher...
    99+
    2023-06-04
  • python3学习笔记(2)----p
    1、python3的基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。等号(=)用来给...
    99+
    2023-01-31
    学习笔记
  • 【gcc】RtpTransportControllerSend学习笔记 2
    在【gcc】RtpTransportControllerSend学习笔记 1 中, 跟着 大神ishen 从RtpTransportControllerSend 到cc-controller对gc...
    99+
    2023-10-07
    学习 笔记
  • JAVA学习笔记- - - day 2
     💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和大家一起进步成长💕 目录  💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和...
    99+
    2023-09-04
    学习
  • python进阶笔记【2】 --- 一
    我是在学习cs231n的assignment3的课程,发现里面的代码大量频繁出现了这个库,那我就很奇怪了,为什么有个future这个奇怪名字的库会出现呢?到底这个库又有什么用?下面就让我为你揭开。 总所周知,python3.x和pyt...
    99+
    2023-01-31
    进阶 笔记 python
  • Python学习笔记2——Python概
    Python概述   语言:交流的工具,沟通媒介   计算机语言:人跟计算机交流的工具,翻译官   Python是计算机语言里的一种     代码:人类语言,同过代码命令机器,跟机器交流     Python解释器: 就是那个担任翻译工作...
    99+
    2023-01-30
    学习笔记 Python
  • Linux学习笔记 Day 2~3
    继续整理周末课程的Linux学习笔记。 vim编辑器 最受欢迎的是emacs,vim是vi的增强版本,特点是编辑内容时有颜色变化。命令:vim /etc/passwd 三种模式: 1. 普通模式-->可视模式 2....
    99+
    2023-01-31
    学习笔记 Linux Day
  • python学习笔记2—python文件
    python学习笔记2——python文件类型、变量、数值、字符串、元组、列表、字典一、Python文件类型1、源代码python源代码文件以.py为扩展名,由pyton程序解释,不需要编译[root@localhost day01]# v...
    99+
    2023-01-31
    学习笔记 文件 python
  • Python第五周 学习笔记(2)
    一、实现一个cache装饰器,实现可过期被清除的功能 简化设计,函数的形参定义不包含可变位置参数、可变关键词参数和keyword-only参数 可以不考虑缓存满了之后的换出问题 1)原始 def cache(fn): imp...
    99+
    2023-01-31
    学习笔记 Python
  • Python学习笔记:第2天while循
    目录 1. while循环 continue、break和else语句 2. 格式化输出 3. 运算符 ...
    99+
    2023-01-30
    学习笔记 Python
  • 兔八哥笔记2:JavaScript Editor简介 (转)
    兔八哥笔记2:JavaScript Editor简介 (转)[@more@]最近因为使用domino开发一个政府OA系统,所以需要学习Javascript,用惯了Delphi这类工具的编辑器,但写JS却不知道有什么好工具可以减少我输入那些烦...
    99+
    2023-06-03
  • Python学习笔记(2)比特操作、类、
    下面的笔记内容依然来自于codecademy 比特操作注意一: 适用范围 Note that you can only do bitwise operations on an integer. Trying to do them on s...
    99+
    2023-01-31
    学习笔记 操作 Python
  • Java编程思想(2nd)学习笔记(8)-2 (转)
    Java编程思想(2nd)学习笔记(8)-2 (转)[@more@]二.  Inner classes(内隐类)1.  内隐类的基本用法1)  如果要在外围class的non-static函数之外产生一个inn...
    99+
    2023-06-03
  • Python学习笔记(2)操作符和数据类
    2019-02-25 一: (1)常用操作符:   ① 算数操作符:=、-、*、/、%(求余)、**(幂运算)、//(地板除法:计算结果取比商小的最大整型)   注意:幂运算操作符比其左侧的一元运算符的优先级高,比其右边的一元运算符优先级...
    99+
    2023-01-30
    学习笔记 操作 数据
  • python笔记之2.x上兼容3.x版本
    在前文《python笔记之3.x与2.x的使用区别》谈及了不同版本的区别问题。长远看软件新版本肯定会取代低版本的,除非你有成熟的老版本代码必须考虑兼容性问题,一般还是推荐新手学习新版本。 最近学习python,主要使用3.3版本,但看代码和...
    99+
    2023-01-31
    版本 笔记 python
  • python笔记之3.x与2.x的使用区
    python目前有两个分支:2.7.3和3.3.0,基本用法大同小异,但在个别细节上还是有出入的,具体看python.org网站。 个人感觉的差异有: 1、py3默认就是unicode,终于在写程序时可以不用再考虑中文...
    99+
    2023-01-31
    笔记 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作