07-javaWeb-jdbc

 

目录

一、通过jdbc完成单表的curd操作

1、 1 jdbc

1、 2 jdbc操作步骤:★

1、 2、1 初始化数据库和表

1、 2、2 IDE打开之后——eclipse

1、 2、3 使用junit单元测试

1、 2、4 添加工具类               

1、 2、5  使用工具类插入一条数据

1、 3 jdbc-api详解

1、 3、1 DriverManager:管理了一组jdbc的操作 类

1、 3、2 (了解)Driver:java.sql 接口 驱动

1、 4 常见的配置文件格式

1、 4 、1 properties配置文件存放用户信息

二、通过连接池(数据源)优化我们的操作.

2、 1 连接池概述

2、 2 自定义一个连接池(理解思想) 

2、 2、 1 连接池代码

2、 2 、 2 测试代码

2、 3 增强方法

2、 3、 1 装饰者模式:★★★

2、 4 常用的连接池

2、 4、 1 DBCP:(理解)

2、 4、 2 C3P0:(★)

三、使用dbutils完成curd操作

3、 1 dbutils

3、 2 核心类或接口

3、 2 、1 QueryRunner:类名

3、 2、 2 DbUtils:释放资源,控制事务 类

3、 2 、3 ResultSetHandler:封装结果集 接口

四、总结


一、通过jdbc完成单表的curd操作

 

需求:
        对分类表完成操作.
技术分析:
        jdbc

1、 1 jdbc

        java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
        驱动:jdbc的实现类.由数据库厂商提供.
        我们就可以通过一套规范操作不同的数据库了(面向对象——多态)
        jdbc作用:
                连接数据库
                发送sql语句
                处理结果

1、 2 jdbc操作步骤:★

        1.数据库和表
        2.创建一个项目
        3.导入驱动jar包
        4.编码:
                注册驱动
                获取连接

                编写sql
                创建预编译的语句执行者(?号)
                设置参数
                执行sql
                处理结果
                释放资源

1、 2、1 初始化数据库和表

                CREATE DATABASE day07;
                USE day07;        
                
                create table category(
                        cid varchar(20) primary key,
                        cname varchar(20)
                );
                
                insert into category values('c001','电器');
                insert into category values('c002','服饰');
                insert into category values('c003','化妆品');
                insert into category values('c004','书籍');

1、 2、2 IDE打开之后——eclipse

                1.修改字符集 utf-8
                2.新建 java项目
                3.使用的jdk为自己的jdk 不用使用内置

1、 2、3 使用junit单元测试

                要求:
                        1.方法是public void xxx(){}
                        2.在方法上添加 @Test
                        3.在@Test 按下 ctrl+1(快速锁定错误)
                        4.在方法上右键 run as  -->junit 就可以执行方法了.

public class Hello {
	@Test
	public void f1(){
		System.out.println("hello");
	}
	
	@Test
	public void f2() throws Exception{
		//注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//DriverManager.registerDriver(new Driver());————驱动注册两次
		
		//获取连接 		ctrl+o 整理包
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day07", "root", "1234");
		
		//编写sql
		String  sql="select * from category";
		
		//创建语句执行者
		PreparedStatement st=conn.prepareStatement(sql);
		
		//设置参数
		
		//执行sql
		ResultSet rs=st.executeQuery();
		
		//处理结果
		while(rs.next()){
			System.out.println(rs.getString("cid")+"::"+rs.getString("cname"));
		}
		
		//释放资源.
		rs.close();
		st.close();
		conn.close();
	}

1、 2、4 添加工具类               

注册驱动、 获取连接、释放资源 工具类

异常处理:抛出异常,谁调用谁处理

方法调用前先判断是否为空

public class DataSourceUtils {
	private static ComboPooledDataSource ds=new ComboPooledDataSource();
	
	/**
	 * 获取数据源
	 * @return 连接池
	 */
	public static DataSource getDataSource(){
		return ds;
	}
	
	/**
	 * 获取连接
	 * @return 连接
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	
	
	/**
	 * 释放资源
	 * @param conn 连接
	 * @param st 语句执行者
	 * @param rs 结果集
	 */
	public static void closeResource(Connection conn, Statement st, ResultSet rs) {
		closeResultSet(rs);
		closeStatement(st);
		closeConn(conn);
	}

	/**
	 * 释放连接
	 * @param conn 连接
	 */
	public static void closeConn(Connection conn) {
		if (conn != null) {//调用方法时需要判断是否为空
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;//助于垃圾回收器快速回收
		}

	}

	/**
	 * 释放语句执行者
	 * @param st 语句执行者
	 */
	public static void closeStatement(Statement st) {
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			st = null;
		}

	}

	/**
	 * 释放结果集
	 * @param rs 结果集
	 */
	public static void closeResultSet(ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null;
		}

	}
}

1、 2、5  使用工具类插入一条数据

            //设置参数
            st.setString(1, "c006");
            st.setString(2, "户外");

            //执行sql ——返回行数
            int i=st.executeUpdate(); 

	//插入一条数据
	@Test
	public void f3(){
		//模板,方便最后释放资源
		Connection conn=null;
		ResultSet rs=null;
		PreparedStatement st=null;
		
		try {
			//获取连接
			conn=JdbcUtils.getConnection();
			
			//编写sql
			String sql="insert into  category values(?,?)";
			
			//获取语句执行者
			st=conn.prepareStatement(sql);
			
			//设置参数
			st.setString(1, "c006");
			st.setString(2, "户外");
			
			//执行sql ——返回行数
			int i=st.executeUpdate();
			
			//处理结果
			if(i==1){
				System.out.println("success");
			}else{
				System.out.println("fail");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//释放资源
			JdbcUtils.closeResource(conn, st, rs);
		}
	}

 

1、 3 jdbc-api详解

        所有的包 都是 java.sql 或者 javax.sql

1、 3、1 DriverManager:管理了一组jdbc的操作 类

 常用方法:

  • 1、了解:注册驱动        registerDriver

                                static void registerDriver(Driver driver) :
                                        通过查看 com.mysql.jdbc.Driver的源码 有如下代码
                                                 static {
                                                        try {
                                                                java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
                                                        } catch (SQLException E) {
                                                                throw new RuntimeException("Can't register driver!");
                                                        }
                                                }
                                        驱动注册了两次.我们只需要将静态代码块执行一次,

                                                类被加载到内存中会执行静态代码块,并且只执行一次.

                                        现在只需要将类加载到内存中即可:

                                                方式1:
                                                        ★Class.forName("全限定名");//包名+类名   com.mysql.jdbc.Driver
                                                方式2:
                                                        类名.class;
                                                方式3:
                                                        对象.getClass();——object类中的方法

  • 2、掌握:获取连接          getConnection

                                static Connection getConnection(String url, String user, String password) 

                                        参数1:告诉我们连接什么类型的数据库及连接那个数据库

                                                                协议:数据库类型:子协议 参数
                                                mysql:        jdbc:mysql://localhost:3306/数据库名称
                                                oracle:        jdbc:oracle:thin@localhost:1521@实例
                                                
                                        参数2:账户名 root
                                        参数3:密码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值