jdbc(java数据库连接)

1 jdbc入门

1.1 简介

使用java程序访问(操作)数据库(发送sql语句),这叫用到了jdbc技术!!!!

1.2 使用java程序访问数据库的前提

1)先登录到数据库:

数据库的主机地址(ip地址)

端口

数据库用户名

数据库用户密码

连接的数据库

2)发送sql语句

连接数据库的三种方式

(1)通过驱动driver类来连接数据库;

(2)通过DriverManager,注册Driver,来连接数据库;

(3)通过反射Driver,加载Driver里面的静态代码块,实现自动注册Driver,在DriverManager连接数据库

1.3 Jdbc的核心api

|-Driver接口: 驱动程序接口。

|-Connection connect()   用于连接数据库的方法

可以使用驱动程序管理类获取连接:

DriverManager.getConnection(url,user,pasword);

|-Connection接口: 代表和数据库的连接

|- Statement createStatement()  创建Statement接口的对象。

|- PreparedStatement prepareStatement(String sql)  创建PreparedStatement接口的对象。

|- CallableStatement prepareCall(String sql)创建CallableStatement接口的对象。

|-Statement接口:用于执行静态 SQL 语句

|- int executeUpdate(String sql)  执行DDLDML语句(更新sql语句)

|- ResultSet executeQuery(String sql)  执行DQL语句(查询sql语句)

|-PreparedStatement接口:用于执行预编译的 SQL 语句

|- int executeUpdate():执行DDLDML语句(更新sql语句)

|- ResultSet executeQuery() 执行DQL语句(查询sql语句)

|-CallableStatement接口: 用于执行存储过程的SQL语句

|- ResultSet executeQuery() 存储过程只能执行查询sql  

设置输出参数registerOutParameter();  获取输出参数getXXX();

|-ResultSet接口: 表示数据库结果集

 |- boolean next()   将光标移至下一行

 |- getXXX(): 获取结果集中的每列的值

1.4 jdbc操作步骤

1)注册驱动程序

2)获取连接对象

3)准备sql语句(DDL+DML)

4)创建Statement对象( Statement,PreparedStatment, CallableStatement)

5)执行sql语句

 DDL+DML: executeUpdte(sql)

DQL; executeQuery()

6)返回结果,处理结果

ResultSet

7)关闭资源

2 使用Statement执行sql语句

3 使用PreparedStatement执行SQL语句

 Statement vs PreparedStatement

   语法不同:

1Statement只能执行静态的sql语句

2PreparedStatement即可以执行静态sql语句,也可以执行预编译sql语句

安全性不同:

1Statement可以被用户进行sql注入

2PreparedStatement不能被用户注入sql,比Statement更安全!!

执行效率问题:

1Statement不能利用数据库sql缓存功能

2PreparedStatement可以利用数据库sql缓存功能。比Statement的执行效率更高的!!

结论:建议尽量使用PreparedStatment

4 优化jdbcUtil工具类

使用类路径读取jdbc.properties文件

-------------------------------------------------------------------------------------------------

1 jdbc执行批处理

1.1 引入

之前:使用jdbc每次只能发送1sql语句,如果同时执行2000次插入,向数据库服务器发送2000 插入语句,这种做法的效率不高!

现在:使用jdbc批处理执行2000次插入,但每次向数据库的服务器发送20sql,一共只需要发送100次就可以了!那么这种的做法的效率会比之前的做法高!!!

批处理:一次发送多条SQL语句

1.2 批处理的API

Statement的批处理:

void addBatch(String sql)  sql添加到缓存区中(没有发送的)

int[] executeBatch()  执行批处理缓存中sql语句(发送到数据库执行)

void clearBatch()  清空缓存区sql语句

PreparedStatement的批处理:

void addBatch()   把参数添加到缓存区中

int[] executeBatch()  执行批处理缓存中所有参数(发送到数据库执行)

void clearBatch()  清空缓存区参数列表

2 Jdbc处理大容量数据

2.1 什么是大容量

字符:

    存储字符内容: mysqlchar  varchar  长度有限的。 65535

    大容量的字符字段:

      mysqltext   longtext(4G字符内容)

      oracle :  clob   longclob

字节:

      mysqlblob65kb)   mediumblob16mb)  longblob4GB

   oracle:   blob

   

3 Jdbc获取自增长的值

4 事务

4.1 数据库事务

innoDB数据库类型: 支持事务。 

MyISAM: 不支持事务,但执行效率高。

  set autocommit=0;

  commit;

  rollback;

4.2 jdbc事务

Connection.setAutoCommit(false);  开启事务

Connection .commit();       提交事务

Connection.rollback();      回滚事务

4.3 事务的四大特性ACID

原子性:一个事务的操作要么一起成功,要么一起失败!

一致性: 在一个事务执行后,数据库从一个一致性的状态转变为另一个一致性。

隔离性: 多个事务并发过程中,希望能够相互隔离的。

    多个事务在并发产生以下的现象:

      脏读: 一个事务读到了另一个事务没有提交的数据

      不可重复读:一个事务读到了另一个事务已经提交的更新数据(update

      幻读: 一个事务读到了另一个事务已经提交的插入数据(insert

数据库可以设置不同的隔离级别来防止以上现象:(是否能够防止现象)

          脏读     不可重复读   幻读

read uncommitted:     否         否        否

read committed:         是         否        否

repeatable-read:                                    

serializable:                                     

持久性: 事务一旦提交,应该永久保存下来

猜你喜欢

转载自www.cnblogs.com/lldsgj/p/10802317.html