单元测试
注意:①测试方法上必须使用@Test进行修饰
?
②测试方法必须使用public void 进行修饰,不能带任何的参数
?
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
?
④测试类所在的包名应该和被测试类所在的包名保持一致
?
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
?
⑥测试类使用Test作为类名的后缀(不是必须)
?
⑦测试方法使用test作为方法名的前缀(不是必须)
@BeforeClass 执行所有测试方法之前执行,只执行一次
@Before 在测试方法执行之前运行
@After 在测试方法执行之后运行
@AfterClass 执行所有测试方法之后执行,只执行一次
JDBC
Driver 驱动
?
DriverManager 驱动管理类
?
Connection 负责连接数据库
?
Statement 负责执行命令
?
ResultSet 封装结果集
?
PreparedStatment 预编译命令
1.注册驱动(支持自动注册,不写也行)
Class.forName("com.mysql.jdbc.Driver");
2.获取连接对象
String url = "jdbc:mysql://localhost:3306/myschool?useSSL=true&characterEncoding=utf8";
Connection conn = DriverManager.getConnection(url, "root", "root");
3.创建命令
Statement stmt = conn.createStatement( );
4.执行命令
stmt.execute( String sql );
execute 执行任意的SQL语句
executeUpdate 执行DML,增删改 create语句
executeQuery 执行Select语句
PreparedStatement
作用:1.预编译,效率高 2.安全,避免SQL注入 ?占位符 用 setXxx 给占位符赋值
使用类加载器,加载配置文件
Properties properties =new Properties();
InputStream is = DbUtils.class.getClassLoader().getResourceAsStream("db.properties");
properties.load(is);
is.close();
JDBC批处理
提高批处理效率
rewriteBatchedStatements=true (PrepareStatement 有效)
批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用提交它们。
当需要一次向数据库发送多个SQL语句时,可以减少连接数据库的开销,从而提高性能。
1. Statement 批处理
- 1 注册驱动获取连接
- 2 使用 createStatement()方法创建Statement对象。
- 3 使用 setAutoCommit()将auto-commit设置为false 。
- 4 使用 addBatch()*方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
- 5 在创建的语句对象上使用 executeBatch()方法执行所有SQL语句。
- 6 使用 commit()*方法提交所有更改。
- 7 释放资源
2. PrepareStatement 批处理
1. 使用占位符创建SQL语句。
2. 使用 prepareStatement()方法创建PrepareStatement对象。
3. 使用 addBatch()方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
4. 在创建的语句对象上使用 executeBatch()方法执行所有SQL语句。
JDBC操作二进制
PreparedStatement对象可以使用输入和输出流来提供参数数据。这使您可以将整个文件放入可以保存大值的数据库列,例如Text和BLOB数据类型。
- setAsciiStream():此方法用于提供大的ASCII值。
- setCharacterStream():此方法用于提供大型UNICODE值。
- setBinaryStream():此方法用于提供较大的二进制值。
JDBC事务
开启事务: conn.setAutoCommit(false);
提 交: conn.commit();
回 滚: conn.rollback();
定义保存点: setSavepoint();
删除保存点: releaseSavepoint();
DBCP连接池
Properties properties = new Properties();
InputStream is = DbUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");
properties.load(is);
dataSource = BasicDataSourceFactory.createDataSource(properties);
dataSource.getCollection();
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/school
username=root
password=root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxTotal=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWaitMillis=5000
C3P0连接池
c3p0与dbcp区别:
dbcp需要手动加载配置文件
c3p0自动加载
dataSource = new ComboPooledDataSource();
dataSource.getCollection();
#配置文件
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/mydb2?useSSL=true&characterEncoding=utf8
c3p0.user=root
c3p0.password=root
c3p0.acquireIncrement=5
c3p0.initialPoolSize=20
c3p0.minPoolSize=10
c3p0.maxPoolSize=40
Druid连接池
Properties properties = new Properties();
InputStream is = DbUtils_Druid.class.getClassLoader().getResourceAsStream("driud.properties");
properties.load(is);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/school
username=root
password=root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=5000