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分为两个版本:

  1. 企业版
  • 用来告诉数据库厂商如何按照标准制定
  • 自己的驱动程序。驱动程序开发指南。

         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类:
不继承任何父类,也不行实现任何借口。
所有有的成员变量都要是私有的。
给出对应的

package com.briup.jdbc;

import java.sql.*;
import java.util.Properties;

import oracle.jdbc.driver.OracleDriver;

public class JDBCTest {

//快捷生成main方法:
// main --> alt + / --> Enter
public static void main(String[] args) {

//JDBC编程六大步骤
try {
//第一步)注册驱动
//方式一:使用反射机制
//String className =
// "oracle.jdbc.driver.OracleDriver";
//Class.forName(className);

//方式二:实例化驱动类对象
//接口类的引用指向实现类对象
Driver driver =
new OracleDriver();

//方式三:使用系统参数
//获取到包含所有系统参数的Properties
/*Properties pro =
System.getProperties();

//查看pro中的所有参数
pro.list(System.out);

//添加信息
pro.setProperty("jdbc.drivers",
"oracle.jdbc.driver.OracleDriver");*/
//System.setProperty("jdbc.drivers",
// "oracle.jdbc.driver.OracleDriver");


//第二步)获取和数据库的连接(Connection)
//方式一:使用驱动管理类静态方法
//String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
//String user = "briup";
//String password = "oracle";
//Connection conn = DriverManager.getConnection(
// url, user, password);

//检查是否成功创建了连接?
//System.out.println(conn);

//方式二:使用driver对象调用connect()方法
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
Properties info = new Properties();
info.setProperty("user", "briup");
info.setProperty("password", "oracle");
Connection conn =
driver.connect(url, info);
System.out.println(conn);

//第三步)创建执行SQL命令的statement对象
//1.Statement
Statement st = conn.createStatement();

//第四步)执行SQL命令
//编写SQL命令
String sql = "insert into s_emp(id,last_name)"
+" values(1001,'tom')";

//执行
st.execute(sql);
System.out.println("插入成功!");

//第六步)关闭资源
st.close();
conn.close();




} catch (Exception e) {
e.printStackTrace();
}




}


}

原文地址:https://www.cnblogs.com/wq-9/p/10182970.html