一.创建所需对象,并进行初始化

Connection connection=null;
Statement statement=null;
PreparedStatement pst;
ResultSet rs=null;

二.加载mysql驱动

Class.forName("com.mysql.jdbc.Driver");

三.创建链接(url为数据库连接,root帐号,pwd密码)

connection=DriverManager.getConnection(url,root,pwd);

四.创建statement一般创建为预编形的即PreparedStatement,如果使用Statement会引起sql注入攻击,首先是一般的Statement:

statement=connection.createStatement();
String sql="select * from user where username='"+username+"'"+"and password='"+password+"'";
rs=statement.executeQuery(sql);
if(rs.next()){
response.getWriter().print("connection is ok");
}
else {
response.getWriter().print("用户名密码错误");
}

五.测试:1.输入正确帐号="张三",密码=1234;获得效果

 

2.输入错误帐号=12312,密码=1231234' or '1'='1;获得效果,并将sql语句打印出来

3.总结:这句sql相当与( select * from user)一般的stament会因为sql拼接的问题,可能会被恶意攻击,攻击者可以无需帐号密码即可登录,可甚至可以删除你的数据库。

六.使用PreparedStatement防止sql注入,增强安全性,而且他比statement的效率更高,因为它是预先编译好的sql语句,使用?来代表参数,通过pst.setString方法将值传入,

第一个参数代表是第几个?的位置(从1开始),第二个参数代表是参数值。

String sql="select * from user where username=? and password=?";
pst=connection.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, password);
System.out.println(pst.toString());
rs=pst.executeQuery();
if(rs.next())
{
response.getWriter().print("connection is ok");
}
else {
response.getWriter().print("用户名密码错误");
}

七.测试:输入错误帐号=12312,密码=1231234' or '1'='1(sql注入方法能否正常登录)

八.总结,为什么能防止sql,看打印出来的sql语句便可以知道,预编译的语句在执行时会自动转义一些字符,从而防止sql注入

JDBC连接mysql数据库操作的更多相关文章

  1. JDBC连接mysql数据库操作详解

    1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...

  2. jsp JDBC连接MySQL数据库操作标准流程参考

    1. 此案例以帐号密码后台更新维护为例子,对数据库调取数据更新流程进行演示: 代码示例: <%@page import="java.io.IOException"%> ...

  3. 使用JDBC连接MySQL数据库操作增删改查

    目录 1.首先这个Myeclipse的包名以及一些实现的类(这样子写是我的习惯) 2.接下来我们创建数据库(MySQL) 3.在数据库里面添加数据 4.首先是BaseDao,这个是重中之重,注意那个数 ...

  4. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  5. Crystal Reports 2008(水晶报表) JDBC连接mysql数据库

    在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用 ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. JDBC连接MySQL数据库及示例

      JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一 ...

  8. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  9. JDBC 连接mysql数据库

    JDBC 连接mysql数据库jar包:mysql-connector-java-5.1.47.jar 下载:mysql-connector-java-5.1.47.jar jdbc:java dat ...

随机推荐

  1. OC笔记一:Objective

    1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...

  2. 随机森林分类器(Random Forest)

    阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 袋外错误率(oob error) 6 随机森林工作原理解释的一个简单例子 7 随机森林的Pyth ...

  3. Android 联系人导入导出(VCard格式)

    之前在Android Contact 导入导出 vcf格式(不依赖第三方库)记录了一下依赖Android sdk中的功能导入导出联系人(第一次做java项目内容,有些地方的记录是否正确,暂时我也不知道 ...

  4. DDD中的值对象如何用NHibernate进行映射

    原文:DDD中的值对象如何用NHibernate进行映射 <component/>是NHibernate中一个有趣的特性,即是用来映射DDD(Data-Display-Debuger)概念 ...

  5. Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)

    Raknet是一个基于UDP网络传输协议的C++网络库,允许程序员在他们自己的程序中实现高效的网络传输服务.通常情况下用于游戏,但也可以用于其它项目. Raknet有以下好处: 高性能 在同一台计算机 ...

  6. C++Builder 中如何修改服务描述,使用ChangeServiceConfig2(SERVICE_CONFIG_DESCRIPTION)

    http://blog.csdn.net/jpexe/article/details/4296955 // ---------------------------------------------- ...

  7. Delphi xe5 StyleBook的用法(待续)

    首先要在FORM里拖进来一个StyleBook1,然后在Form里设置属性,记住一定要在单击form,在OBject Inspector里设置StyleBook  [StyleBook1]. 下一个属 ...

  8. CentOS7 firewall与iptables防火墙的使用与开放端口

    如何关闭firewall并开启iptables防火墙 如何使用firewall防火墙 如何关闭firewall并开启iptables防火墙 1.停止firewall systemctl stop fi ...

  9. Delphi 中 断言 Assert 用法

    procedure Assert(expr : Boolean [; const msg: string]); 用法:   Assert(表达式,[显示信息]); 如果为假, assert会产生一个E ...

  10. Qt浅谈之二:钟表(时分秒针)

    一.简介 QT编写的模拟时钟,demo里的时钟只有时针和分针,在其基础上添加了秒针,构成了一个完整的时钟.能对2D绘图中坐标系统.平移变换(translate).比例变换(scale).旋转变换(ro ...