sap系统连接其它系统

news2025/1/16 1:11:25

本文来自博客园,作者:Lovemywx2,转载请注明原文链接:https://www.cnblogs.com/1187163927ch/p/8669859.html

JAVA连接ORACLE数据库

1,首先需要在Oracle安装完成之后新建一个用户

--新建用户
create user chenh identified by chenh;
--解锁用户
alter user chenh account unlock;
alter user scott account unlock;
--修改密码
alter user chenh identified by chenh;
--授予权限
grant sysdba to chenh;
--授予chenh用户创建session的权限,即登陆权限
grant create session to chenh;
--授予chenh用户使用表空间的权限
grant unlimited session to chenh;
--授予创建表的权限
grant create table to chenh;
--授予删除表的权限
grant drop table to chenh;
--插入表的权限
grant insert table to chenh;
--修改表的权限
grant update table to chenh;
--查看当前数据库实例名
select name from v$database;
--提交事务
commit;

2.用户新建完成之后,可能会出现某个用户对标users没有权限的提示

1   -- 解决用户 XX 对 users表空间没有权限的问题
2  alter user chenh quota unlimited on users; 

3.新建一个测试表以及向其中插入几条数据

--删除表
drop table a;
--新建表
create table a(
col1 varchar2(10),
col2 varchar2(10),
col3 varchar2(10),
col4 varchar2(10)
);
--查询
select * from a;
--插入语句 多执行几次,因为没有主键限制,故此处可以执行多次
insert into a (col1,col2,col3,col4) values ('a1','b','c','d');

commit;

4.需要在eclipse中新建一个java项目

打开eclipse(myeclipse)-> File(文件)-> New(新建) ->Project(工程) -> Java Project (Java 工程)

  Project Name: 项目名称 接着一路Next(下一步)或者直接Finish(完成)

5.需提前下载ojdbc6.jar 连接数据库驱动的JAR包

  这里提供下载地址:https://files.cnblogs.com/files/1187163927ch/blog.rar

      解压密码:1187163927

6.在eclipse(myeclipse)新建的项目中将ojdbc6.jar导入,记得build path.

  打开该项目树状图,将下载好的ojdbc6.jar直接拖到该项目中,然后鼠标左键选中该文件,右键Build Path即可。

7.新建一个java类,在其中连接数据库

  7.1连接数据库驱动

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
    public static Connection dbConn(String name, String pass) {
       Connection c = null;
       try {
           Class.forName("oracle.jdbc.driver.OracleDriver");
           // 要是导入驱动没有成功的话都是会出现classnotfoundException.自己看看是不是哪里错了,例如classpath这些设置
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
       try {
           c = DriverManager.getConnection(
                  "jdbc:oracle:thin:@localhost:1521:chenh", name, pass);
           // 连接数据的方法有四种, 这个属于最简单的,一般用网页程序 chenh是你的数据库实例名称,在下载的文件test.sql中可以执行语句查看
           // "jdbc:oracle:thin:@计算机名称:监听端口:系统实例名", username, password,
           // 计算机名称,要是自己不知道可以在计算机属性查知.
           // 监听端口一般默认是1521, 要是改变了就看自己的监听文件listener.ora
           // 系统实例名一般是默认orcl, 要是不是的话就用 select name from v$database; 看看当前的实例名.在本程序中我更改了实例为chenh
           // username,password,就是登陆数据库的用户名和密码.


       } catch (SQLException e) {
           e.printStackTrace();
       }
       return c;
    }
}

    7.2 查询数据库

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DB extends DBConnection {
    private static Connection con = null;
    private static Statement sql = null;
    private static ResultSet rs = null;


    public static void main(String[] args) throws SQLException {
       String COL1;
       String COL2;
       String COL3;
       String COL4;
       try {
           con = dbConn("chenh", "chenh");
           if (con == null) {
              System.out.print("连接失败");
              System.exit(0);
           }
           sql = con.createStatement();
           rs = sql.executeQuery("select * from a");
           System.out.println("COL1" + "            " + "COL2" + "             "+ "COL3"+ "             "+ "COL4");
           while (rs.next()) {
              COL1 = rs.getString(1);
              COL2 = rs.getString(2);
              COL3 = rs.getString(3);
              COL4 = rs.getString(4);
              System.out.println(COL1 + "         " + COL2 + "         " + COL3+ "         " + COL4);
           }
       } catch (Exception e) {
           e.printStackTrace();


       } finally {
           con.close();
       }
    }
}

