JDBC操作
Posted wq9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC操作相关的知识,希望对你有一定的参考价值。
JDBC
三个问题?
1.什么是JDBC?
- jdbc:Java Database Connectivity
- 一套在java语言中操作关系型数据库的标准。
2.为什么要学习、使用JDBC?
为什么要在代码中操作数据库?
如何在代码中操作数据库?
- 依赖于数据库厂商所提供的接口。 接口:一套使用该数据库的说明书。
- Oracle mysql SqlServer DB2 sqlite access mongodb
- 程序员在使用某种数据库之前,需要先学习
- 该数据库的操作方法(接口)。
- 2008年 Oracle 学习Oracle的接口 编码
- 改搭Mysql集群 大批量修改原代码
- 2009年 Mysql 学习Mysql的接口 编码
- 2010年 SqlServer 学习SqlServer的接口 编码
能否存在一套统一的标准(规范),用来操作各种
不同的数据库?
- 1.ODBC 开放式的数据库连接
微软提出ODBC
微软把所有数据库的接口全部集中起来,
然后对其中的内容进行封装。
再对外提供一套统一的操作方式。
表现出来的效果不是特别理想。
- 2.JDBC
java语言
詹姆斯·高斯林 --java之父
SUN公司定制了一套标准,
但是并没有给出具体的实现。
由各大数据库厂商自行编写驱动程序。
程序员要使用各大数据库的驱动程序,
需要引入对应的JAR包,然后按照jdbc api
中所定义的标准去操作即可。
标准:java.sql.*;
Driver 核心接口
所有的驱动类都必须实现这个接口。
DriverManager 驱动管理类
- 所有注册到内存中的合法驱动类都会被这个类所管理,可以通过驱动管理列
- 获取和每一个数据的连接。 Connection 代表和数据库的连接负责数据库中的事务管理
Statement 用来执行SQL命令
PreparedStatement
CallableStatement
ResultSet 代表查询语句的结果集
3.如何学习JDBC?
学习JDBC api
api:一套预定义好的函数,用来实现某种特定功能。
一些类和方法 连接和操作数据库
JDBC api分为两个版本:
- 企业版
- 用来告诉数据库厂商如何按照标准制定
- 自己的驱动程序。驱动程序开发指南。
2.程序员版
- 教给程序员如何使用JDBC操作数据库。
- java.sql.*;
JDBC编程六大步骤:
- 1)注册驱动
三种方式:
- a)使用反射机制加载驱动类对象
//1.把指定类加载到内存中
//2.获取该类的镜像对象
Class.forName(String className);
参数:驱动类的全限类名(全包名+类名)
推荐使用。
反射机制可以把代码写灵活。
- b)直接实例化驱动类对象
全限类名:oracle.jdbc.driver.OracleDriver
Driver driver = new OracleDriver();
//接口类的引用指向实现类对象
- c)使用系统参数
Properties是一种比较小型的、特殊的Map集合
只能用来存放String类型的键值对。
常用于做配置文件。
在系统参数中添加如下参数:
jdbc.drivers=oracle.jdbc.driver.OracleDriver
System.setProperty(String key,String value);
唯一的目的:把驱动类加载到内存中。
- 2)获取和数据库的连接(Connection对象)
两种方式:
- a)DriverManager.getConnection(url,user,password);
url:统一资源定位符
jdbc:oracle:thin:@127.0.0.1:1521:XE
jdbc:oracle:thin:@localhost:1521:XE
user:登录数据库时所使用的账号
password:登录数据库时所使用的密码
- b)driver.connect(url,info);
driver是一个驱动类对象。
必须和注册驱动的方式二连用。
Properties:一种特殊的保存键值对的数据结构。
key和value必须都是String字符串。
常用于做配置文件
info中需要包含两组键值对(用来指定账号和密码):
"user","账号"
"password","密码"
.properties
- 3)创建执行SQL命令的statement对象
Statement
执行异构SQL命令效率较高
不需要进行预编译
PreparedStatement
执行同构的SQL命令效率较高
需要进行预编译
CallableStatement
执行PL/SQL命令。
异构:
select id,last_name from s_emp;
delete from s_dept;
同构:
insert into s_student values(1,‘tom‘,22);
insert into s_student values(2,‘jack‘23);
insert into s_student values(3,‘lucy‘,24);
预编译:
预先提供一个SQL模板,用于后续动态地向模板中
传入不同的值。
?:先行占位,后面再用具体的值代替掉问号
insert into s_student values(?,?,?);
- 4)编写SQL命令、执行SQL命令
三种方法:都可以执行任何SQL命令。
boolean execute();
如果结果为true则代表有结果集,
如果为false则代表没有结果集。
int executeUpdate();
返回值代表有多少条数据受到了影响。
适用于DML语句。
ResulSet executeQuery();
适用于select查询语句。
- 5)处理结果集(只针对select查询语句)
- 6)释放资源
原则:后开的先关 先开的后关
4.JDBC事务管理机制
- Connection对象充当事务管理者。 默认处理机制:自动提交事务
- 每次执行完毕DML语句之后,
- JDBC都会自动向数据库发送一条提交事务的命令。
- 设置手动提交事务:
- conn.setAutoCommit(boolean flag);
- flag为true代表设置为自动提交,
- flag为false代表设置为手动提交事务。
- 提交事务:
- 1)conn.commit();
- 2)st.execute("commit");
- 5.jdbc的批处理
- 批处理:批量发送和执行sql命令
- 使用于大批量的执行sql命令
执行一条sql命令的过程:
- 1 在客户端编写sql命令
- 2客户端和服务器端创建链接
- 3.发送sql命令到服务器段
- 4服务器端执行sql命令
- 客户端和数据库服务器使用tcp协议经行链接
tcp:在经行数据传输之前要先穿件链接——“”三次握手
//将某条sql命令添加到批处理空间
addBatch(String sql);
//执行批处理
//将批处理空间中的sql命令一次性打包发送给数据库执行
executeBatch();
JDBC中批量执行SQL命令的效率影响因素
1)是否使用批处理
2)是否自动提交事物;
3 执行sql命令的对象
Statement -- 执行易购的sql命令效率较高
preparedStatement --执行同构sql命令效率较高
执行效率测试:
向 s_teacher表中插入50000条数据
1 使用Statement、不适用批处理、事务自动提交
2 使用PreparedStatement使用批处理
实体 :一类具有相同特点的事物抽象出来的集合
实体在数据库中以数据库表的形式体现。
实体在java中以pojo类的形式体现。
pojo类:
不继承任何父类,也不行实现任何借口。
所有有的成员变量都要是私有的。
给出对应的
以上是关于JDBC操作的主要内容,如果未能解决你的问题,请参考以下文章