Java database connection:一套接口,定义所有关系型数据库使用Java访问的规则
class.forName("com.mysql.jdbc.driver");//注册驱动,可以省略 DriverManager.getConnection();//获取连接 string sql="";//定义sql connection.createStatement();//获取执行对象 statement.executeUpdate(sql);//执行修改方法 statement.close(); connection.close();
驱动管理对象,是一个类,用来注册驱动/获取连接对象
连接对象,获取执行对象,且与事务相关
执行对象,用来执行sql
增强型执行对象,将参数使用待定形式?来定义sql,在执行时赋值,以解决sql注入问题
sql注入问题: select * from user where username = dfjdf and password = dhfsdhf or 'a' = 'a';
使用:
在执行Java中,或遇到出现代码异常时,java中断,而前边的代码已经执行,我们为了使一些代码成为一个整体,同时成功,同时失败(不执行),我们设置事务,将开启事务在这些代码前,回滚写在catch中。使用connection来相关事务
装着connection对象的集合。
接口:datasource javax.sql包下的
方法:
选择
导包
c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
定义配置
创建核心对象
comboPooledDataSource
获取连接
导包
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); }
spring中的一个小工具,提供对jdbc的简单封装
步骤:
使用:
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);