栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL数据库笔记Day6

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL数据库笔记Day6

一JDBC

1,概述

sun公司提供的一套 java操作数据库的标准
专门用来完成 java 和 数据库 交互的技术,全称是: java database connectivity

2,使用步骤 

1, 提供了丰富的工具类jar包,项目中导入jar包


2, 连接数据库: 端口号3306 库名cgb2109 用户名root 密码root


3, 写SQL


4, 处理数据库返回给java的结果



3,导入jar包


1,选用哪个版本的jar包,要看你安装的数据库的版本

 2,导入jar包

 4,案例
import org.junit.Test;

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

public class Test1 {
    //junit 单元测试:@Test public void  没有参数
    //需求:利用java查询数据库中dpet表的所有数据
    @Test
    public void get() throws Exception {
        //1.注册驱动 --利用反射获取Driver
      //  Class.forName("com.mysql.jdbc.Driver");//5版本的jar包
        //Class.forName("com.mysql.cj.jdbc.Driver");//8版本的jar包
        //2.连接数据库,并返回了数据库的连接,就返回Connection
        String url = "jdbc:mysql://localhost:3306/cgb210901";
        //遵循的协议://本机ip地址:端口号/数据库名
        Connection c = DriverManager.getConnection(url, "root", "root");
        //3.获取传输器
        Statement s = c.createStatement();
        //4.执行SQL语句
        //需求:利用java查询数据库中dpet表的所有数据
        ResultSet r = s.executeQuery("select * from dept");//执行查询的SQL
        //s.executeQuery(执行增删改的SQL语句)
        //最后集合:ResultSet
        //5.处理结果
        while (r.next()){//next()判断
            //getXxx()获取不同类型的数据
            //r.getInt(1);//根据列的编号获取列的值
            int a=r.getInt(1);//根据列名获取列的值
            String b=r.getString(2);
            String loc =r.getString(3);
            System.out.println(a+b+"t"+loc);
        }
        //6.释放资源
        r.close();
        s.close();
        c.close();
        System.out.println("java和数据库连接成功");


    }

二,JDBC的练习 
 //需求:查询courses表的所有数据
    @Test
    public  void   get () throws Exception {
        //1.注册驱动 --参数是类的全路径
        Class.forName("com.mysql.jdbc.Driver");
        //2.连接数据库,并返回了数据库的连接Connection
        String url="jdbc:mysql://localhost:3306/cgb2109test?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "root");
        //3.获取传输器
        Statement s = c.createStatement();
        //4.执行SQL
        ResultSet r = s.executeQuery("select * from courses");
        //5.处理器结果
        while (r.next()){
            //表里有三列,循环三次就行
            for (int i = 1; i <4 ; i++) {
                //获取数据getXxx()--getObject()更通用可以获取任意类型的依据
                r.getObject(i);//i是列的索引1.2.3..列
                System.out.println(r.getString(i));
            }
            r.getObject(1);
            r.getObject(2);
            r.getObject(3);
        }
        //6.释放资源
        r.close();
        s.close();
        c.close();
    }

 2,向表中插入数据
//测试
public class Test2 {
    //1.注册驱动 --参数是类的全路径
    @Test
    public void  add() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        //2.连接数据库,并返回了数据库的连接Connection
        String url="jdbc:mysql://localhost:3306/cgb210901?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "root");
        //3.获取传输器
        Statement s = c.createStatement();
        //4.执行SQL
        int rows = s.executeUpdate("insert into dept value (null ,'java开发',"北京")");
        //5.处理器结果
        //查询,会把结果返回给ResultSet 需要遍历...
        //增删该,会返回对数据库的影响行数..通常不处理
        //6.释放资源
        s.close();
        c.close();
    }

 3,模拟用户登录
1, 让用户输入用户名 和 密码
2, 在数据库里 准备表
CREATE TABLE `user` (
   `id` int(11) NOT NULL auto_increment,
   `name` varchar(20) default NULL,
   `pwd` varchar(10) default NULL,
   PRIMARY KEY  (`id`)
 ) 
3, 利用JDBC查库,发起select语句  select * from user where name=‘jack’ and password=‘123’
//模拟用户登录
    //模拟用户登录
    @Test
    public void login() throws Exception{
        //1,注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2,连接数据库
        String url="jdbc:mysql://localhost:3306/cgb2109test?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "root");
        //3,获取传输器
        Statement s = c.createStatement();
        //4,执行SQL
        String sql="select * from user where name='jack' and pwd='123'";
        ResultSet r = s.executeQuery(sql);
        //5,处理结果
        if( r.next() ){//判断有数据吗?如果有数据就可以登录
            System.out.println("登录成功!");
        }else{//没数据,重新输入或去注册
            System.out.println("登录失败,请重新输入或去注册!");
        }
        //6,释放资源
        r.close();
        s.close();
        c.close();
    }
}

 三,SQL攻击

1,模拟SQL攻击的现象--(面试会问)

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

   public static void main(String[] args) throws Exception {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.连接数据库
            String ulr = "jdbc:mysql://localhost:3306/cgb2109test?characterEncoding=utf8";
            Connection c = DriverManager.getConnection(ulr, "root", "root");
            //3.获取传输器
            Statement s = c.createStatement();
            //4.执行SQL
            System.out.println("请输入用户名");
            String username = new Scanner(System.in).nextLine();
            System.out.println("请输入用户密码");
            String password = new Scanner(System.in).nextLine();
            String sql = "select * from user where  name='" + username + "'and pwd='" + password + "' ";
            ResultSet r = s.executeQuery(sql);
            if (r.next()) {
                System.out.println("登录成功");
            } else {
                System.out.println("登录失败");
            }
            r.close();
            s.close();
            c.close();
            //5.处理结果
            //6.释放资源
        }

 漏洞: 当执行时在用户名称后放入'#号,那可以直接跳过后续,自动登录,因为'#号在MySQL数据库中表示为注释的符号,跟java中//,功能一致
 eg:  测试:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434735.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号