您的位置:首页 > 数据库 > Oracle

Java连接Oracle—数据访问层—增删改查

2019-04-09 19:56 99 查看

分层模式是一种常见的架构模式,今天我就分享一下,最底层的数据访问层,访问Oracle数据库并进行增删改查的代码!
要实现访问Oracle数据库,需要加载一个ojdbc.jar包,下载这个jar包后,将其放入项目的目录里,然后build path就行了。
下面就直接分享代码了!

import java.sql.*;
import java.util.List;

public abstract class BaseDao {
private final static String DBDriver="oracle.jdbc.OracleDriver"; 		**//驱动路径,就是刚导入的jar包**
private final static String DBURL="jdbc:oracle:thin:@localhost:1521:orcl";
**//@前面的照写,后面的localhost代表本地服务器,1521为Oracle数据库的端口号,orcl是数据库安装时设置的数据库名.**
private final static String DBUser="root"; //数据库名称
private final static String DBPasswd="123456";  //密码

public static Connection conn = null;
public ResultSet rs = null;
public PreparedStatement pst;

/////////////////////////////////////////////////加载驱动、创建链接
public static Connection getConnection(){

try {
Class.forName(DBDriver);
conn = DriverManager.getConnection(DBURL,DBUser,DBPasswd);
} catch (Exception e) {
e.printStackTrace();
}
if(conn == null)
{
System.out.print("Line:27   数据库连接失败!");
}

return conn;
}

/////////////////////////////////////////////////查询
public ResultSet doQuery(String sql)
{
return doQuery(sql , new Object[]{});
}

public ResultSet doQuery(String sql , Object[] param){
//sql需要编写后传入,sql可以带参数,带参的地方用?代替,第二个参数是需要传入的参数数组
conn = BaseDao.getConnection();
try {
pst = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}

for(int i=0 ; i<param.length ; i++)
{
try {
pst.setObject(i+1, param[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}

try {
rs = pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

////////////////////////////////////////////////////更新
public int doUpdate(String sql){
return doUpdate(sql , new Object[]{});
}

public int doUpdate(String sql , Object[] param){
//sql需要编写后传入,sql可以带参数,带参的地方用?代替,第二个参数是需要传入的参数数组
int result = 0;
conn = BaseDao.getConnection();
try {
pst = conn.prepareStatement(sql);
} catch (SQLException e1) {
e1.printStackTrace();
}
for(int i=0 ; i<param.length ; i++)
{
try {
pst.setObject(i+1, param[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
result = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;

}

////////////////////////////////////////////////插入
public int doInsert(String sql)
{
return doUpdate(sql);

}
public int doInsert(String sql , Object[] param)
{
return doUpdate(sql , param);

}

//////////////////////////////////////////////删除
public int doDelete(String sql)
{
return doUpdate(sql);
}
public int doDelete(String sql , Object[] param)
//sql需要编写后传入,sql可以带参数,带参的地方用?代替,第二个参数是需要传入的参数数组
{
return doUpdate(sql , param);
}

//////////////////////////////////////////////关闭连接
public void closeConnection(){
if(rs!=null)
{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst!=null)
{
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

//////////////////////////////////////////////对结果集进行处理
public abstract <T> List<T> resultSetToList(ResultSet ret);
}

这里查询、修改、更新、删除都重写了两个方法,一个带参的,一个不带参,增加了代码的灵活性,不过也使代码臃肿了,你们可以自行简化。需要注意的是,查询返回的是ResutSet结果集,其他三个操作都基于更新,返回的是int类型影响的行数,在业务逻辑层应用相对应的变量接收返回值!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: