泛微OAe9-后端二开常见数据库操作

发布于:2025-06-24 ⋅ 阅读:(13) ⋅ 点赞:(0)

泛微OAe9-后端二开常见数据库操作


一、RecordSet

RecordSet 适用于操作 OA 自己的库。OA 数据库可查看配置文件:/WEB-INF/prop/weaver.properties

RecordSet 特点:

  • 1、不带事务,参数可以进行预编译,安全性高。
  • 2、通过连接池操作数据库,性能高,断网重连。
  • 3、不会抛出异常,需要去日志文件中查看 log文件。
1 RecordSet 操作OA本身的表

代码演示:

RecordSet rs = new RecordSet();
rs.execute("insert into test_xizhilang(name,age)values('1','12')"); //新增数据
rs.executeSql("insert into test_xizhilang(name,age)values('1','2')");
rs.execute("update test_xizhilang set name='张三' where id=1"); //修改数据
//删除数据
rs.execute("delete test_xizhilang where id=1");
//查询数据
rs.execute("select * from hrmresource ");
while(rs.next()){
	String id=rs.getString("id");//===rs.getString("id");
	String loginid=rs.getString("loginid");
	String lastname=rs.getString("lastname");
}
// 数据库操作完成

对于预编译,参数可以直接写在后面,安全性高,代码演示;

RecordSet rs = new RecordSet();
rs.executeQuery("select * from hrmresource where id=?", "49");
if(rs.next()){
	System.out.println(rs.getString("lastname"));
}
rs.executeUpdate("insert into test_xizhilang(name,age)values(?,?)", "11","22");

2 RecordSet 操作OA 本身的存储过程

RecordSet 操作存储过程特点:

  • 1、 Util.getSeparator();分隔传个存储过程的多个参数。
  • 2、泛微API要求OA存储过程必须带有固定的参数。
  • 3、不会抛出异常,需要去日志文件中查看。
RecordSet rs = new RecordSet();
char flag = Util.getSeparator();
String ProcPara = "王五" + flag + "18"; //拼接2个参数
rs.executeProc("存储过程的名称", ProcPara);
if(rs.next()){
	//接收存储过程的返回值
	System.out.println("接收的参数="+rs.getString(1));
} 	

在这里插入图片描述


二、RecordSetTrans

RecordSetTrans 也是用于操作 OA 本身的数据库。OA 数据库可查看配置文件:/WEB-INF/prop/weaver.properties

RecordSetTrans 特点:

  • 1、支持事物处理,支持原子性操作。也是 RecordSetTrans 最大的特点
  • 2、不会抛出异常,需要去日志文件中查看。

代码演示:

RecordSetTrans rst = new RecordSetTrans();
try {
  	rst.setAutoCommit(false); //开启事务
  	rst.executeSql("delete from test_xizhilang where id=5");
  	rst.executeSql("delete from test_xizhilang where id=4");
  	String s = null;
  	s.toCharArray();
  	rst.commit(); // 提交事务
} catch (Exception e) {
 	e.printStackTrace();
	rst.rollback();  // 执行失败,回滚数据
}

三、RecordSetDataSource

RecordSetDataSource 用于操作OA集成的第三方系统的数据库:后端 - > 集成中心 -> 数据源设置。RecordSetDataSource也可以用于操作OA本身的数据库,RecordSetDataSource rds = new RecordSetDataSource(),括号内不传参默认就是OA本身的数据库。

RecordSetDataSource特点:

  • 1、直接操作第三方数据,不支持事务;
  • 2、不会抛出异常,需要去日志文件中查看;

代码演示:

String sql = "select id, lastname, loginid, sex from hrmresource";
RecordSetDataSource rs2 = new RecordSetDataSource("数据源名称(建议英文)");
rs2.execute(sql);
while(rs2.next()){
	//下标从1开始
   String hehe = rs2.getString(4);
   System.out.println("hehe=" + hehe);
}

rs2.getString():获取查询的数据,有两种方式:

  • 1、rs2.getString(“列名”):获取指定的列。
  • 2、rs2.getString(数字):数字下标从1开始,获取指定下标的列。如上面代码中,rs2.getString(4) 获取 sex 的值。

数据源名称,建议英文,不要用中文。

在这里插入图片描述


四、原生 jdbc

操作OA本身的数据库,事务操作有 RecordSetTrans,如果要操作第三方系统的库,也需要事务操作,可采用原生 jdbc 的方法。

建立连接:

public static Connection getConnection() {
	String datasourceName = "x"; // x对应后端->集成中心->数据源设置->数据源名称
	Connection conn = null;
	try {
		DataSource datasource = (DataSource) StaticObj.getServiceByFullname("datasource."+datasourceName, DataSource.class);  //获取数据源的信息
		conn = datasource.getConnection(); // 和数据源取得连接
	} catch (Exception e) {
		e.printStackTrace();
		logger.error(e);
	}
	return conn;
}

开启事务

Connection conn = null;
PreparedStatement ps = null;
try {
    String sql2 = "";
    conn = DBUtil.getConnection();
    conn.setAutoCommit(false); // 手动开启事务
    for (Map<String, Object> tab : tableData) {
        sql2 = "INSERT INTO SAP_KUNNR_DATA(KUNNR, TELF1, KTOKD, SMTP_ADDR, REGIO, STRAS, LOEVM, LAND1, ORT01, KUKLA, NAME1) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        PreparedStatement statement = conn.prepareStatement(sql2);
        statement.setString(1, tab.get("KUNNR").toString());
        statement.setString(2, tab.get("TELF1").toString());
        statement.setString(3, tab.get("KTOKD").toString());
        statement.setString(4, tab.get("SMTP_ADDR").toString());
        statement.setString(5, tab.get("REGIO").toString());
        statement.setString(6, tab.get("STRAS").toString());
        statement.setString(7, tab.get("LOEVM").toString());
        statement.setString(8, tab.get("LAND1").toString());
        statement.setString(9, tab.get("ORT01").toString());
        statement.setString(10, tab.get("KUKLA").toString());
        statement.setString(11, tab.get("NAME1").toString());
        statement.executeUpdate();
    }
    conn.commit();
} catch (SQLException e) {
    try {
        conn.rollback(); // 如果失败就回滚事务,默认自动回滚
    } catch (SQLException ex) {
        ex.printStackTrace();
        logger.error("出错了:"+ex.getMessage());
    }
    e.printStackTrace();
}

网站公告

今日签到

点亮在社区的每一天
去签到