连接池JDBCTemplate最完美模式

数据库元数据:

jdbcTemplate:

1.概述:

1.1元数据的基本概述

元数据:数据库,表,列的定义信息.

图表解释:

1.2ParameterMetaData

ParameterMetaData 可用于获取有关 PreparedStatement 对象中每个参数标记的类型和属性。

select * from user where name=? and password=?

// ParameterMetaData可以用来获取?的个数和类型

1.3如何获取

代码演示:

package com.luliang.DruidDataSource;

import com.luliang.JDBCbao.JdbcUtils2;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;

public class Demo01 {
    public static void main(String[] args) throws Exception{
        //1.获取连接
        Connection connection = JdbcUtils2.getConnection();
        //2.创建SQL执行平台
        //添加
        String sql="INSERT INTO liang(id,name,residese,salary) VALUES (NULL,?,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //执行SQL语句
        ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
        //处理运行结果
        System.out.println("参数个数:"+parameterMetaData.getParameterCount());
    }
}
//运行结果参数3个

ResuitSetMetaData获取结果集合中的列名和列类型

 如何获取ResultSetMetaData:

API介绍:

1.int getColumnCount() 返回 ResultSet对象的列数.

2..String getColumnName(int column) 获取指定列的名称
3.String getColumnTypeName(int column) 获取指定列的数据库特定类型名称

代码介绍:

package com.luliang.DruidDataSource;

import com.luliang.JDBCbao.JdbcUtils2;

import java.sql.*;

public class Demo01 {
    public static void main(String[] args) throws Exception{
        //1.获取连接
        Connection connection = JdbcUtils2.getConnection();
        //2.创建SQL执行平台
        //添加
        //String sql="INSERT INTO liang(id,name,residese,salary) VALUES (NULL,?,?,?)";
        String sql="SELECT *FROM  liang WHERE id=1";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //执行SQL语句
        // ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
        ResultSet resultSet = preparedStatement.executeQuery();
        //处理运行结果
        //获取结果集元数据
        ResultSetMetaData metaData = resultSet.getMetaData();
        int columnCount = metaData.getColumnCount();
        System.out.println("列数:"+columnCount);
        //System.out.println("参数个数:"+parameterMetaData.getParameterCount());
        //遍历输出
        for(int i=0;i<columnCount;i++){
            System.out.println("列名:"+metaData.getColumnName(i+1));
            System.out.println("列类型:"+metaData.getColumnTypeName(i+1));
            System.out.println("===========");
        }
    }
}
//运行结果参数3个

 

JdbcTemplate:

概念:


  JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取 PreparedStatement,设置SQL语句参数,关闭连接等步骤。JdbcTemplate就是Spring对JDBC的封装,目的是使 JDBC更加易于使用。JdbcTemplate是Spring的一部分。   JdbcTemplate处理了资源的建立和释放。他帮助我们避 免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需 要提供SQL语句和提取结果。 Spring源码地址:https://github.com/spring-projects/spring-framework 在 JdbcTemplate中执行SQL语句的方法大致分为3类:

1. execute :可以执行所有SQL语句,一般用于执行DDL语句。

2. update :用于执行 INSERT 、 UPDATE 、 DELETE 等DML语句。

3. queryXxx :用于DQL数据查询语句


数据库语句:

DDL:数据定义语言:定义datebase,table等等.

1.创建datadase:create database 库名称; 列:CREATE DATABASE lu;

2.删除database: drop database库名称;例如:DROP DATABASE lu;

DML:  数据操作语言:增,删,改数据的。

添加数据:INSERT INTO lu VALUES(1,'大朗',40,'男','1111-11-11');

删除数据:DELETE FROM lu WHERE id=3;

修改数据:UPDATE lu SET sex='男' WHERE id=4;

DQL:  数据查询语言:查询语句的。

单表查询语句:SELECT*FROM lu;

查询lu表里所有的姓名和年龄:SELECT NAME,age FROM lu;

DCL:  数据控制语言,DBA使用的,管理MySql的权限,创建用户,授权管理。

TCL:   事务管理语言,管理事务的.


2.JdbcTemplate使用过程:

2.1Druid基于配置文件实现连接池

APL介绍:

execute方法的使用:

代码演示:

//创建表
public class Demo01 {
    public static void main(String[] args) throws Exception{
        String sql="CREATE TABLE lu(" +
                "id INT PRIMARY KEY AUTO_INCREMENT," +
                "name VARCHAR (20)," +
                "price DOUBLE " +
                ");";
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
        jdbcTemplate.execute(sql);
    }

JdbcTemplate实现增删改:

public int update(final String sql)

用于执行'INSERT','UPDATE','DELETE'等DML语句

增:

@Test
    public void test1(){
        //1.添加数据
        //创建
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
        String sql="INSERT INTO lu(id,name,price)VALUES (NULL ,?,?)";
        int i = jdbcTemplate.update(sql, "张无忌", 10000);
        int i1 = jdbcTemplate.update(sql, "张三丰", 1000000);
    }

删:

@Test
    public void test2(){
        //2.删除数据
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
        String sql="DELETE FROM lu WHERE id=?";
        int update = jdbcTemplate.update(sql,3);
        System.out.println("影响的行数:"+update);
    }

改:

 @Test
    public void test3(){
        //修改数据
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
        String sql="UPDATE lu set price=? WHERE id=?";
        int update = jdbcTemplate.update(sql,500,2);
        System.out.println("影响的行数:"+update);
    }

2.JdbcTemplate实现查询

2.1queryForint返回一个整数

public int queryForint(String sql)

执行查询语句,返回一个int类型的值.

使用步骤:

1. 创建JdbcTemplate对象

2. 编写查询的SQL语句

3. 使用JdbcTemplate对象的queryForMap方法

4. 输出结果

代码演示:

@Test
    public void test5(){
        //1.创建JdbcTemplate对象,传入数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
        //2.编写SQL语句
        String sql="SELECT*FROM emp WHERE name=?";
        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql,"孙悟空");
        //返回一个Map对象
        System.out.println(stringObjectMap);
    }

 

2.3使用步骤

DQL查询

查询一条语句可以封装成Map

代码演示:

@Test
    public void test6(){
        //1.创建JdbcTemplate对象,传入数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
        //2.编写SQL语句
        String sql="SELECT*FROM lu WHERE id=?";
        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql,1);
        System.out.println(stringObjectMap);
    }

查询一条记录封装成bean对象

需求:

查询id为1的一条记录封装成自定义的类:

代码演示:

@Test
    public void test7(){
                //1. 创建JdbcTemplate对象,传入数据源
                JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils2.getDataSource());
                //2. 编写SQL语句
                String sql = "SELECT *FROM user WHERE id = ?";
                //3. 使用JdbcTemplate对象的queryForObject ()方法查询结果,方法中传入一个接口的匿名内部类
                User user = jdbcTemplate.queryForObject(sql, new RowMapper<User>() {
                    @Override
                    public User mapRow(ResultSet resultSet, int i) throws SQLException {
                        User user= new User();
                        user.setId(resultSet.getInt("id"));
                        user.setName(resultSet.getString("name"));
                        user.setGender(resultSet.getString("gender"));
                        user.setBirthday(resultSet.getDate("birthday"));
                        return user;
                    }
                }, 1);
                // 4. 返回是一个User对象
                System.out.println(user);
            }

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值