JavaWeb篇之一——使用原生JDBC对数据库进行操作
引言
在接触JDBC之前,我们的数据都是自己做得,也叫假数据,而实际开发过程中需要我们去操作的数据一般都存放在数据库中,今天我先以mysql作为例子为大家演示一下原生JDBC的操作流程。
JDBC
什么是JDBC:Java Data Base Connectivity:(Java数据库连接) JDBC是Java访问数据库的标准规范。
JDBC的好处
- 我们只需要会调用JDBC接口中的方法即可,使用简单
- 使用同一套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对数据库进行操作相关推荐
- Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
文章目录 一.Apache-DBUtils简介 二.主要API的使用 1.DbUtils类 2.QueryRunner类 3.ResultSetHandler接口及实现类 三.Apache-DBUti ...
- javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD
javaweb学习总结(三十三)--使用JDBC对数据库进行CRUD 一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过 ...
- 《JavaWeb篇》02.JDBC看这一篇就够了
JDBC 陈老老老板 说明:在整体的复习一遍知识,边复习边总结,基础真的重要,需要注意的地方都标红了,还有资源的分享. 一起加油. 资源分享:看的黑马的视频,老师讲的特别好: 视频链接:黑马JavaW ...
- (Java实习生)每日10道面试题打卡——JavaWeb篇
临近秋招,备战暑期实习,祝大家每天进步亿点点!打卡 Day05! 本篇总结的是javaweb相关的面试题,后续会每日更新~ 剧透:明日更新 JVM 面试题,相关知识不牢固的先去补一补哦 O(∩_∩)O ...
- Spring实战6-利用Spring和JDBC访问数据库
主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...
- 2019尚硅谷大数据Javaweb篇三 Ajax、JSTL、会话技术、过滤器、监听器、xml、json
2019尚硅谷大数据 Javaweb篇三Ajax.JSTL.会话技术.过滤器.监听器 tags: 大数据 2019尚学堂 categories: Ajax异步请求 JSTL中的if和forEach 会 ...
- 使用Spring JDBC框架连接并操作数据库
在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作 ...
- 使用iOS原生sqlite3框架对sqlite数据库进行操作
摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...
- 使用JDBC进行数据库的事务操作(2)
本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...
最新文章
- 关于epel源的配置
- Mongodb的的增删改查
- linux中文乱码的解决
- 【ubuntu】ubuntu16.04的虚拟机突然打不开terminal了
- 前端学习(3306):函数组件usermemo和usercallback二
- 广州计算机自考独立办学,广东省06年自学考试独立办班广州考点办学计划的通知...
- 8255数码管显示0到9_汇编语言--键盘扫描及显示实验(含代码解释)
- 聚类算法_案例实战:聚类实战
- python的django框架http请求_python django框架(一)
- APP自动化测试系列之Desired Capabilities详解
- lesson3 Qt Signal and slots (QSlider and QProgressBar)
- 东财mysql作业_20春东财《MySQL数据库系统及应用》单元作业三(答案100分)
- adb shell screencap/screenrecord(三级命令)
- 【方差分析】之matlab求解
- 《ERP原理》期末复习——第四章 基础数据
- Windows 10 21H2 版本微软拼音全拼和双拼的快速切换
- 防止号码丢失之电话簿云端备份
- Tic tac toe井字棋游戏python实现
- 泰安中专学校计算机专业,泰安市岱岳区职业中等专业学校
- 云计算--Docker在Ubuntu上安装