热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JDBC简化写法和Sql攻击及解决方案

循环打印:packagecn.tedu.jdbc;importcom.mysql.jdbc.Driver;importorg.junit.Test;importj

循环打印:

package cn.tedu.jdbc;import com.mysql.jdbc.Driver;
import org.junit.Test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class Test2 {&#64;Testpublic void get() throws Exception {Class.forName("com.mysql.jdbc.Driver");String url &#61; "jdbc:mysql://localhost:3306/cgb2109?characterEncoding&#61;utf8&serverTimezone&#61;Asia/Shanghai&useSSL&#61;false";Connection c &#61; DriverManager.getConnection(url,"root","root");Statement s &#61; c.createStatement();ResultSet r &#61; s.executeQuery("select * from courses");while (r.next()){for (int i &#61; 1; i < 4; i&#43;&#43;) {Object o &#61; r.getObject(i);System.out.println(o);}// String a &#61; r.getString(1);
// String s1 &#61; r.getString(2);
// int a1 &#61; r.getInt(3);
// System.out.println(a&#43;s1&#43;a1);}r.close();s.close();c.close();}
}

getObject 过去object对象&#xff0c;遍历打印

while (r.next()){for (int i &#61; 1; i < 4; i&#43;&#43;) {Object o &#61; r.getObject(i);System.out.println(o);}}

注意事项&#xff1a;

sql攻击&#xff1a;
//1,本质上就是因为SQL中出现了特殊符号#,#号在SQL中是注释的意思(测试时使用固定的用户名jack’#)
//2,Statement传输器在执行SQL时遇到了SQL拼接,把#当做了注释用!!

在这里插入图片描述

解决方法&#xff1a;
1.将传输器注释掉。
2. 改写sql语句&#xff1a;String &#61; “select * from user where name&#61;? and pwd&#61;?”;
3. //准备执行预编译的sql
PreparedStatement s &#61; c.prepareStatement(sql);
4. //设置sql中的参数
s.setObject(1,username); //第一个&#xff1f;设置值username
s.setObject(2,password); //第二个&#xff1f;设置值password

完整代码

package cn.tedu.jdbc;import org.junit.Test;import java.sql.*;
import java.util.Arrays;
import java.util.Scanner;public class Test4 {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection c &#61; DriverManager.getConnection("jdbc:mysql://localhost:3306/cgb2109","root","root");// Statement s &#61; c.createStatement();System.out.println("请输入用户名");String username &#61; new Scanner(System.in).next();System.out.println("请输入密码");String password &#61; new Scanner(System.in).next();// ResultSet r &#61; s.executeQuery("select * from user where name&#61;&#39;"&#43;username&#43;"&#39; and pwd&#61;&#39;"&#43;password&#43;"&#39;");/**sql骨架&#xff1a;&#xff1f;叫占位符*/String sql &#61; "select * from user where name&#61;? and pwd&#61;?";//准备执行预编译的sqlPreparedStatement s &#61; c.prepareStatement(sql);//设置sql中的参数s.setObject(1,username);//第一个&#xff1f;设置值usernames.setObject(2,password);//第二个&#xff1f;设置值passwordResultSet r &#61; s.executeQuery();if (r.next()){System.out.println("登陆成功");}else{System.out.println("登录失败&#xff0c;请重新登录&#xff01;");}r.close();s.close();c.close();}
}


推荐阅读
  • 浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Mybatis拦截器实现数据权限的示例代码
    在我们日常开发过程中,通常会涉及到数据权限问题,本文主要介绍了Mybatis拦截器实现数据权限的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • kettle 8.3 连接mysql8.0.30 的入坑体验
      写这个东西主要是想吐槽为主,真的无语了。  kettle是java写的java版权是oracle的。mysql是Oracle的。   吐槽:  一般来说,在kettle中新建m ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 目录1、将mysql数据导出到SQL文件中(数据库存在的情况)2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件1)从 ... [详细]
  • mysqldinitializeconsole失败_mysql03误删除了所有用户解决办法
    误删除了所有用户解决办法第一种方法(企业常用)1.将数据库down掉[rootdb03mysql]#etcinit.dmysqldstopShuttingdownMySQL..SU ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
author-avatar
zqb_0125
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有