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+"%");

    代码改变生活
  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    block的是发送信号的线程,又不是处理槽函数的线程
  • 原文地址:https://www.cnblogs.com/LTJAVA/p/11870749.html
Copyright © 2011-2022 走看看