经过两天多的康师傅教导,我学会了如何利用JDBC(Java Data Base Connectivity)对MySQL进行数据库操作。目前来说最终的模板是利用德鲁伊数据库连接池,以及结合数据库事务知识,Apache-DBUtils的框架,和JDBC的API设计出最终JAVA操作数据库的模版。
1.获取数据库的连接
Connection conn = JDBCUtils.getConnection(); //方式1:手动获取连接 方式2:数据库连接池
conn.setAutoCommit(false); //体现事务
2.如下的多个DML操作,作为一个事务出现:
操作1:需要使用通用的增删改查操作 //通用的增删改查操作如何实现?
//方式1:手动使用PreparedStatement实现
操作2:需要使用通用的增删改查操作 //方式2:使用dbutils.jar中QueryRunner类
操作3:需要使用通用的增删改查操作
conn.commit();
3.如果出现异常,则:
conn.rollback();
4.关闭资源
JDBCUtils.closeResource(..,...,...); //方式1:手动关闭资源 方式2:DbUtils类的关闭方法
德鲁伊数据库连接池实现!!
/**
* 使用Druid德鲁伊数据库“连接池”技术
*/
private static DataSource source1;
static{
try {
Properties pros = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
pros.load(is);
source1 = DruidDataSourceFactory.createDataSource(pros);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection3() throws SQLException{
Connection conn = source1.getConnection();
return conn;
}
手动获取数据库连接:(其次)
public static Connection getConnection() throws Exception {
// 1.读取配置文件中的4个基本信息
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
// 2.加载驱动
Class.forName(driverClass);
// 3.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
使用dbutils.jar中QueryRunner类(首选)
手动使用PreparedStatement实现,之前文章有写到终极版(其次)
方式1:手动关闭资源
public static void closeResource(Connection conn,Statement ps,ResultSet rs){
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
方式2:DbUtils类的关闭资源方法
/**
*
* @Description 使用dbutils.jar中提供的DbUtils工具类,实现资源的静关闭
* @author shkstart
* @date 下午4:53:09
* @param conn
* @param ps
* @param rs
*/
public static void closeResource1(Connection conn,Statement ps,ResultSet rs){
DbUtils.closeQuietly(conn);
DbUtils.closeQuietly(ps);
DbUtils.closeQuietly(rs);
}
最终模板实例演示:
//测试插入
@Test
public void testInsert() {
Connection conn = null;
try {
QueryRunner runner = new QueryRunner();
conn = JDBCUtils.getConnection3();
System.out.println(conn.getAutoCommit());//true
//1.取消数据的自动提交
conn.setAutoCommit(false);
String sql = "insert into customers(name,email,birth)values(?,?,?)";
int insertCount = runner.update(conn, sql, "蔡","caixukun@126.com","1997-09-08");
//模拟网络异常
System.out.println(10 / 0);
System.out.println("添加了" + insertCount + "条记录");
//2.提交数据
conn.commit();
} catch (Exception e) {
e.printStackTrace();
//3.回滚数据
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JDBCUtils.closeResource(conn, null);
}
}
使用API时记得编写配置文件喔
以下是德鲁伊线程池的
以下是JDBC的配置文件