引言

在接触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进行优化

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

  1. Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作

    文章目录 一.Apache-DBUtils简介 二.主要API的使用 1.DbUtils类 2.QueryRunner类 3.ResultSetHandler接口及实现类 三.Apache-DBUti ...

  2. javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD

    javaweb学习总结(三十三)--使用JDBC对数据库进行CRUD 一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过 ...

  3. 《JavaWeb篇》02.JDBC看这一篇就够了

    JDBC 陈老老老板 说明:在整体的复习一遍知识,边复习边总结,基础真的重要,需要注意的地方都标红了,还有资源的分享. 一起加油. 资源分享:看的黑马的视频,老师讲的特别好: 视频链接:黑马JavaW ...

  4. (Java实习生)每日10道面试题打卡——JavaWeb篇

    临近秋招,备战暑期实习,祝大家每天进步亿点点!打卡 Day05! 本篇总结的是javaweb相关的面试题,后续会每日更新~ 剧透:明日更新 JVM 面试题,相关知识不牢固的先去补一补哦 O(∩_∩)O ...

  5. Spring实战6-利用Spring和JDBC访问数据库

    主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...

  6. 2019尚硅谷大数据Javaweb篇三 Ajax、JSTL、会话技术、过滤器、监听器、xml、json

    2019尚硅谷大数据 Javaweb篇三Ajax.JSTL.会话技术.过滤器.监听器 tags: 大数据 2019尚学堂 categories: Ajax异步请求 JSTL中的if和forEach 会 ...

  7. 使用Spring JDBC框架连接并操作数据库

    在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作 ...

  8. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  9. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

最新文章

  1. 关于epel源的配置
  2. Mongodb的的增删改查
  3. linux中文乱码的解决
  4. 【ubuntu】ubuntu16.04的虚拟机突然打不开terminal了
  5. 前端学习(3306):函数组件usermemo和usercallback二
  6. 广州计算机自考独立办学,广东省06年自学考试独立办班广州考点办学计划的通知...
  7. 8255数码管显示0到9_汇编语言--键盘扫描及显示实验(含代码解释)
  8. 聚类算法_案例实战:聚类实战
  9. python的django框架http请求_python django框架(一)
  10. APP自动化测试系列之Desired Capabilities详解
  11. lesson3 Qt Signal and slots (QSlider and QProgressBar)
  12. 东财mysql作业_20春东财《MySQL数据库系统及应用》单元作业三(答案100分)
  13. adb shell screencap/screenrecord(三级命令)
  14. 【方差分析】之matlab求解
  15. 《ERP原理》期末复习——第四章 基础数据
  16. Windows 10 21H2 版本微软拼音全拼和双拼的快速切换
  17. 防止号码丢失之电话簿云端备份
  18. Tic tac toe井字棋游戏python实现
  19. 泰安中专学校计算机专业,泰安市岱岳区职业中等专业学校
  20. 云计算--Docker在Ubuntu上安装

热门文章

  1. [Render] 适用于高级Unity创作者的通用渲染管线[4] - URP中的光照
  2. 《CLR via C#》读书笔记---07 常量和字段
  3. 美国知乎热议: 关于CS专业, 有哪些你不知道的内幕
  4. OFFICE常见问题解答
  5. 三年级计算机的组成教学设计,三年级计算机教学设计.docx
  6. 汇顶数字设计验证笔试题
  7. 虚幻四视角移动与场景搭建
  8. 每日一题-917. 仅仅反转字母_Python
  9. Back Track5使用整理(一)
  10. Arcgis处理栅格数据中Nodata值