zoukankan      html  css  js  c++  java
  • JDBC(c3p0)

    # JDBC

    Java Database Connectivity,java数据库连接

    JDBC的本质是java对所有关系型数据库连接操作所制定的一套规则,就是接口。

    不同的数据库针对这套规则制定了相对应的实现类,我们需要使用这些已经做好的实现类,来使用java对数据库进行连接和操作。

    步骤:

    1、导入jar包

    在项目的根目录中创建lib文件夹,将mysql-connector-java-5.1.37-bin复制到lib中
    右键点击该jar包选择 build path 点击 Add to build path

    try {
    //2、注册驱动
    Class.forName("com.mysql.jdbc.Driver");

    //3、获取连接对象
    //参数: 1、要访问的数据库,2、用户名 3、密码
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "root", "root");

    //4、SQL语句的编写
    String sql = "insert into student values(1007,'LOP',22,'女',98)";

    //5、获取执行对象
    state = conn.createStatement();


    //6、执行SQL语句
    int row = state.executeUpdate(sql);

    //7、处理执行结果
    if(row > 0){
    System.out.println("添加成功");
    }else{
    System.out.println("添加失败");
    }

    } catch (ClassNotFoundException e) {
    System.out.println("Driver类未找到");
    }catch (SQLException e) {
    System.out.println("访问的数据库有问题");
    }finally {
    //8、释放资源
    if(conn != null){
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(state != null){
    try {
    state.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    7、处理执行结果:

    如果是增删改,判断是否成功

    executeUpdate方法返回int ,用于判断增删改影响的行数

    如果是查询:

    executeQuery方法返回ResultSet结果集。查询得到的结果封装在集合中,

    需要遍历集合来获取所有查询结果


    方法:

    1、next(): 判断是否有下一个可以获取的结果集,返回布尔值
    2、getxxx(int):在指定的记录中,通过字段的位置获取字段值
    3、getxxx(String):在指定记录中通过字段名获得字段值


    代码:
    Result Set = state.executeQuery();
    while(set.next()){
    set.getxxx(int/String);s
    }


    ## 二、 PrepareStatement

    预编译的SQL

    作用:在拼接SQL语句字符串时,可以根据SQL语句的拼接时,在数据有误的情况下,完成功能的执行

    例如: xxx' or '1' = '1,完成登录时

    使用步骤:

    1、获取对象,并传入要执行的 SQL语句

    String sql = “ xxxxxxx”

    PrepareStatement state = conn.prepareStatement(sql)

    2、向SQL语句的占位符中添加数据

    state.setxxx(位置,数据)
    例如:

    sql = "select * from 表名 where username = ? and password = ?"

    state.setString(1,username)
    state.setString(2,password)


    3、执行SQL语句,不需要传入SQL语句

    state.executeQuery()或者state.executeUpdate()


    ## 三、 数据库连接池

    概念:数据库连接池的本质是一个存储若干数据库连接对象的容器(集合),用户在访问数据库时,可以直接从该容器中获取连接对象,对数据库进行操作,在使用完毕后,将此连接对象归还到池中。


    好处:

    1、节省资源

    2、提高访问效率


    DataSource连接池接口

    1、getConnection():获取连接
    2、close():释放连接

    一般这个接口不会由我们自己去实现,都由第三方做好的jar包

    1、c3p0:Apache的

    步骤:

    1、导入c3p0-0.9.5.2.jar 和mchange-commons-java-0.2.12.jar

    2、配置c3p0-config.xml文件

    3、获取连接池

    DataSource ds = new ComboPooledDataSource("连接池名称");

    4、获取连接对象

    ds.getConnection();

    5、归还连接(归还连接对象)

    ds.getConnection().close();


    dbUtils工具包:

    查询所有记录(对象的集合):

    BeanListHandler<实体类名>(实体类.class)

    例如:
    String sql = "select * from user";

    List<User> user = queryRunner.query(sql, new BeanListHandler<User>(User.class));

    查询单个记录(对象):

    BeanHandler<实体类名>(实体类.class),?的值)
    例如:
    String sql = "select * from user where id = ?";
    User user = queryRunner.query(sql, new BeanHandler<User>(User.class), id);

    查询聚合函数:

    ScalarHandler<实体类名>(实体类.class),?的值)
    例如:
    sql = "select count(*) from user where username like ?""
    long row = queryRunner.query(sql,new ScalarHandler<>(), x+"%");

    代码改变生活
  • 相关阅读:
    KVM安装配置
    cobbler配置解析
    denyhosts配置详解
    Rsync+sersync实现数据实时同步
    Linux启动提示Kernel panic
    oracle常用的数据字典
    Cachefiled
    from __future__ import division
    Java Map用法
    CCF系列之窗口(201403-2)
  • 原文地址:https://www.cnblogs.com/LTJAVA/p/11870749.html
Copyright © 2011-2022 走看看