一.Java与数据库的连接方式有哪些?
1.JDBC-ODBC桥驱动
将JDBC调用转换为对ODBC的调用
客户端需要先配置ODBC数据源与其他数据库的连接,并且必须已安装ODBC驱动
2.本地API驱动
将JDBC调用转换为对数据库客户端API的调用
客户端需要安装数据库厂商提供的客户端和代码库
3.网络协议驱动
将JDBC调用转换为DBMS-independent网络协议,然后由服务器端的中间件转换为具体数据库服务器可以接收的网络协议(相对第二种,不需要客户端加载任何驱动和代码库)
4.本地协议驱动
将JDBC调用直接转换为具体数据库服务器可以接收的网络协议(对比第三种,不需要中间件转换),但对于不同的数据库需要下载不同的 驱动程序。
二、单连接数据库(属于上面四种连接方式的第四种)
//注册驱动
Class.forName(“驱动程序的名字”);
//获取连接
String url = "jdbc:oracle:thin:@localhost:1521:ora9i"; // 固定的模式
Connection conn = DriverManager.getConnection(url, "数据库用户名", "密码");
//获取SQL执行器
Statement stmt = conn.createStatement();
//执行查询语句
ResultSet rs = stmt.executeQuery("select * from dept");
//遍历结果集
while(rs.next()) {
}
上面的代码都要加上try catch,另外,还需要在最后把所有连接都关闭
数据库的增删改查
Statement可用于执行SQL语句,不同类型的SQL语句需要使用不同的方法,如下:
//执行select语句
ResultSet executeQuery(String sql);
//执行insert、delete、update语句
int executeUpdate(String sql);
//执行creat和drop语句
boolean execute(String sql);
添加操作:
insert语法格式如下:
insert into 表名 (字段1,字段2,字段3...) values (字段1值,字段2值,字段3值...);
删除操作:
delete语法格式如下:
delete form 表名 [where 条件];
更新操作:
update语法格式如下:
update 表名 字段1=值, 字段2=值,...[where 条件];
----------------------------------------------------------------------------------------------------
数据库事务的理解:
数据库事务:单个逻辑单元执行的一系列操作,它可以由一个或多个SQL语句组成。
如果事务中的所有SQL语句全部都正确执行,则向数据库提交更改所有数据;如果一旦有错误发生,则不会对数据库作任何修改。
使用事务可以保障数据库数据的完整性。
利用JDBC事务封装若干个SQL操作时,需要将事务自动提交功能关闭,然后通过代码方式控制事务提交和事务回滚操作。
// 关闭自动提交功能 conn是一个连接
conn.setAutoCommit(false);
...... // 执行几个SQL操作
// 执行事务提交
conn.commit();
-------------------------------------------------------------------------------------------------------
数据库连接池:
连接池用于创建和管理数据库连接的缓冲池技术。
连接池原理:
连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用、分配和管理策略,使得该连接池中的连接可以得到
高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。
连接池的建立:
一般在系统初始化时,连接池会根据系统配置建立,并在池中创建几个连接对象,以便使用时能从连接池中获取。
连接池中的连接不能随意创建和关闭,这样避免了系统的额外开销。
Java中提供了很多容器类可以方便的构建连接池,如Vector、Stack
连接池的管理:
管理策略如下:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用,如果没有空闲连接,则查看当前所开的连接数是否已经达到了最大连接数,如果没达到就重新创建一个连接给客户;如果达到了就按设定的最大等待时间进行等待,如果超出了最大等待时间,则抛异常给客户。
当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留给其他客户继续使用。
连接池的关闭:
当应用程序退出时,关闭连接池中所有的连接,释放连接池中相关的资源,该过程正好与创建相反。