• 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);
    坚持
  • 相关阅读:
    循环的注意点
    c语言实践输出某个区间中不是3的倍数的偶数
    while循环for循环优缺点和应用
    while 和do while循环的区别
    多重if else和switch case的区别
    if else的执行流程
    多个if和一个ifelse的区别
    对两个变量排序,从小到大输出
    【译】第四篇 Integration Services:增量加载-Updating Rows
    【译】第三篇 Integration Services:增量加载-Adding Rows
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12886725.html
Copyright © 2020-2023  润新知