1. Why
JDBC使我们用Java语言编写的软件具备和数据库交互的能力;
2. What
通过Java语言如何和数据库进行CRUD:
. 和数据库连接、交互的六大步骤;
. 六大步骤的细节补充;
Module 1: JDBC Overview
1. JDBC和ODBC的对比:
优点: 1) 没有指针;
2) 没有ODBC复杂;
3) 纯Java;
2. jdbcapi的包
java.sql
javax.sql
JDBC API
. 能以一致的形式访问不同类型的关系数据库;
. 本身是Java语言的组成内容;
分为:
. 一系列接口: 由Sun公司制定,由数据库软件程序员使用;
. 接口实现类: 由数据库厂商实现;
oracle -> ojdbc14.jar,ojdbc5.jar,classes12.jar
mysql:mysql.jar
程序打包操作:
jar cvf a.jar A.class B.class C.class
JDBC驱动:
JDBC驱动程序:Sun公司所制定的JDBC接口实现类的集合,由数据库
厂商提供,不同数据库其JDBC驱动程序是不同的;
java.sql.Driver: 建立和数据库的连接, Oracle数据库对该接口的
实现类名为:oracle.jdbc.driver.OracleDriver
JDBC驱动程序实现的四种类型:
TYPE I: JDBC-ODBC桥: 将对数据库的调用转嫁为对ODBC的调用,
需要在Java程序所在的机器安装ODBC驱动管理器,效率差,不能跨平台;
TYPE II: JDBC程序由二部分组成,一部分用Java编写,一部分是其它
语言编写的二进制代码。
TYPE III: 纯Java, 将对数据库的调用转嫁为中间服务器的调用;
TYPE IV: 纯Java,直接和数据库进行交互。对相关代码进行了优化,
性能最高。
java.sql
Driver: 通过connect()方法实现和数据库的连接;
Connection connect(String url, Properties pro);
url: 用来区分不同的驱动程序;
pro: 封装数据库的用户名和密码,其中用户名和密码的key
值分别为:user和password;
DriverManager: 管理多个加载的驱动程序;
Connection: 和数据库连接的对象形式,代表了一个和数据库的连接;
Statement: 用以执行SQL语句,推荐异构操作的时候使用;
1) Statement的三个接口:
a. Statement;
b. PreparedStatement(继承自Statement);
c. CallableStatement(继承自PreparedStatement);
2) 使用方法Connection.createStatement()得到一个Statement对象
PreparedStatement:用以执行sql语句,推荐同构的sql语句使用,并配合占位符号使用
CallableStatement:
1) 通过CallableStatement调用数据库中的存储过程;
2) 继承自PreparedStatement;
3) CallableStatement cstm = connection.prepareCall("{call return_student(?,?)}");
cstm.setString(1,"8623034");
cstm.registerOutparameter(2, Types.REAL);
cstm.execute();
float gpa = cstm.getFloat(2);
Statement和PreparedStatement区别:
1)建立
stm=conn.createStatement();
pstm=conn.prepareStatement(sql);
2)执行
stm.execute(sql); 包含数据的完整的sql命令
pstm.execute(); 只含数据
3)stm 可以执行多条(异构的)sql
pstm 只能执行一条sql
4)使用pstm的环境
a.执行同构sql,用pstm效率高
执行异构sql,用stm效率高
b.构成sql语句时需要外部的变量值,用pstm
| Statement | PreparedStatement | CallableStatement
------------------------------------------------------------------------------
写代码位置 | 客户端 | 客户端 | 服务器端
------------------------------------------------------------------------------
存储代码位置 | 客户端 | 服务器端 | 服务器端
------------------------------------------------------------------------------
编写代码技术 |Java,SQL操作 |Java,SQL操作 | 数据库的程序语言,如PL/SQL
------------------------------------------------------------------------------
可配置性 | 高 |第一次低,以后高 | 低
------------------------------------------------------------------------------
可移植性 | 高 |假设支持PreparedStatement的话高
------------------------------------------------------------------------------
传输效率 | 低 |第一次低,以后高 | 高
ResultSet: 封装Select语句返回的数据集,提供方法对数据集中内容
进行获取和其它操作;
DatabaseMetadata: 获取数据库版本、用户名、对象名等
数据库信息;
ResultSetMetadata:获取一次查询结果的列名、数量、类型
等信息;
Types: 提供一系列常量代表数据类型;
JDBC的使用:
1. 注册Driver -> oracle.jdbc.driver.OracleDriver
*方式一:Class.forName("oracle.jdbc.driver.OracleDriver");
方式二:Driver driver = new DriverImpl();
DriverManager.registerDriver(driver);
方式三:-Djdbc.drivers=oracle.jdbc.driver.OracleDriver
常见的数据库驱动名:
2. 获得Connection
*方式一:Connection conn = DriverManager.getConnection(
url,user,password);
方式二:Driver driver = new DriverImpl();
Connection conn = driver.connect(url,pro);
3. 创建Statement
. Statement stmt = conn.createStatement();
//和数据库交互,传输sql语句到数据库,sql语句接下来
//在数据库内编译、优化好等着进一步执行;
. PreparedStatement pstmt =
conn.prepareStatement(sql);
4. 执行SQL语句
//实现和数据库交互,传输SQL语句到数据库并执行SQL
ResultSet rs = stmt.executeQuery(sql);
int i = stmt.executeUpdate(sql);
boolean flag = stmt.execute(sql);
//实现和数据库交互,传输参数值到数据库并执行SQL
pstmt.setInt(1,100);
pstmt.setString(2,"zs");
pstmt.setDate(3,Date.valueOf("1979-9-1"));
ResultSet rs = pstmt.executeQuery();
int i = pstmt.executeUpdate();
boolean flag = pstmt.execute();
5. 处理结果集
1) 使用结果集(ResultSet)对象的访问方法获取数据;
a. next():下一个记录
b. first():第一个记录
c. last():最后一个记录
d. previous():上一个记录
2) 通过字段名或索引取得数据
3) 结果集保持了一个指向了当前行的指针,初始化位置为第一个记录前。
6. 关闭对象、释放资源,一般推荐先构建的后释放
一般在finally里定义;
1) 首先关闭记录集;
2) 其次关闭声明;
3) 最后关闭连接对象。
7,数据表和类对应的三种关系:
1) 一个表对应一个类;
2) 一个表对应相关类;
3) 一个表对应整个类关系层
8,SQL数据类型及其相应的Java数据类型
答:SQL数据类型 Java数据类型 说明
------------------------------------------------------------------
INTEGER或者INT int 通常是个32位整数
SMALLINT short 通常是个16位整数
NUMBER(m,n) DECIMAL(m,n) Java.sql.Numeric 合计位数是m的定点十进制数,小数后面有n位数
DEC(m,n) Java.sql.Numeric 合计位数是m的定点十进制数,小数后面有n位数
FLOAT(n) double 运算精度为n位二进制数的浮点数
REAL float 通常是32位浮点数
DOUBLE double 通常是64位浮点数
CHARACTER(n)或CHAR(n) String 长度为n的固定长度字符串
VARCHAR(n) String 最大长度为n的可变长度字符串
BOOLEAN boolean 布尔值
DATE Java.sql.Date 根据具体设备而实现的日历日期
TIME Java.sql.Time 根据具体设备而实现的时戳
TIMESTAMP Java.sql.Timestamp 根据具体设备而实现的当日日期和时间
BLOB Java.sql.Blob 二进制大型对象
TEXT Java.sql.Clob 字符大型对象
ARRAY Java.sql.Array
JDBC使我们用Java语言编写的软件具备和数据库交互的能力;
2. What
通过Java语言如何和数据库进行CRUD:
. 和数据库连接、交互的六大步骤;
. 六大步骤的细节补充;
Module 1: JDBC Overview
1. JDBC和ODBC的对比:
优点: 1) 没有指针;
2) 没有ODBC复杂;
3) 纯Java;
2. jdbcapi的包
java.sql
javax.sql
JDBC API
. 能以一致的形式访问不同类型的关系数据库;
. 本身是Java语言的组成内容;
分为:
. 一系列接口: 由Sun公司制定,由数据库软件程序员使用;
. 接口实现类: 由数据库厂商实现;
oracle -> ojdbc14.jar,ojdbc5.jar,classes12.jar
mysql:mysql.jar
程序打包操作:
jar cvf a.jar A.class B.class C.class
JDBC驱动:
JDBC驱动程序:Sun公司所制定的JDBC接口实现类的集合,由数据库
厂商提供,不同数据库其JDBC驱动程序是不同的;
java.sql.Driver: 建立和数据库的连接, Oracle数据库对该接口的
实现类名为:oracle.jdbc.driver.OracleDriver
JDBC驱动程序实现的四种类型:
TYPE I: JDBC-ODBC桥: 将对数据库的调用转嫁为对ODBC的调用,
需要在Java程序所在的机器安装ODBC驱动管理器,效率差,不能跨平台;
TYPE II: JDBC程序由二部分组成,一部分用Java编写,一部分是其它
语言编写的二进制代码。
TYPE III: 纯Java, 将对数据库的调用转嫁为中间服务器的调用;
TYPE IV: 纯Java,直接和数据库进行交互。对相关代码进行了优化,
性能最高。
java.sql
Driver: 通过connect()方法实现和数据库的连接;
Connection connect(String url, Properties pro);
url: 用来区分不同的驱动程序;
pro: 封装数据库的用户名和密码,其中用户名和密码的key
值分别为:user和password;
DriverManager: 管理多个加载的驱动程序;
Connection: 和数据库连接的对象形式,代表了一个和数据库的连接;
Statement: 用以执行SQL语句,推荐异构操作的时候使用;
1) Statement的三个接口:
a. Statement;
b. PreparedStatement(继承自Statement);
c. CallableStatement(继承自PreparedStatement);
2) 使用方法Connection.createStatement()得到一个Statement对象
PreparedStatement:用以执行sql语句,推荐同构的sql语句使用,并配合占位符号使用
CallableStatement:
1) 通过CallableStatement调用数据库中的存储过程;
2) 继承自PreparedStatement;
3) CallableStatement cstm = connection.prepareCall("{call return_student(?,?)}");
cstm.setString(1,"8623034");
cstm.registerOutparameter(2, Types.REAL);
cstm.execute();
float gpa = cstm.getFloat(2);
Statement和PreparedStatement区别:
1)建立
stm=conn.createStatement();
pstm=conn.prepareStatement(sql);
2)执行
stm.execute(sql); 包含数据的完整的sql命令
pstm.execute(); 只含数据
3)stm 可以执行多条(异构的)sql
pstm 只能执行一条sql
4)使用pstm的环境
a.执行同构sql,用pstm效率高
执行异构sql,用stm效率高
b.构成sql语句时需要外部的变量值,用pstm
| Statement | PreparedStatement | CallableStatement
------------------------------------------------------------------------------
写代码位置 | 客户端 | 客户端 | 服务器端
------------------------------------------------------------------------------
存储代码位置 | 客户端 | 服务器端 | 服务器端
------------------------------------------------------------------------------
编写代码技术 |Java,SQL操作 |Java,SQL操作 | 数据库的程序语言,如PL/SQL
------------------------------------------------------------------------------
可配置性 | 高 |第一次低,以后高 | 低
------------------------------------------------------------------------------
可移植性 | 高 |假设支持PreparedStatement的话高
------------------------------------------------------------------------------
传输效率 | 低 |第一次低,以后高 | 高
ResultSet: 封装Select语句返回的数据集,提供方法对数据集中内容
进行获取和其它操作;
DatabaseMetadata: 获取数据库版本、用户名、对象名等
数据库信息;
ResultSetMetadata:获取一次查询结果的列名、数量、类型
等信息;
Types: 提供一系列常量代表数据类型;
JDBC的使用:
1. 注册Driver -> oracle.jdbc.driver.OracleDriver
*方式一:Class.forName("oracle.jdbc.driver.OracleDriver");
方式二:Driver driver = new DriverImpl();
DriverManager.registerDriver(driver);
方式三:-Djdbc.drivers=oracle.jdbc.driver.OracleDriver
常见的数据库驱动名:
2. 获得Connection
*方式一:Connection conn = DriverManager.getConnection(
url,user,password);
方式二:Driver driver = new DriverImpl();
Connection conn = driver.connect(url,pro);
3. 创建Statement
. Statement stmt = conn.createStatement();
//和数据库交互,传输sql语句到数据库,sql语句接下来
//在数据库内编译、优化好等着进一步执行;
. PreparedStatement pstmt =
conn.prepareStatement(sql);
4. 执行SQL语句
//实现和数据库交互,传输SQL语句到数据库并执行SQL
ResultSet rs = stmt.executeQuery(sql);
int i = stmt.executeUpdate(sql);
boolean flag = stmt.execute(sql);
//实现和数据库交互,传输参数值到数据库并执行SQL
pstmt.setInt(1,100);
pstmt.setString(2,"zs");
pstmt.setDate(3,Date.valueOf("1979-9-1"));
ResultSet rs = pstmt.executeQuery();
int i = pstmt.executeUpdate();
boolean flag = pstmt.execute();
5. 处理结果集
1) 使用结果集(ResultSet)对象的访问方法获取数据;
a. next():下一个记录
b. first():第一个记录
c. last():最后一个记录
d. previous():上一个记录
2) 通过字段名或索引取得数据
3) 结果集保持了一个指向了当前行的指针,初始化位置为第一个记录前。
6. 关闭对象、释放资源,一般推荐先构建的后释放
一般在finally里定义;
1) 首先关闭记录集;
2) 其次关闭声明;
3) 最后关闭连接对象。
7,数据表和类对应的三种关系:
1) 一个表对应一个类;
2) 一个表对应相关类;
3) 一个表对应整个类关系层
8,SQL数据类型及其相应的Java数据类型
答:SQL数据类型 Java数据类型 说明
------------------------------------------------------------------
INTEGER或者INT int 通常是个32位整数
SMALLINT short 通常是个16位整数
NUMBER(m,n) DECIMAL(m,n) Java.sql.Numeric 合计位数是m的定点十进制数,小数后面有n位数
DEC(m,n) Java.sql.Numeric 合计位数是m的定点十进制数,小数后面有n位数
FLOAT(n) double 运算精度为n位二进制数的浮点数
REAL float 通常是32位浮点数
DOUBLE double 通常是64位浮点数
CHARACTER(n)或CHAR(n) String 长度为n的固定长度字符串
VARCHAR(n) String 最大长度为n的可变长度字符串
BOOLEAN boolean 布尔值
DATE Java.sql.Date 根据具体设备而实现的日历日期
TIME Java.sql.Time 根据具体设备而实现的时戳
TIMESTAMP Java.sql.Timestamp 根据具体设备而实现的当日日期和时间
BLOB Java.sql.Blob 二进制大型对象
TEXT Java.sql.Clob 字符大型对象
ARRAY Java.sql.Array