Java教程

JDBC相关——java学习笔记

本文主要是介绍JDBC相关——java学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java database connection:一套接口,定义所有关系型数据库使用Java访问的规则

入门

  1. 导入jar包
  2. 注册驱动
  3. 获取连接
  4. 定义sql
  5. 获取执行对象
  6. 执行sql
  7. 处理结果
  8. 释放资源
class.forName("com.mysql.jdbc.driver");//注册驱动,可以省略
DriverManager.getConnection();//获取连接
string sql="";//定义sql
connection.createStatement();//获取执行对象
statement.executeUpdate(sql);//执行修改方法
statement.close();
connection.close();

DriverManager

驱动管理对象,是一个类,用来注册驱动/获取连接对象

  • drivermannger.getConnection
  • drivermanager.registreDriver():Class.forName(“xxx”),xxx这个类中有静态代码块,调用的就是driver manager这个registerDriver方法

Connection

连接对象,获取执行对象,且与事务相关

  • con.CreateStatement()
  • con.preparedStatement()
  • con.setAutoCommit(boolean)
  • con.rollback()
  • con.commit()

Statement

执行对象,用来执行sql

  • int statement.executeUpdate()——DML&DDL,返回影响行数
  • resultSet statement.executeQuery()——DQL
  • statement.execute

preparedStatement

增强型执行对象,将参数使用待定形式?来定义sql,在执行时赋值,以解决sql注入问题

sql注入问题:
select * from user where username = dfjdf and password = dhfsdhf or 'a' = 'a';

使用:

  1. 导入jar包
  2. 注册驱动
  3. 获取连接
  4. 定义sql,使用?来待定参数
  5. 获取执行:connection.preparedStatement(sql)
  6. 问号赋值:setInt(第几个问号,值);setString(第几个问号,值)
  7. 执行sql:preparedStatement.executeUpdate()
  8. 释放资源:preparedStatement.close;connection.close;

事务

​ 在执行Java中,或遇到出现代码异常时,java中断,而前边的代码已经执行,我们为了使一些代码成为一个整体,同时成功,同时失败(不执行),我们设置事务,将开启事务在这些代码前,回滚写在catch中。使用connection来相关事务

连接池

装着connection对象的集合。

接口:datasource javax.sql包下的

方法:

  1. getConncetion()
  2. conn.close();是将连接返回给连接池

选择

  1. druid
  2. c3p0

c3p0

  1. 导包

    c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar

  2. 定义配置

  3. 创建核心对象

    comboPooledDataSource

  4. 获取连接

druid

  1. 导包

    druid-1.0.9.jar

  2. 定义配置

    druid.properties

  3. 加载配置

    通过properties集合+类加载器机制

  4. 获取连接池对象

    DruidDataSourceFactory.createDataSource(properties);
    

​ 使用

Properties properties = new Properties();
InputStream is = Demo1.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(is);
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();

一个工具类

为了简化获取连接对象,定义一个工具类,来加载驱动,来获取连接,来获取连接池

代码:

使用静态代码块,只执行一次,注册驱动,加载配置,初始化连接池对象

private static DataSource dataSource;
static {
    InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
    Properties properties = new Properties();
    try {
        properties.load(is);
        dataSource = DruidDataSourceFactory.createDataSource(properties);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

定义静态方法,返回连接对象

public static Connection getConnection() throws SQLException {
    return dataSource.getConnection();
}

定义静态方法,返回连接池对象

public static DataSource getDataSource(){
    return dataSource;
}

定义close,关闭资源

public static void close(ResultSet resultSet, Statement statement,Connection connection){
    if (resultSet!=null){
        try {
            resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (statement!=null){
        try {
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (connection!=null){
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
public static void close(Statement statement,Connection connection){
    close(null,statement,connection);
}

JDBCTemplate

spring中的一个小工具,提供对jdbc的简单封装

步骤:

  1. 导入jar包
  2. 创建jdbcTemplate对象
  3. 调用方法

使用:

  1. new jdbcTemplate(连接池对象)

  2. 方法

    1. 在方法中直接对sql的?进行赋值

    2. update()——DML

    3. queryForMap(),执行查询,封装为map集合,列明为键,列值为值

      如一个人,有id,姓名,年龄,则这个map有3个元素

      id=

      name=

      age=

    4. queryForList(),执行查询,封装为list集合,每个元素为一个map集合

    5. query(),封装为Javabean对象

      template.query(sql,new beanPropertyRowMapper<>(javabean.class),一些sql的参数)

    6. queryForObject():一般用于聚合函数

      String sql = "select count(id) from tab";
      Double count = jdbcTemplate.queryForObject(sql, double.class);
      
这篇关于JDBC相关——java学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!