JDBC架构:java DataBase Connectivity
用来将java代码和数据库进行链接
为多种关系型数据库DBMS提供统一的访问方式,目的就是用
java来操作数据库。
目的就是为了访问数据库
数据库有很多:Oracle,mysql,sqlserver
操作数据库是通过驱动来操作的。这个驱动程序就是一个jar包
不同数据库,其驱动程序也不一样。
由于各种驱动程序不一样,所以通过jdbc来进行管理这些驱动程序,从而,为多种关系型数据库DBMS提供【统一】的访问方式

结构:

JDBC操作_数据库


java代码-》jdbc -》JDBC DriverManager-》操作驱动-》操作数据库

java通过操作jdbc来操作jdbcmanager然后jdbcmanager操作驱动,驱动操作数据库

jdbc怎么操作呢?
通过jdbc提供的各种api来操作

1.JDBC API (API:各种各样的方法,接口,属性,类,称为API或各种各样的操作访问接口,比如说一些增删改查的接口,一些接口的名字,比如说主要的一些类(接口):Connection,Statement(父类),PreparedStatement(子类),ResultSet)

2.JDBC DriverManager:用来管理不同数据库驱动
3. 各种数据库驱动是由相应数据库厂商提供的,用来连接或者直接操作数据库

这3个中,主要讲jdbc api,其他的不用讲,讲讲其中的接口或者类

jdbc api的三个功能:

  1. 与数据库建立连接
  2. 发送SQL语句
  3. 返回处理结果
    jdbc api的三个功能主要是通过以下类或接口实现的:
    DriverManager: 加载管理jdbc驱动
    Connection:连接(通过DriverManager产生)
    Statement(PreparedStatement):增删改查(通过Connection产生)
    CallableStatement:调用数据库中的 存储过程/存储函数(通过Connection产生)
    Result :比如select* from student,然后返回的结果集,就在这里面(由上面的 Statement等产生)

Connection可以产生Statement对象

stmt = connection.createStatement();

Connection 产生操作数据库的对象:

Connection 产生Statement对象,createStatement();
Connection 产生PreparedStatement对象,prepareStatement()
Connection 产生CallableStatement对象,prepareCall();

Statement操作数据库:
增删改:executeUpdate();
查询:executeQuery();

ResultSet:保存结果集
next():光标下移,判断是否有下一条数据,true/false
previous();true/false
getXxx(字段名|位置):获取具体的字段值
PreparedStatement操作数据库:
public interface PreparedStatement extends Statement

PreparedStatement这是一个子类
因此:
增删改:executeUpdate();
查询:executeQuery();
赋值操作:setXxx();

JDBC操作_jdbc_02

jdbc访问数据库的具体步骤:###4步

a。导入驱动,加载具体的驱动类
驱动程序是一个jar包,jar包里面好多java类,好多class,要选中具体是哪个类,就是jar包中的哪个类
b。与数据库建立连接
c。发送sql,执行
d。处理结果集(可选,增删改没有结果集的返回,常用于查询)

jdbc只需要建一个传统的java项目即可

数据库驱动介绍:
不同数据库,其驱动也不一样
x代表版本号
驱动jar包 具体的驱动类(记)
Oracle ojdbc-x.jar oracle.jdbc.OracleDriver
Mysql mysql-connector-java-x.jar com.mysql.jdbc.Driver
sqlserver sqljdbc-x.jar com.microsoft.sqlserver.jdbc.SQLServerDriver

不同的连接字符串(百度可以搜到)
jdbc:oracle:thin:@localhost:1521:ORCL
jdbc:mysql://localhost:3306/数据库实例名
jdbc:mircrosoft:sqlserver:localhost:1433;databasename=数据库实例名

连接字符串:ip地址+端口号+数据库名字 ,(不同数据库展现格式不一样)

连接字符串中,不同数据库,连接字符串的格式不一样

用户名,密码,这个要单独放

步骤:导入驱动

JDBC操作_oracle_03


添加到内路径

JDBC操作_oracle_04


不用建包,会自动生成包的

JDBC操作_sql_05

加载具体驱动类

通过class。forname来加载具体驱动类
具体驱动类:打开ojdbc6.jar-》oracle.jdbc找到OracleDriver.class

JDBC操作_数据库_06


b,建立连接:
我们需要一个对象,叫connection
java程序要和之前的那个驱动建立连接,中间有个JDBC drivermanager
即,通过drivermanager建立连接
要访问一个数据库,就要知道数据库的地址,同时,这个Oracle数据库中可能有好多个数据库,所以要填写用户名和密码,即指定数据库的名字

public class JDBCdemo01 {
private final String URL="jdbc:oracle:thin:@localhost:1521:ORCL";
private final String USERNAME="scott";
private final String PWD="tiger";
public void update() throws ClassNotFoundException, SQLException {//增删改
//1,导入驱动,加载具体驱动类
Class.forName("oracle.jdbc.OracleDriver");//加载具体驱动类
//2,与数据库建立连接
Connection connection = DriverManager.getConnection(URL,USERNAME,PWD);
}

}

【因为url,不需要改变,所以用大写的表示,】
然后选中ctrl+1,自动补全声明。
sqlplus查看数据库

SQL> set linesize 120;
SQL> select *from student;

STUNO STUNAME STUAGE GNAME
---------- -------------------------------------------- ---------- ----------------------------------------
2 ls 22 s2
3 cc 25 s3
6 abc 25 s6
1 zs 23 s1
8 dch 23 s1
39 jerry 56 sh4
36 tom 56 s4

已选择7行。

SQL> desc student;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
STUNO NOT NULL NUMBER
STUNAME VARCHAR2(22)
STUAGE NUMBER
GNAME VARCHAR2(20)

SQL>

做完之后,需要关闭一下

异常不要抛(throw)
建议try catch

关闭一般在finally中,因为无论是否执行,最后都要关闭
关闭释放资源放到finall中

JDBC操作_oracle_07