检查不报错之后,执行按钮,选中项目  右键 -> Run As -> Java Application  可看到如下结果:

本文来自博客园,作者:Lovemywx2,转载请注明原文链接:https://www.cnblogs.com/1187163927ch/p/8670409.html

JAVA连接SAP

1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC

事务码:SE37

新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> 创建组

 输入描述信息,方便以后使用,以后功能相似的函数都可以放到该函数组下

 函数组创建完毕后,回到SE37初始界面,创建函数,键入函数名后,点击创建按钮

在属性页签下,输入函数的描述,将远程启用的模块选上

在导入导出参数页签下设置输入输出参数(远程调用模块的注入,输出),要注意参考类型,可选性和传递值

 

在源代码中

FUNCTION zchenh001.
*"----------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(P1) TYPE  INT4 DEFAULT 0
*"     VALUE(P2) TYPE  INT4 DEFAULT 0
*"     VALUE(OPERATOR) TYPE  CHAR1 DEFAULT '+'
*"  EXPORTING
*"     VALUE(RESULT) TYPE  INT4
*"     VALUE(MSG) TYPE  CHAR255
*"----------------------------------------------------------------------
  DATA:err_text TYPE string,
       e TYPE REF TO cx_root.
  TRY .
    CASE operator.
      WHEN '+'.       result = p1 + p2.
      WHEN '-'.       result = p1 - p2.
      WHEN '*'.       result = p1 * p2.
      WHEN '/'.       result = p1 / p2.
      WHEN OTHERS.
        CONCATENATE '操作符' operator ',SAP无法识别' into msg.
    ENDCASE.
    CATCH cx_root INTO e.
      err_text = e->get_text( ).
      msg = err_text.

  ENDTRY.

ENDFUNCTION.

 在SAP中测试如下:

测试一:

测试二:

 

测试三:

 

测试四:

 接下来需要下载连接SAP的驱动sapjco3.jar包,

本处提供下载:sapjco3.jar

  解压密码:1187163927

激活后可以在SAP内部测试 ,至此SAP部分已完成

2在eclipse(myeclipse)新建的项目中将sapjco3.jar导入,记得build path.

  打开该项目树状图,将下载好的sapjco3.jar直接拖到该项目中,然后鼠标左键选中该文件,右键Build Path即可。

 2.1 配置与SAP系统的连接(此处最好在SAP系统中新建一个RFC用户)

package com.cee.conn;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.logging.Logger;

import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;

/**
 * 与SAP连接配置
 *
 * @author jay
 */
public class SAPConn {
    private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
    static {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx.xxxx");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxxx"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxxx"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程

        createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
    }

    /**
     * 创建SAP接口属性文件。
     *
     * @param name
     *            ABAP管道名称
     * @param suffix
     *            属性文件后缀
     * @param properties
     *            属性文件内容
     */
    private static void createDataFile(String name, String suffix, Properties properties) {
        File cfg = new File(name + "." + suffix);
        if (cfg.exists()) {
            cfg.deleteOnExit();
        }
        try {
            FileOutputStream fos = new FileOutputStream(cfg, false);
            properties.store(fos, "for tests only !");
            fos.close();
        } catch (Exception e) {
            System.out.println("Create Data file fault, error msg: " + e.toString());
            throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
        }
    }

