首页
学习
活动
专区
圈层
工具
发布

使用 JDBC 完成登录案例 以及 SQL 注入问题

使用 JDBC 完成登录案例 以及 SQL 注入问题 前言 在前面的章节中,我们已经学会了使用 statement 来执行数据库的 增删查改 的操作,并且封装一个 JDBC 工具类,实现了数据库连接获取...下面我们来使用 statement 来实现一个简单的用户登录案例,并且引出一个 SQL 注入的问题。...工具类优化 * 把四个参数(驱动,路径,用户名,密码)抽取成 jdbc.properties * 在static{}里面读取jdbc.properties, 给变量赋值 *...根据用户名和密码查询数据库 封装成User对象 判断是否登录成功(判断User是否为null) 5.使用 statement 执行SQL,则会出现 SQL 注入的问题 5.1 SQL注入问题出现 当输入的密码...那么该怎么解决这个问题呢?我们将会在下一个章节,使用 preparedStatement 解决 SQL 注入的问题。

67520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JDBC【4】-- jdbc预编译与拼接sql对比

    在jdbc中,有三种方式执行sql,分别是使用Statement(sql拼接),PreparedStatement(预编译),还有一种CallableStatement(存储过程),在这里我就不介绍CallableStatement...,将含有占位符的sql当参数传进去,获取到PreparedStatement预编译的对象,最后是通过set来绑定参数,然后再去使用execute执行预编译过的代码。...这样就避免了sql注入的问题,同时,由于sql已经编译过缓存在数据库中,所以执行起来不用再编译,速度就会比较快。...4.为什么预编译可以防止sql注入 在使用占位符,或者说参数的时候,数据库已经将sql指令编译过,那么查询的格式已经订好了,也就是我们说的我已经明白你要做什么了,你要是将不合法的参数传进去,会有合法性检查...这样的好处查询速度提高,因为有了预编译缓存,方便维护,可读性增强,不会有很多单引号双引号,容易出错,防止大部分的sql注入,因为参数和sql指令部分数据库系统已经区分开。

    95400

    JDBC【5】-- JDBC预编译和拼接Sql对比

    在jdbc中,有三种方式执行sql,分别是使用Statement(sql拼接),PreparedStatement(预编译),还有一种CallableStatement(存储过程),在这里我就不介绍CallableStatement...,将含有占位符的sql当参数传进去,获取到PreparedStatement预编译的对象,最后是通过set来绑定参数,然后再去使用execute执行预编译过的代码。...这样就避免了sql注入的问题,同时,由于sql已经编译过缓存q起来,所以执行起来不用再编译,速度就会比较快。...4.为什么预编译可以防止sql注入 在使用占位符,或者说参数的时候,数据库已经将sql指令编译过,那么查询的格式已经订好了,也就是我们说的我已经明白你要做什么了,你要是将不合法的参数传进去,会有合法性检查...这样的好处查询速度提高,因为有了预编译缓存,方便维护,可读性增强,不会有很多单引号双引号,容易出错,防止大部分的sql注入,因为参数和sql指令部分数据库系统已经区分开。

    1.6K40

    高级性能测试系列《25. jdbc:sql中,两种带参数的写法。》

    二、sql中,两种带参数的写法。 1.直接在sql中,进行变量引用 ${var},但是不推荐。 2.用?作为变量占位符。 ====推荐。 三、补充 一、注意事项。...不要想着在一个sql query中写多个sql,要写多个sql就用多个jdbc request。默认不支持一个sql query中写多个sql。 3.sql语句:增删改查。...带有 prepared开头,是脚本中可以带有参数。 二、sql中,两种带参数的写法。 1.直接在sql中,进行变量引用 ${var},但是不推荐。...这样就出现sql注入了。 2.用?作为变量占位符。 ====推荐。 用?可以防止sql注入。 单个参数: 图1:测试计划。...图1:运行结果 多个参数: 图2:测试计划 query type:prepared select statement 图2:配置jdbc request。 图2:运行结果。

    1.1K10

    JDBC 通过PreparedStatement 解决SQL注入(5)

    这是一个post请求,登录时调用接口test.com/sql/login.html,sql的查询过程:首先连接数据库,然后后台对post请求参数中的用户名、密码进行参数校验。...因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时,只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。...class MyTest{ // 更新 删除 添加 public void testPreparedStatement(){ Class.forName("com.mysql.jdbc.Driver..."); String url = "jdbc:mysql://localhost:3306/mydb"; Connection connection = null;..."); String url = "jdbc:mysql://localhost:3306/mydb"; String username = "user";

    2.2K10

    JDBC:PreparedStatement预编译执行SQL语句

    Statement的execute系列方法直接将SQL语句作为参数传入并提交给数据库执行;          ii. 也就是说每提交一次都需要先经过编译然后再执行;          iii....那么有一个最大的问题就是如果一条SQL语句需要再短时间内被反复执行,那么每次都需要经过编译这样不是效率非常非常低吗?? !!可能你会问哪有需要反复大量执行的相同语句呢?...使用PreparedStatement的execute系列方法即可,和Statement的execute系列方法相对应,只不过无需SQL语句参数了,因为已经存在预编译的SQL语句了,因此都是无参的,就表示直接提交执行...这最主要是由于不带占位符的拼接必须要用单引号'来包裹SQL字符串,而占位符的填写无需单引号,JDBC会自动将Java变量转换成纯字符串然后再自动加上SQL单引号填入占位符中,即使填入的变量是String...str = "'Lala'",那么JDBC也会将其中的单引号' '转化成纯字符单引号处理,而不会被当做SQL的特殊字符单引号'来处理,因为在SQL中单引号'是字符串常量符号!

    2.8K20

    Java jdbc-PreparedStatement防止sql注入

    PreparedStatement防止sql注入 在之前的一篇文章当中,写了java jdbc,mysql数据库连接的一篇文章,文章中包含了对于mysql的增改删查操作Java jdbc Mysql数据库连接...使用createStatement获取数据库操作对象,然后紧接着使用executeQuery(sql),直接传递sql语句,会有sql注入的风险,要是别人在传递的参数值处填写sql语句,会影响安全性能。...PreparedStatement的作用: 预编译SQL并执行SQL语句。 使用方法 ①获取PreparedStatement对象 //Sql语句中的参数值用?...;" //通过connection对象获取,并传入对应的sql语句 PreparedStatement pstmt = conn.preparedStatement(sql); ②设置参数值 PreparedStatement...对象.setXxx(参数1,参数2);//给?

    1.3K60
    领券