1。导包
(1).commons-dbcp-1.4.jar
(2)commons-dbutils-1.4.jar
(3)commons-pool-1.5.6.jar
(4)mysql-connector-java-5.0.8-bin.jar
2。数据库配置文件:
#\u8FDE\u63A5\u8BBE\u7F6E
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day18
username=root
password=admin
#<!-- \u521D\u59CB\u5316\u8FDE\u63A5 -->
initialSize=10
#\u6700\u5927\u8FDE\u63A5\u6570\u91CF
maxActive=50
#<!-- \u6700\u5927\u7A7A\u95F2\u8FDE\u63A5 -->
maxIdle=20
#<!-- \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5 -->
minIdle=5
#<!-- \u8D85\u65F6\u7B49\u5F85\u65F6\u95F4\u4EE5\u6BEB\u79D2\u4E3A\u5355\u4F4D 6000\u6BEB\u79D2/1000\u7B49\u4E8E60\u79D2 -->
maxWait=60000
#JDBC\u9A71\u52A8\u5EFA\u7ACB\u8FDE\u63A5\u65F6\u9644\u5E26\u7684\u8FDE\u63A5\u5C5E\u6027\u5C5E\u6027\u7684\u683C\u5F0F\u5FC5\u987B\u4E3A\u8FD9\u6837\uFF1A[\u5C5E\u6027\u540D=property;]
#\u6CE8\u610F\uFF1A"user" \u4E0E "password" \u4E24\u4E2A\u5C5E\u6027\u4F1A\u88AB\u660E\u786E\u5730\u4F20\u9012\uFF0C\u56E0\u6B64\u8FD9\u91CC\u4E0D\u9700\u8981\u5305\u542B\u4ED6\u4EEC\u3002
connectionProperties=useUnicode=true;characterEncoding=utf8
#\u6307\u5B9A\u7531\u8FDE\u63A5\u6C60\u6240\u521B\u5EFA\u7684\u8FDE\u63A5\u7684\u81EA\u52A8\u63D0\u4EA4\uFF08auto-commit\uFF09\u72B6\u6001\u3002
defaultAutoCommit=true
#driver default \u6307\u5B9A\u7531\u8FDE\u63A5\u6C60\u6240\u521B\u5EFA\u7684\u8FDE\u63A5\u7684\u53EA\u8BFB\uFF08read-only\uFF09\u72B6\u6001\u3002
#\u5982\u679C\u6CA1\u6709\u8BBE\u7F6E\u8BE5\u503C\uFF0C\u5219\u201CsetReadOnly\u201D\u65B9\u6CD5\u5C06\u4E0D\u88AB\u8C03\u7528\u3002\uFF08\u67D0\u4E9B\u9A71\u52A8\u5E76\u4E0D\u652F\u6301\u53EA\u8BFB\u6A21\u5F0F\uFF0C\u5982\uFF1AInformix\uFF09
defaultReadOnly=
#driver default \u6307\u5B9A\u7531\u8FDE\u63A5\u6C60\u6240\u521B\u5EFA\u7684\u8FDE\u63A5\u7684\u4E8B\u52A1\u7EA7\u522B\uFF08TransactionIsolation\uFF09\u3002
#\u53EF\u7528\u503C\u4E3A\u4E0B\u5217\u4E4B\u4E00\uFF1A\uFF08\u8BE6\u60C5\u53EF\u89C1javadoc\u3002\uFF09NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
3。工具类:
package com.itheima.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBCPUtil {
private static DataSource dataSource;
static{
try {
InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties props = new Properties();
props.load(in);
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
4。使用DBUtil框架
DBUtilCRUD.java文件:
package com.itheima.dbutil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.Date;
import javax.sql.rowset.serial.SerialBlob;
import javax.sql.rowset.serial.SerialClob;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import com.itheima.util.DBCPUtil;
/*
create database day18;
use day18;
create table student(
id int primary key,
name varchar(100),
birthday date
);
*/
public class DBUtilCRUD {
private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
@Test
public void testAdd() throws SQLException{
qr.update("insert into student values(?,?,?)", 6,"zhangsan",new Date());
}
@Test
public void testUpdate() throws SQLException{
qr.update("update student set birthday=? where id=?", "1993-08-01",1);
}
@Test
public void testDel() throws SQLException{
qr.update("delete from student where id=?", 1);
}
//批处理插入10条
@Test
public void testBatch() throws SQLException{
Object params[][] = new Object[10][];//高维:记录的条数。低维:每条记录需要的参数
for(int i=0;i<params.length;i++){
params[i] = new Object[]{i+1,"杨洋"+(i+1),new Date()};
}
qr.batch("insert into student values(?,?,?)", params);
}
//大文本:了解
/*
create table t1(
id int primary key,
content longtext
);
*/
@Test//大文本类型===Clob
public void testClob()throws Exception{
File file = new File("src/pqy&sx.txt");//文件很大,内存浪费
Reader reader = new FileReader(file);
char ch[] = new char[(int)file.length()];
reader.read(ch);
reader.close();
Clob clob = new SerialClob(ch);
qr.update("insert into t1 values(?,?)", 1,clob);//类型不批配。流不是数据库的类型
}
//大二进制:了解
/*
create table t2(
id int primary key,
content longblob
);
*/
@Test//大二进制类型===Blob
public void testBlob()throws Exception{
InputStream in = new FileInputStream("src/22.jpg");
byte b[] = new byte[in.available()];
in.read(b);
in.close();
Blob blob = new SerialBlob(b);
qr.update("insert into t2 values(?,?)", 1,blob);//类型不批配。流不是数据库的类型
}
}