    /*
     * * 获取SAP连接
     *
     * @return SAP连接对象
     */
    public static JCoDestination connect() {
        JCoDestination destination = null;
        try {
            destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
        } catch (JCoException e) {
            System.out.println("Connect SAP fault, error msg: " + e.toString());
        }
        return destination;
    }
}

2.2 在java代码中测试连接

package com.cee.test;
import java.io.ObjectInputStream.GetField;
import com.cee.conn.SAPConn;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoTable;

public class CheckSnFromSAP {
    public static void main(String[] args) {
        JCoFunction function = null;
        JCoDestination destination = SAPConn.connect();
        int result=0;//调用接口返回状态
        String message="";//调用接口返回信息
        try {
            //调用ZCHENH001函数
            function = destination.getRepository().getFunction("ZCHENH001");
            JCoParameterList input = function.getImportParameterList();
            input.setValue("P1", 10);
            input.setValue("P2", 2);
            input.setValue("OPERATOR", "?"); // 输入参数
            function.execute(destination);
            result= function.getExportParameterList().getInt("RESULT");//调用接口返回结果
            message= function.getExportParameterList().getString("MSG");//调用接口返回信息
            System.out.println("调用返回结果--->"+result+";调用返回状态--->"+message);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果如下:

测试一: 注入参数分别为:10,2,?

测试二: 注入参数分别为:10,2,/

 

JAVA调用SAP多个环境数据

1.生成通用配置文件

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;

/**
 * 与SAP连接配置
 *
 * @author 陈辉
 * @version v1.01
 *
 */
public class SAPConn {
    private static final String S4I100 = "ABAP_AS_WITH_POOL_S4DI00";
    private static final String S4D100 = "ABAP_AS_WITH_POOL_S4D100";
    private static final String S4D200 = "ABAP_AS_WITH_POOL_S4D200";
    private static final String S4D360 = "ABAP_AS_WITH_POOL_S4D360";
    private static final String S4Q800 = "ABAP_AS_WITH_POOL_S4Q800";
    private static final String S4P800 = "ABAP_AS_WITH_POOL_S4P800";
    static {
        Properties connectProperties = new Properties();

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXXX"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXXXXXXX"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
        createDataFile(S4I100, "jcoDestination", connectProperties);

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXXX"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXXXXXXX"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
        createDataFile(S4D100, "jcoDestination", connectProperties);

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXXX"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXXXXXXX"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
        createDataFile(S4D200, "jcoDestination", connectProperties);

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXXX"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXXXXXXX"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
        createDataFile(S4D360, "jcoDestination", connectProperties);

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx.xxxx.xxxx");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx"); // 系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXXX"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXXXXXXX"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
        createDataFile(S4Q800, "jcoDestination", connectProperties);

        // 组登录
        connectProperties.setProperty(DestinationDataProvider.JCO_R3NAME, "S4P");// SYSTEM ID
        connectProperties.setProperty(DestinationDataProvider.JCO_MSHOST, "10.10.10.10");// 服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_MSSERV, "3601"); // Message Server 服务端口
        connectProperties.setProperty(DestinationDataProvider.JCO_GROUP, "S4P"); // 组名称
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "800"); // SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER, "XXXXXX"); // SAP用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXXXXX"); // 密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); // 登录语言:ZH EN
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); // 最大连接数
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); // 最大连接线程
        connectProperties.setProperty(DestinationDataProvider.JCO_MAX_GET_TIME, "360"); // 最大连接时间
        connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, "");// ROUTER
        createDataFile(S4P800, "jcoDestination", connectProperties);
    }

    /**
     * 创建SAP接口属性文件。
     *
     * @param name       ABAP管道名称
     * @param suffix     属性文件后缀
     * @param properties 属性文件内容
     */
    private static void createDataFile(String name, String suffix, Properties properties) {
        File cfg = new File(name + "." + suffix);
        if (cfg.exists()) {
            cfg.deleteOnExit();
        }
        try {
            FileOutputStream fos = new FileOutputStream(cfg, false);
            properties.store(fos, "仅仅测试使用");
            fos.close();
        } catch (Exception e) {
            System.out.println("创建参数配置文件失败: " + e.toString());
            throw new RuntimeException("无法创建创建参数文件:" + cfg.getName(), e);
        }
    }

    /*
     * * 获取SAP连接
     *
     * @return SAP连接对象
     */
    public static JCoDestination connect(String SYSTEM) {
        JCoDestination destination = null;
        try {
            switch (SYSTEM) {
            case "S4I100":
                destination = JCoDestinationManager.getDestination(S4I100);
                break;
            case "S4D100":
                destination = JCoDestinationManager.getDestination(S4D100);
                break;
            case "S4D200":
                destination = JCoDestinationManager.getDestination(S4D200);
                break;
            case "S4D360":
                destination = JCoDestinationManager.getDestination(S4D360);
                break;
            case "S4Q800":
                destination = JCoDestinationManager.getDestination(S4Q800);
                break;
            case "S4P800":
                destination = JCoDestinationManager.getDestination(S4P800);
                break;
            default:
                destination = JCoDestinationManager.getDestination(S4D360);
                break;
            }
            System.out.println("已经连接到SAP: " + SYSTEM + "环境...");
        } catch (JCoException e) {
            System.out.println("无法连接到SAP: " + e.toString());
        }
        return destination;
    }
}

 2.调用测试RFC_READ_TABLE

