MySQL-day06

JDBC

主要用于数据库与Java的连接

基本案例:

package cn.tedu.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

//测试jdbc案例
public class TestJDBC01 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        String url="jdbc:mysql://localhost:3306/user2";
        Connection c = DriverManager.getConnection(url, "root", "123");

        //3.获取传输器
        Statement s = c.createStatement();
        //4.执行SQL
        ResultSet r = s.executeQuery("select * from dept");
        //5.处理结果集
        while (r.next()){//next()判断有没有数据,有数据就返回true
            String a = r.getString(1);//获取第一列的数据
//            String b = r.getString("deptno");//获取指定字段的值
            String b = r.getString(2);
            String x = r.getString(3);
            System.out.println(a+" "+b+" "+x);
        }
        //6.释放资源
        //结果集
        r.close();
        // 传输器
        s.close();
        // 连接
        c.close();
    }
}

在执行SQL的语句时,当用户输入特殊符号后,可能会造成SQL注入攻击,例:用户名:jack'#

#在SQL中的意思是注释,会导致用户只用输入账号就能登录成功

SQL注入攻击的解决方案

不使用Statement传输器,使用PreparedStatement传输器

Statement传输器:低效,不安全

PreparedStatement传输器:高效,安全

PreparedStatement传输器会先加载SQL骨架,并且每个字段的值都是分开赋值且只能替代“?”,当传入#时,不会在产生注销的效果

 Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/user2?characterEncoding=utf8";
        //获取数据库的连接
        Connection c = DriverManager.getConnection(url, "root", "123");
        //获取传输器
        String a=new Scanner(System.in).nextLine();
        String b=new Scanner(System.in).nextLine();
        String sql="select * from user where name=? and password=?";
        PreparedStatement ps = c.prepareStatement(sql);
        ps.setString(1,a);
        ps.setString(2,b);
        //执行SQL
        ResultSet r = ps.executeQuery();
         if (r.next()){
            System.out.println("登陆成功");
        }else{
            System.out.println("登录失败");
        }
        r.close();
        ps.close();
        c.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值