2阶——JDBC,JDBCTemplate(操作数据库)

JDBC:操作所有关系型数据库的规则,即接口;各个数据库厂商去实现接口提供所谓的驱动jar

1:导入jar包

2:注册驱动

3:获取数据库连接对象Connection

4: 定义Sql

5: 获取Statement对象

6 执行sql接收返回结果 resultset

7:释放资源

package cn.jdbc;

import com.mysql.jdbc.Driver;

import java.sql.*;

public class Demo1 {
    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/day11";
        String username = "root";
        String password = "123456";
        
        try {
            Class.forName("com.mysql.jdbc.Driver"); //将Driver类加载到内存 就会自动执行以下的静态代码块

           // com.mysql.jdbc.Driver 通过查看源码Driver中含有以下静态代码块
//            static {
//                try {
//                    DriverManager.registerDriver(new Driver());
//                } catch (SQLException var1) {
//                    throw new RuntimeException("Can't register driver!");
//                }
//            }

            
            Connection cn = DriverManager.getConnection(url,username,password);

            String sql = "select * from day11";

            PreparedStatement sta = cn.prepareStatement(sql);
            ResultSet rs = sta.executeQuery();

            while (rs.next()){
                int id = rs.getInt(1);
                String name = rs.getString(2);
                System.out.println(id+"___"+name);
            }


            rs.close();
            sta.close();
            cn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

JdbcTemplate简介

  参见:https://www.cnblogs.com/caoyc/p/5630622.html

  Spring对数据库的操作在jdbc上面做了简单的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

 

 

  JdbcTemplate主要提供以下方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

  • query方法及 queryForXXX 方法:用于执行查询相关语句;

  • call 执行存储过程

   

      主要代码

<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/xxx</property>
    <property name="user">root</property>
    <property name="password"></property>
    
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">10</property>
    <property name="checkoutTimeout">3000</property>
  </default-config>

  <named-config name="otherc3p0"> 
  </named-config>
</c3p0-config>

 

 

//c3p0连接池核心对象会自动去读取src下的c3p0-config.xml配置文件 ComboPooledDataSource dataSource = new ComboPooledDataSource(); JdbcTemplate temp = new JdbcTemplate(dataSource); // 自动获取conncetion对象 自动释放资源

操作代码

package cn.jdbctemplate;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.*;

public class Demo1 {
    public static void main(String[] args) {
        //c3p0连接池核心对象会自动去读取src下的c3p0-config.xml配置文件
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        JdbcTemplate temp = new JdbcTemplate(dataSource);
        // 自动获取conncetion对象 自动释放资源

        //update  执行更新
        String sql = "update day17 set name = 222222 where id = ? ";
        //temp.update(sql,1);

        //执行插入
        String sql2 = "insert into day17(id,name) values( ? , ? ) ";
        //temp.update(sql2,5,"insert..");

        //执行删除
        String sql3 = "delete from day17 where id = ? ";
        temp.update(sql3,5);


       //...................查询....................

        //queryForMap   查询的结果必须是唯一的!不然报错
        String sql4 = "select * from day17 where id = ? ";
        //Map<String, Object> map = temp.queryForMap(sql4,1);
        //System.out.println(map);  //{id=1, name=222222}

        //queryForList
        String sql5 = "select * from day17";
       // List<Map<String, Object>> maps = temp.queryForList(sql5);
        //for(Map<String,Object> m : maps){
            //System.out.println(m);
            //{id=1, name=222222}
            //{id=2, name=电脑部1}
        //}


        //query   将查询的数据封装javabean再存入集合中
        List<Student> list = temp.query(sql5, new BeanPropertyRowMapper<Student>(Student.class));
        for(Student s : list){
            System.out.println(s);
            //Student{id=1, name='222222'}
           // Student{id=2, name='电脑部1'}
        }

        //queryForObject     一般执行聚合函数
        String st = "select count(id) from day17";
        Long aLong = temp.queryForObject(st, Long.class);
        System.out.println(aLong);

    }
}

 

//批量操作

String sql="insert into user (name,deptid) values (?,?)";

List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"caoyc",6});
batchArgs.add(new Object[]{"zhh",8});
batchArgs.add(new Object[]{"cjx",8});

jdbcTemplate.batchUpdate(sql, batchArgs);

 

posted @ 2020-05-14 10:10  gaoshengjun  阅读(188)  评论(0编辑  收藏  举报