JDBC:
jdbc是Java数据库连接技术的简称,提供连接各种常用数据库的能力
数据访问层:
DAO
data access object(数据存取对象)
位于业务逻辑和持久化数据之间
实现对持久化数据的访问
dao模式的组成:
1、dao接口
2、dao实现类
3、实体类
4、数据库连接和关闭工具类
public class BaseDao {
//驱动名称
private final String driverName="oracle.jdbc.driver.OracleDriver";
//连接的数据库url,jdbc:oracle:thin:固定写法,@后边是ip地址:,1521是数据库端口号,后边jredu是实例
private final String url="jdbc:oracle:thin:@localhost:1521:jredu";
private final String username="wl";
private final String password="Jredu12345";
//连接
Connection conn=null;
//准备连接数据库参数
PreparedStatement ps=null;
//结果集
ResultSet rs=null;
{
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("驱动加载失败...");
}
}
private void getConnection(){
try {
conn=DriverManager.getConnection(url,username,password);
System.out.println("数据库建立连接...");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败...");
}
}
/*
* 查询没有任何条件
*/
protected ResultSet excuteQuery(String sql){
getConnection();
try {
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("sql查询出现错误错误...");
}
return rs;
}
//查询一个参数
protected ResultSet excuteQuery(String sql,Object obj){
getConnection();
try {
ps=conn.prepareStatement(sql);
ps.setObject(1, obj);
rs=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("sql查询出现错误错误...");
}
return rs;
}
//查询时传递多个参数
protected ResultSet excuteQuery(String sql,Object[] objs){
getConnection();
try {
ps=conn.prepareStatement(sql);
if(objs!=null){
for(int i=0;i<objs.length;i++){
ps.setObject(i+1, objs[i]);
}
}
rs=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("sql查询出现错误错误...");
}
return rs;
}
//增删改操作
protected int excuteUpdate(String sql){
return excuteUpdate(sql, null);
}
protected int excuteUpdate(String sql,Object obj){
Object[] objs=new Object[1];
objs[0]=obj;
return excuteUpdate(sql, objs);
}
protected int excuteUpdate(String sql,Object[] objs){
getConnection();
int ret=-1;
try {
//手动提交事务
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
//封装sql语句
ps=conn.prepareStatement(sql);
for(int i=0;i<objs.length;i++){
ps.setObject(i+1, objs[i]);
}
//执行sql语句
ret=ps.executeUpdate();
conn.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("sql执行出现错误...");
}finally{
//关闭数据库连接
closeStatement();
}
return ret;
}
//关闭声明及连接
private void closeStatement(){
try {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void closeAll(){
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}