import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoField;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import com.sap.conn.jco.JCoTable;

public class FM_RFC_READ_TABLE {
    enum SAP_SYSTEM {
        S4I100, S4D100, S4D200, S4D360, S4Q800, S4P800,
    }

    public static void main(String[] args) {
        JCoFunction function = null;
        JCoDestination destination = SAPConn.connect(SAP_SYSTEM.S4I100.toString());
        try {
            function = destination.getRepository().getFunction("RFC_READ_TABLE");
            JCoParameterList input = function.getImportParameterList();
            input.setValue("QUERY_TABLE", "T001");// 表名
            input.setValue("DELIMITER", ";");// 查询分隔符
            input.setValue("ROWCOUNT", "100");// 条目数

            JCoTable OPTIONS = function.getTableParameterList().getTable("OPTIONS");
            OPTIONS.appendRow();
            OPTIONS.setValue("TEXT", "BUKRS > 1000 AND LAND1 = 'CN' ");// 条件

            JCoTable FIELDS = function.getTableParameterList().getTable("FIELDS");
            FIELDS.appendRow();
            FIELDS.setValue("FIELDNAME", "MANDT");
            FIELDS.appendRow();
            FIELDS.setValue("FIELDNAME", "BUKRS");
            FIELDS.appendRow();
            FIELDS.setValue("FIELDNAME", "BUTXT");
            FIELDS.appendRow();
            FIELDS.setValue("FIELDNAME", "ORT01");
            // 其他字段...

            function.execute(destination);
            FIELDS = function.getTableParameterList().getTable("FIELDS");

            for (int i = 0; i < FIELDS.getNumRows(); i++) {
                FIELDS.setRow(i);
                for (JCoField fields : FIELDS) {
                    if (fields.getName().toString().equals("FIELDNAME")) {
                        System.out.print(String.format("%s\t", fields.getValue()));
                    }
                }
            }
            System.out.println();
            JCoTable DATA = function.getTableParameterList().getTable("DATA");// 调用接口返回信息
            for (int i = 0; i < DATA.getNumRows(); i++) {
                DATA.setRow(i);
                for (JCoField fields : DATA) {
                    String[] field = fields.getValue().toString().split(";");
                    for (int j = 0; j < field.length; j++) {
                        System.out.print(String.format("%s\t", field[j]));
                    }
                }
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1239936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国最常用的制作报表的软件有哪些?

​随着信息化时代的浪潮席卷而来&#xff0c;报表制作软件已经成为了企业管理中的得力助手。在中国的大地上&#xff0c;有许多优秀的报表制作软件&#xff0c;而本文将为您揭示五位佼佼者&#xff0c;其中更以VeryReport报表软件为首选。 编辑搜图 请点击输入图片描述&#x…

centos 安装k8s教程(一键安装k8s)

第一步 准备几台机器 第二步 K8s Manager 服务器中添加docker支持 安装教程请查看这个博客 docker 安装详细教程 点我 第三步安装 KuboardSpray 教程在这里 第四步 下载k8s资源包 第五步 安装k8s 点击安装后 显示如下&#xff1a;等待完成

MAX/MSP SDK学习07:list传递

实现自定义Obejct&#xff0c;要求将传入的一组数据100后传出。 #include "ext.h" #include "ext_obex.h" typedef struct _listTrans {t_object ob;void* outLet;t_atom* fArr;long listNum;} t_listTrans;void* listTrans_new(t_symbol* s, long arg…

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

GUI编程 04 贪吃蛇小游戏 4.4 第四步&#xff1a;食物及成绩判断 首先&#xff0c;添加食物与分数的数据定义&#xff1a; //食物的坐标int foodX;int foodY;Random random new Random();//积分面板数据结构int score;在初始化方法中&#xff0c;添加(画出)食物与分数&…

层次分析法--可以帮助你做决策的简单算法

作用 层次分析法是一个多指标的评价算法&#xff0c;主要用来在做决策时&#xff0c;给目标的多个影响因子做权重评分。特别是那些需要主观决策的、或者需要用经验判断的决策方案&#xff0c;例如&#xff1a; 买房子&#xff08;主观决策&#xff09;选择旅游地&#xff08;…

Redis事务的理解与使用

文章目录 Redis 事务1)基本认识2)事务操作1.MULTI2.EXEC3.错误处理4.DISCARD5.WATCH6.SCRIPT Redis 事务 官方文档&#xff0c;永远是你学习的第一手资料&#xff1a;Redis 事务 1)基本认识 谈到事务&#xff0c;大家首先都会联想到 mysql 中复杂但又功能强大的“事务”&…

基于element-plus定义表单配置化扩展表单按钮

文章目录 前言一、新增btn.vue组件二、使用总结如有启发&#xff0c;可点赞收藏哟~ 前言 在后台管理系统一般都存在列表查询&#xff0c;且可输入数据进行查询 基于element-plus定义表单配置化 新增按钮配置化 一、新增btn.vue组件 <template><template v-for&qu…

如何做好性能压测?压测环境设计和搭建的7个步骤你知道吗?

简介&#xff1a;一般来说&#xff0c;保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则。有时候&#xff0c;即便是压测环境和生产环境有很细微的差别&#xff0c;都有可能导致整个压测活动评测出来的结果不准确。 1. 性能环境要考虑的要素 1.1 系…

5种社交媒体策略提升你的SEO

你希望你的网站在多大程度上在搜索结果中被更多的受众看到&#xff1f;如果你想增加你网站的曝光率和流量&#xff0c;社交媒体整合是提高你的SEO的一个好方法。为了帮助公司和网站所有者提高他们的搜索引擎优化 &#xff08;SEO&#xff09;&#xff0c;这篇文章将介绍五种社交…

易点易动设备管理系统:提升企业设备保养效率的最佳选择

在现代企业中&#xff0c;设备的正常运行和保养对于业务的顺利进行至关重要。然而&#xff0c;传统的手动设备管理方式往往效率低下、容易出错&#xff0c;给企业带来不必要的成本和风险。为了解决这一问题&#xff0c;易点易动设备管理系统应运而生。本文将介绍易点易动设备管…

ansible的基本安装

目录 一、简介 1.ansible自动化运维人工运维时代 2.自动化运维时代 3.ansible介绍 4.ansible特点 二、ansible实践 1.环境 2.ansible管理安装 3.ansible被管理安装 4.管理方式 5.添加被管理机器的ip 6.ssh密码认证方式管理 三、配置免密登录 1.ansible自带的密码…

2021年12月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 舞台上有3个角色,小猫的程序如下图所示,另外两个角色没有程序。点击绿旗,下列选项正确的是? A:小猫随鼠标移动,可能会遮挡其他两个角色 B:小猫随鼠标移动,可能会被其他两个…

前缀和的动态维护——树状数组[C/C++]

文章目录 前言lowbitlowbit的定义lowbit的计算 树状数组的思想树状数组的操作单点修改 update前缀查询 query树状数组的建立 build 前言 树状数组巧妙了利用位运算和树形结构实现了允许单点修改的情况下&#xff0c;动态维护前缀和&#xff0c;并且实现单点修改和前缀和查询的效…

2021年09月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行下图所示程序,舞台上的角色? A:在1秒内滑行到随机位置 B:不断地重复滑行到随机位置 C:只有按下空格键的时候,才会滑行到随机位置 D:只有按下空格键以外键的时候,才会滑行…

【鸿蒙应用ArkTS开发系列】- 云开发入门实战一使用鸿蒙登录组件实现客户端登录

目录 概述使用云端一体化开发模板创建项目工程创建登录入口页面集成登录SDK组件依赖登录组件SDK使用登录组件SDK 开启“手机号码”和“邮箱地址”认证方式 概述 通过本次课程&#xff0c;我们将学习怎么使用云端一体化开发模板来创建云开发工程&#xff0c;以及如何使用鸿蒙登…

机器学习第12天:聚类

文章目录 机器学习专栏 无监督学习介绍 聚类 K-Means 使用方法 实例演示 代码解析 绘制决策边界 本章总结 机器学习专栏 机器学习_Nowl的博客-CSDN博客 无监督学习介绍 某位著名计算机科学家有句话&#xff1a;“如果智能是蛋糕&#xff0c;无监督学习将是蛋糕本体&a…

Deepmind开发音频模型Lyria 用于生成高品质音乐;创建亚马逊新产品评论摘要

&#x1f989; AI新闻 &#x1f680; Deepmind开发音频模型Lyria 用于生成高品质音乐 摘要&#xff1a;Deepmind推出名为Lyria的音频模型&#xff0c;可生成带有乐器和人声的高品质音乐。Lyria模型针对音乐生成的挑战&#xff0c;解决了音乐信息密度高、音乐序列中的连续性维…

智能驾驶产品开发中如何贯彻“正向开发”理念

摘要&#xff1a; 基于演绎法的正向开发理念&#xff0c;能够让智能驾驶产品在充分满足用户需求&#xff0c;保证产品质量的同时&#xff0c;确保开发目标合理且得到落实。 前段时间&#xff0c;微博CEO吐槽理想L9智能驾驶“行驶轨迹不居中”&#xff0c;在网上引发了热烈讨论…

Youtube运营如何打破0播放?你需要的技巧、策略与工具

对于有跨境意向的内容创作者或者品牌企业来说&#xff0c;YouTube是因其巨大的潜在受众群和商业价值成为最值得投入变现与营销计划的平台。 据统计&#xff0c;98% 的美国人每月访问 YouTube&#xff0c;近三分之二的人每天访问。但是&#xff0c;YouTube还远未达到过度饱和的…

Android APN 参数数据库设计和代码实现

Android U 网页代码&#xff1a;/ - OpenGrok cross reference for / (aospxref.com) 字段参数介绍 实体对象 ApnSetting ApnSetting.java - OpenGrok cross reference for /frameworks/base/telephony/java/android/telephony/data/ApnSetting.java (aospxref.com) An Acc…