JDBC复习-基础
发布日期:2022-02-10 08:11:16
浏览次数:18
分类:技术文章
本文共 4141 字,大约阅读时间需要 13 分钟。
此博客仅为本人学习JDBC时所做记录。
JDBC复习
01-JDBC概述
1.1 数据的持久化:
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。
1.2 JDBC的理解:
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)
简单理解为:JDBC,是SUN提供的一套接API,使用这套API可以实现对具体数据库的操作(获取连接、关闭连接、DML、DDL、DCL)
1.3 图示理解:
好处:
从开发程序员的角度:不需要关注具体的数据库的细节
数据库厂商:只需要提供标准的具体实现
1.4 数据库的驱动:
数据库厂商针对于JDBC这套接口,提供的具体实现类的集合。
类似:
1.5 面向接口编程的思想
JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。
不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。
02-数据库的连接
2.1 数据库连接最终实现方法:
/** * @Description 获取数据库的连接 * @Author oo * @return * @Date 2020-12-17 19:04 * @throws Exception */ public static Connection getConnection() throws Exception { // 1.读取配置文件中的4个基本信息 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); Properties pros = new Properties(); pros.load(is); String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverClass = pros.getProperty("driverClass");// 2.获取驱动 Class.forName(driverClass);// 3.获取连接 Connection conn = DriverManager.getConnection(url,user,password); return conn; }
2.2 配置文件说明
其中,配置文件 jdbc.properties
:此配置文件声明在工程的 src
下 。
说明:
- password为你的数据库账户的密码。
- 此url以及driverClass的设置对应于mysql8.0版本。
user=rootpassword=*****url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=truedriverClass=com.mysql.cj.jdbc.Driver
03-JDBCUtil.java
package com.oo.util;/** * @Description 操作数据库的工具类 * @Author oo * @Version * @Date 2020-12-17 19:04 */public class JDBCUtils { /** * @Description 获取数据库的连接 * @Author oo * @return * @Date 2020-12-17 19:04 * @throws Exception */ public static Connection getConnection() throws Exception { // 1.读取配置文件中的4个基本信息 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); Properties pros = new Properties(); pros.load(is); String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverClass = pros.getProperty("driverClass");// 2.获取驱动 Class.forName(driverClass);// 3.获取连接 Connection conn = DriverManager.getConnection(url,user,password); return conn; } /** * @Description 关闭连接和Statement的操作 * @param conn * @param ps */ public static void closeResource(Connection conn, Statement ps){ try { if(ps != null) ps.close(); } catch (SQLException e) { e.printStackTrace(); } try { if(conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } /** * @Description 关闭资源操作 * @param conn * @param ps * @param rs */ public static void closeResource(Connection conn, Statement ps,ResultSet rs){ try { if(ps != null) ps.close(); } catch (SQLException e) { e.printStackTrace(); } try { if(conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } try { if(rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } }}
04-Statement接口实现CRUD操作(了解)
4.1 弊端
-
问题一:存在拼串操作,繁琐
Scanner scanner = new Scanner(System.in);String user = scanner.next();......String sql = "SELECT user,password FROM user_table WHERE user='"+ user +"' AND password= '" + password + "'";
-
问题二:存在SQL注入问题
SQL 注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令(如:SELECT user, password FROM user_table WHERE user=‘a’ OR 1 = ’ AND password = ’ OR ‘1’ = ‘1’) ,从而利用系统的 SQL 引擎完成恶意行为的做法。
SELECT user,password FROM user_table WHERE user='1' or ' AND password= '=1 or '1' = '1' //传入的user:1' or password:=1 or '1' = '1
-
其他问题
- statement没办法操作Blob类型变量
- statement实现批量插入时,效率较低
转载地址:https://blog.csdn.net/qq_45717064/article/details/111465411 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月21日 23时46分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tensorflow环境准备
2021-06-29
julia-Char字符String字符串(第7讲)
2021-06-29
Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)
2021-06-29
时间如漏斗
2019-04-26
自学编程,我该如何寻找自学资源?(含视频)
2019-04-26
android su程序分析
2019-04-26
android Superuser.apk源码分析
2019-04-26
Android从触碰屏幕开始的事件采集,解析及分发(1)
2019-04-26
福利来袭,免费获取 Android 开发资料以及直播课程
2019-04-26
优势丧失
2019-04-26
【上市啦】“Python 之父” 力荐的蓝皮书,你知道是哪本吗?
2019-04-26
Python 爬虫面试题 170 道:2019 版
2019-04-26
歪门邪道
2019-04-26
我的前六年程序生涯
2019-04-26
知识地图
2019-04-26
罗马总会建成
2019-04-26
程序通过技术赚钱的八个途径
2019-04-26
我在爬坡阶段
2019-04-26
大疆机甲大师教育机器人Python开发:中文命名变量初尝试
2019-04-26
大疆机甲大师教育机器人Python开发:API中文化初尝试
2019-04-26