JDBC超详细介绍

JDBC(一)

1.JDBC基础知识

1.概念:
	Java Data Base Connectivity(Java数据库连接)
	一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
2.通过Java API完成:
	1.建立与数据库的连接
	2.向服务器提供要执行的SQL语句
	3.处理数据库返回的结果集
3.连接数据库的实现步骤:
	1.建立数据源;
	2.导入.jar包,引入java.sql包
		--常用接口:
		Driver接口:驱动接口
		DriverManager类:建立与驱动程序的连接Connection
		Connection:数据库连接对象
		Statement:用于发送基本sql语句
		PreparedStatement:执行sql的对象
		ResultSet:获取查询结果集
	3.加载驱动程序
		把用户对数据库的访问请求转换为数据库可以理解的方式,然后把数据库的执行结果返回给用户。
		 Class.forName("com.mysql.jdbc.Driver");
	4.获取数据库连接对象,建立与数据库的连接
		方法:static Connection getConnection(String url, String user, String password) 
		 参数:
		 url:指定连接的路径:jdbc:mysql://ip地址(域名):端口号/数据库名称
				jdbc:mysql://localhost:3306/student
				如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
		 user:用户名
		 password:密码 
	5.创建用于执行语句对象
		Statement stmt = conn.createStatement();
		或 PreparedStatement pstmt=conn.prepareStatement(sql);
			注意:用PreparedStatement对象后,一定要记得在执行sql语句前给?赋值
				 方法: setXxx(参数1,参数2)
					* 参数1:?的位置编号
					* 参数2:?的值
	6.定义sql语句
			* 添加:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
			* 修改:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
			* 查询:select * from 表名;
			* 删除:delete from 表名 [where 条件]
	7.执行sql语句
		int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
			返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,否则失败。
		ResultSet executeQuery(String sql)  :执行DQL(select)语句
			返回结果集
	8.处理数据
		用next方法判断是否有纪录
		用getString等方法从结果集获取信息
	9.关闭相关对象,释放资源
		连接对象、语句对象、结果集对象
		如:s.close();	stmt.close();	conn.close();
	10.异常处理

抽取JDBC工具类可以简化代码

代码如下:

package cn.itwyl.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JdbcDemo1 {
    public static void main(String[] args) throws Exception {
        //1.导入驱动jar包
        //复制,add as library
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象
        Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","wuy");
        //4.定义sql语句
        String sql="INSERT INTO salarygrade VALUES(6,40010,120000);";
        //5.获取执行sql的对象Statement
        Statement sta=conn.createStatement();
        //6.执行sql
        int count=sta.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        sta.close();
        conn.close();

    }
}

2.简单事务处理

	1.概念:
		由一系列基本操作组成的不可分割的逻辑单位。这多个操作要么同时成功,要么同时失败。
	2.特性:
		原子性,一致性,隔离性,时效性
	3.使用JDBC接口进行事务处理
		*开启事务:conn.setAutoCommit(false);调用该方法设置参数为false,即开启事务
		*提交事务:conn.commmit();
		*回滚事务:conn.rollback();

3.JDBC连接池

1.JDBC数据库连接池的必要性
	连接池通过共享连接来减少连接的创建和释放需要的时间,从而提高效率。
	(1)普通数据库连接使用DriverManager来获取,每次需要建立连接时都要将Connection加载到内存中。需要数据库连接就向数据库申请,执行完后又要释放资源,这样会导致大量资源和时间消耗。
	(2)如果连接过多,可能导致内存泄露,服务器崩溃。
2.概念:为数据库连接创建一个缓冲池,预先在其中放入一定数量的连接,当需要建立连接时,就从缓冲池中取出一个,用完后再放回去。
	优点:资源重用;减少时间开销,高效访问;统一管理,避免内存泄露。
3.实现
	接口:DataSource   javax.sql包下的。包含连接池和连接池管理,取代了DriverManager来获取Connection。
	数据库访问完后要归还连接:conn.close();此时没有关闭连接,只是把连接释放归还到连接池。
4.C3P0:数据库连接池技术
	 步骤:
		1. 导入jar包   c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,数据库驱动jar包
		
		2. 定义配置文件:
			* 名称: c3p0.properties 或者 c3p0-config.xml
			* 路径:直接将文件放在src目录下即可。

		3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
		4. 获取连接: getConnection
package cn.itwyl.jdbcTemplate;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class C3P0Demo1 {
    public static void main(String[] args) throws Exception {
        //导包
        //创建数据库连接池对象
        DataSource ds=new ComboPooledDataSource();

        //获取连接对象
        Connection conn=ds.getConnection();

        System.out.println(conn);
    }
}

5.Druid:数据库连接池实现技术,由阿里巴巴提供的
		 步骤:
		1. 导入jar包 druid-1.0.9.jar,数据库驱动jar包
		2. 定义配置文件:
			* 是properties形式的
			* 可以叫任意名称,可以放在任意目录下,需要自己加载配置文件
		3. 加载配置文件。Properties
		4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory
		5. 获取连接:getConnection
package cn.itwyl.jdbcTemplate;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class DruidDemo {
    public static void main(String[] args) throws Exception {
        //1.导包

        //2.定义配置文件
        //3.加载配置文件
        Properties pro=new Properties();
        InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //4.获取连接池对象
        DataSource ds=DruidDataSourceFactory.createDataSource(pro);
        //5.获取连接
        Connection conn = ds.getConnection();
        System.out.println(conn);
    }
}

可以定义一个工具类
1. 定义一个类 JDBCUtils
2. 提供静态代码块加载配置文件,初始化连接池对象
3. 提供方法
1. 获取连接方法:通过数据库连接池获取连接
2. 释放资源
3. 获取连接池的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值