JDBC--Java Database Connectivity
1.JDBC:Java DataBase Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式,用Java来操作数据库
2.JDBC API 主要功能:
三件事,具体是通过以下类/接口实现:
DriverManager : 管理jdbc驱动
Connection: 连接(通过DriverManager产生)
Statement(PreparedStatement) :增删改查 (通过Connection产生 )
CallableStatement : 调用数据库中的 存储过程/存储函数 (通过Connection产生 )
Result :返回的结果集 (上面的Statement等产生 )
Connection产生操作数据库的对象:
Connection产生Statement对象:createStatement()
Connection产生PreparedStatement对象:prepareStatement()
Connection产生CallableStatement对象:prepareCall();
Statement操作数据库:
增删改:executeUpdate()
查询:executeQuery();
ResultSet:保存结果集 select * from xxx
next():光标下移,判断是否有下一条数据;true/false
previous(): true/false
getXxx(字段名|位置):获取具体的字段值
PreparedStatement操作数据库:
public interface PreparedStatement extends Statement
因此
增删改:executeUpdate()
查询:executeQuery();
--此外
赋值操作 setXxx();
PreparedStatement与Statement在使用时的区别:
1.Statement:
sql
executeUpdate(sql)
2.
PreparedStatement:
sql(可能存在占位符?)
在创建PreparedStatement 对象时,将sql预编译 prepareStatement(sql)
executeUpdate()
setXxx()替换占位符?
推荐使用PreparedStatement:原因如下:
1.编码更加简便(避免了字符串的拼接)
String name = "zs" ;
int age = 23 ;
stmt:
String sql =" insert into student(stuno,stuname) values('"+name+"', "+age+" ) " ;
stmt.executeUpdate(sql);
pstmt:
String sql =" insert into student(stuno,stuname) values(?,?) " ;
pstmt = connection.prepareStatement(sql);//预编译SQL
pstmt.setString(1,name);
pstmt.setInt(2,age);
2.提高性能(因为 有预编译操作,预编译只需要执行一次)
需要重复增加100条数
stmt:
String sql =" insert into student(stuno,stuname) values('"+name+"', "+age+" ) " ;
for(100)
stmt.executeUpdate(sql);
pstmt:
String sql =" insert into student(stuno,stuname) values(?,?) " ;
pstmt = connection.prepareStatement(sql);//预编译SQL
pstmt.setString(1,name);
pstmt.setInt(2,age);
for( 100){
pstmt.executeUpdate();
}
3.安全(可以有效防止sql注入)
sql注入: 将客户输入的内容 和 开发人员的SQL语句 混为一体
stmt:存在被sql注入的风险
(例如输入 用户名:任意值 ' or 1=1 --
密码:任意值)
分析:
select count(*) from login where uname='任意值 ' or 1=1 --' and upwd ='任意值' ;
select count(*) from login where uname='任意值 ' or 1=1 ;
select count(*) from login ;
select count(*) from login where uname='"+name+"' and upwd ='"+pwd+"'
pstmt:有效防止sql注入
推荐使用pstmt
3.jdbc访问数据库的具体步骤:
a.导入驱动,加载具体的驱动类
b.与数据库建立连接
c.发送sql,执行
d.处理结果集 (查询)
4.
数据库驱动
驱动jar 具体驱动类 连接字符串
Oracle ojdbc-x.jar oracle.jdbc.OracleDriver jdbc:oracle:thin:@localhost:1521:ORCL
MySQL mysql-connector-java-x.jar com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/数据库实例名
SqlServer sqljdbc-x.jar com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:microsoft:sqlserver:localhost:1433;databasename=数据库实例名
使用jdbc操作数据库时,如果对数据库进行了更换,只需要替换:驱动、具体驱动类、连接字符串、用户名、密码
JDBC--Java Database Connectivity相关推荐
- Java小白修炼手册--第四阶段--JDBC(Java Database Connectivity : Java访问数据库的解决方案 )
目录 JDBC原理 JDBC标准 JDBC是什么 使用JDBC优点 JDBC接 口及数据库厂商实现 JDBC工作原理 Driver ( 驱动程序)接口及驱动类加载 Connection( 连接,关 ...
- 01-JDBC概念--JDBC(Java Database Connectivity:Java数据库连接):使用jdbc实现Java与数据库MySQL连接
JDBC自学教程–终篇总结: 地址:http://blog.csdn.net/baidu_37107022/article/details/72600018 1.JDBC(Java Database ...
- java连接jpi方式_Java数据库连接(Java Database Connectivity)
什么是jdbc? JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API.应用程序可通过这套API连接到关系型数据库, ...
- JDBC:Java DataBase Connection
目录 第一节:JDBC入门 1. 概念 2. JDBC驱动 3. JDBC 访问数据库的步骤 4. 几个重要的接口和类 5. 具体操作 第二节:Dao封装 1.简单打开关闭的封装 2. 查询封装 ...
- JDBC连接数据库(Java DataBase Connectivity,java)
通过JDBC操作数据库(以mysql为例) 1.官网下载JDBC的相关JAR包 [https://dev.mysql.com/downloads/connector/j/] 2.解压后,导入jar包 ...
- JDBC(Java Data Base Connectivity)基本用法
一.什么是JDBC JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl ...
- 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口
JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...
- 快速上手JDBC——Java如何在底层操作数据库
我们为什么学习这个,用一句话概括,JDBC就是用Java语言操作关系型数据库 原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句 同理,以后学习用J ...
- MySQL吉连_Learn Jdbc : Java, Jdbc, Odbc
Learn Jdbc : Java, Jdbc, Odbc 介绍 Learn Jdbc : Java, Jdbc, Odbc Learn JDBC we precisely name what we ...
最新文章
- 里签名boot有什么用_面膜里的塑料纸有什么用?原来这里大有学问
- 微信 小程序组件 搜索分类 带缓存(终极 上线版)
- 【小白学PyTorch】12.SENet详解及PyTorch实现
- Linux两个进程交换信息,如何在Linux中的进程之间交换二进制数据
- mac 终端 svn 命令
- 经典案例:如何优化Oracle使用DBlink的SQL语句
- 2020移动应用设计流行素材|交互动画
- Java 并没有死!
- 搜狗开源最新NLP研究成果,打造业内最全机器阅读理解工具包SMRC
- DeepStream不支持多 RTSP源(多个摄像头)
- ListView 控件与 ImageList 控件
- 《孙子兵法》的逻辑结构
- tplink怎么进去_在TP-Link工作体验如何?
- 基于Gin+Vue+ElementUI实现的OA办公系统
- DevJoy 展商大名单+活动剧透!逛开发者游园会,体验沉浸式打 Bug!
- 常见的请求错误HTTP状态码
- [渝粤教育] 西安交通大学 工程热力学 参考 资料
- 设计一个十进制纯机械乘法器,继续大数乘法
- tensorflow slim 安装教程
- 仿真用计算机配置,需要进行仿真,选什么配置的电脑比较好
热门文章
- LeetCode 947. 移除最多的同行或同列石头(并查集)
- LeetCode 1287. 有序数组中出现次数超过25%的元素
- LeetCode 1262. 可被三整除的最大和(DP)
- 服务器换完主板后无盘进不了系统,更换主板后主板认不出硬盘无法进入系统的办法 – 手机爱问...
- mysql 坚向变横向_(排班表一)使用SQL语句使数据从坚向排列转化成横向排列
- 用多模态信息做 prompt,解锁 GPT 新玩法
- 吴恩达:机器学习应以数据为中心
- 上海交大张拳石:神经网络的变量交互可解释性研究
- 新型冠状病毒传染性有多强?何时达到疫情峰值?来看一下数学和统计建模结果...
- 推荐系统经典论文学习