Java database connection:一套接口,定义所有关系型数据库使用Java访问的规则
入门
- 导入jar包
- 注册驱动
- 获取连接
- 定义sql
- 获取执行对象
- 执行sql
- 处理结果
- 释放资源
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';
使用:
- 导入jar包
- 注册驱动
- 获取连接
- 定义sql,使用?来待定参数
- 获取执行:connection.preparedStatement(sql)
- 问号赋值:setInt(第几个问号,值);setString(第几个问号,值)
- 执行sql:preparedStatement.executeUpdate()
- 释放资源:preparedStatement.close;connection.close;
事务
 在执行Java中,或遇到出现代码异常时,java中断,而前边的代码已经执行,我们为了使一些代码成为一个整体,同时成功,同时失败(不执行),我们设置事务,将开启事务在这些代码前,回滚写在catch中。使用connection来相关事务
连接池
装着connection对象的集合。
接口:datasource javax.sql包下的
方法:
- getConncetion()
- conn.close();是将连接返回给连接池
选择
- druid
- c3p0
c3p0
-  导包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar 
-  定义配置 
-  创建核心对象 comboPooledDataSource 
-  获取连接 
druid
-  导包 druid-1.0.9.jar 
-  定义配置 druid.properties 
-  加载配置 通过properties集合+类加载器机制 
-  获取连接池对象 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的简单封装
步骤:
- 导入jar包
- 创建jdbcTemplate对象
- 调用方法
使用:
-  new jdbcTemplate(连接池对象) 
-  方法 -  在方法中直接对sql的?进行赋值 
-  update()——DML 
-  queryForMap(),执行查询,封装为map集合,列明为键,列值为值 如一个人,有id,姓名,年龄,则这个map有3个元素 id= name= age= 
-  queryForList(),执行查询,封装为list集合,每个元素为一个map集合 
-  query(),封装为Javabean对象 template.query(sql,new beanPropertyRowMapper<>(javabean.class),一些sql的参数) 
-  queryForObject():一般用于聚合函数 String sql = "select count(id) from tab"; Double count = jdbcTemplate.queryForObject(sql, double.class);
 
-  










