JavaWeb篇之一——使用原生JDBC对数据库进行操作

引言

在接触JDBC之前,我们的数据都是自己做得,也叫假数据,而实际开发过程中需要我们去操作的数据一般都存放在数据库中,今天我先以mysql作为例子为大家演示一下原生JDBC的操作流程。

JDBC

什么是JDBC:Java Data Base Connectivity:(Java数据库连接) JDBC是Java访问数据库的标准规范。

JDBC的好处

  1. 我们只需要会调用JDBC接口中的方法即可,使用简单
  2. 使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库

步骤一:使用图形化工具往mysql中填充数据

1.建立连接
点击工具栏的连接图标
在这里插入图片描述
因为是本地连接,所以是填入以下内容
在这里插入图片描述
之后就可以在此连接下创建表和填数据了
在这里插入图片描述
以下是sql语句

create table KamenRider(
ridername VARCHAR(10),
username VARCHAR(10)
)

INSERT into KamenRider(ridername,username) VALUES("build","桐生战兔")
INSERT into KamenRider(ridername,username) VALUES("ex-aid","宝生永梦")
INSERT into KamenRider(ridername,username) VALUES("zi-o","常磐庄吾")

在这里插入图片描述

步骤二:在java文件中完成对数据库数据的访问

主要有以下几步:
1.注册驱动
2.获取连接对象
3.获取sql语句对象
4.执行sql语句
5.处理执行结果
6.释放资源(关流操作)
但!在操作之前我们要导入数据库的包
这里我用的是maven管理依赖,所以具体导包过程大家可以去查一下,我就不演示了
接下来就是对数据库就行最简单的查询数据测试

  public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接对象并连接数据库
        String url = "jdbc:mysql:///demo";
        String username = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, username, password);
        //获取语句对象并执行
        Statement statement = connection.createStatement();
        String sql = "select * from KamenRider";
        //处理执行结果
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()) {
            System.out.println(resultSet.getString("ridername") + ":" + resultSet.getString("username"));
        }
        //释放资源
        statement.close();
    }

在这里插入图片描述
原生JDBC的缺陷
但是这种原生JDBC方式特别繁锁,基本上每一个sql执行语句都需要这样一大长串,而且还会有sql注入的情况出现

sql注入情况

我们现在做一个功能:只有当ridername和username同时存在于数据库中才能打印变身

public static void main(String[] args) throws Exception {
    //注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //获取连接对象并连接数据库
    String url = "jdbc:mysql:///demo";
    String username = "root";
    String password = "root";
    Connection connection = DriverManager.getConnection(url, username, password);
    //获取语句对象并执行
    Statement statement = connection.createStatement();

    System.out.println("请输入骑士名");
    Scanner scanner = new Scanner(System.in);
     String s1 = scanner.nextLine();

    System.out.println("请输入使用者名");
    Scanner scanner1 = new Scanner(System.in);
    String s2 = scanner.nextLine();

    String sql = "select * from KamenRider WHERE ridername='"+s1+"' AND username='"+s2+"'";
    //处理执行结果
    ResultSet resultSet = statement.executeQuery(sql);
   if (resultSet.next()){
       System.out.println("变身成功");
   }else{
       System.out.println("变身失败");
   }
    //释放资源
    statement.close();
}

测试结果:
在这里插入图片描述
在这里插入图片描述
效果很理想但是!当我们做如下操作时
在这里插入图片描述
我们可以看到原本数据库中不存在的假面骑士也变身成功了,这种现象就叫sql注入,本质上是改变了最后执行的sql语句

下篇预告

下一篇我将就sql注入问题阐述一下具体产生过程,并解决该问题,最后再使用连接池和创建JDBC工具类对原生JDBC进行优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值