当前位置: 首页 > news >正文

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

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


文章目录

    • 泛微OAe9-后端二开常见数据库操作
      • 一、RecordSet
        • 1 RecordSet 操作OA本身的表
        • 2 RecordSet 操作OA 本身的存储过程
      • 二、RecordSetTrans
      • 三、RecordSetDataSource
      • 四、原生 jdbc

一、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();
}
http://www.lqws.cn/news/444871.html

相关文章:

  • C++实现手写strlen函数
  • AI Agent与Agentic AI:原理、应用、挑战与未来展望
  • C++11 lambda 表达
  • c++读写锁
  • CppCon 2017 学习:folly::Function A Non-copyable Alternative to std::function
  • AWK在网络安全中的高效应用:从日志分析到威胁狩猎
  • 基于Python的机动车辆推荐及预测分析系统
  • GRBL_UNO R3编译下载
  • 2025虚幻引擎文件与文件夹命名规律
  • 质检滞后?物料浪费?MES系统破解传统制造七大死结
  • 火山引擎TTS使用体验
  • VAE:变分自编码器
  • CHATERM AI:开启云资源氛围管理新篇章!
  • C++位图
  • 数据结构 6(算法)
  • Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系
  • GNSS介绍
  • 李宏毅《生成式人工智能导论》| 第1讲:什么是生成式人工智能
  • 可口可乐的营销转型如何促成Smartwater的新广告活动
  • 攻防演练:1.木马后门文件演练
  • 选择标签词汇功能(单选多选),在文本框展示
  • JS红宝书笔记 8.2 创建对象
  • 使用Dagster资产工厂模式高效管理重复ETL任务
  • 257. 二叉树的所有路径(js)
  • JavaEE->多线程2
  • 使用Haporxy搭建Web群集
  • 网页后端开发(基础4--数据库MySQL)
  • 第一章 空间解析几何与向量代数 ~ 向量的数量积与向量积
  • Linux head 命令
  • 穿不了 NAT 怎么办?用 TURN Server 把墙搬走!