sql语句

CREATE TABLE "SYS_LOG" ("ID" NVARCHAR2(32) NOT NULL ,"LOG_TYPE" NUMBER(11) ,"LOG_CONTENT" NVARCHAR2(1000) ,"OPERATE_TYPE" NUMBER(11) ,"USERID" NVARCHAR2(32) ,"USERNAME" NVARCHAR2(100) ,"IP" NVARCHAR2(100) ,"METHOD" NVARCHAR2(500) ,"REQUEST_URL" NVARCHAR2(255) ,"REQUEST_PARAM" NCLOB ,"REQUEST_TYPE" NVARCHAR2(10) ,"COST_TIME" NUMBER(20) ,"CREATE_BY" NVARCHAR2(32) ,"CREATE_TIME" DATE ,"UPDATE_BY" NVARCHAR2(32) ,"UPDATE_TIME" DATE
);INSERT INTO "SYS_LOG" VALUES ('1487d69ff97888f3a899e2ababb5ae48', '1', '用户名: admin,登录成功!', NULL, NULL, NULL, '127.0.0.1', NULL, NULL, NULL, NULL, NULL, 'jeecg-boot', TO_DATE('2019-01-22 14:21:17', 'SYYYY-MM-DD HH24:MI:SS'), NULL, NULL);
INSERT INTO "SYS_LOG" VALUES ('cc7fa5567e7833a3475b29b7441a2976', '1', '用户名: admin,登录成功!', NULL, NULL, NULL, '127.0.0.1', NULL, NULL, NULL, NULL, NULL, 'jeecg-boot', TO_DATE('2019-01-22 14:21:31', 'SYYYY-MM-DD HH24:MI:SS'), NULL, NULL);
INSERT INTO "SYS_LOG" VALUES ('asdqwe567e7833a3475b29b7441asdqw', '1', '用户名: cxx,登录成功!', NULL, NULL, NULL, '127.0.0.1', NULL, NULL, NULL, NULL, NULL, 'jeecg-boot', TO_DATE('2019-01-22 14:21:31', 'SYYYY-MM-DD HH24:MI:SS'), NULL, NULL);

select查询

#define _CRT_SECURE_NO_WARNINGS     //这个宏定义最好要放到.c文件的第一行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oci.h>
static text *username = (text *) "scott";
static text *password = (text *) "oracle";/* Define SQL statements to be used in program. ,LOG_TYPE,LOG_CONTENT  */
static text *selectlogbytype = (text *)"SELECT ID,LOG_CONTENT,LOG_TYPE FROM SYS_LOG WHERE LOG_TYPE = 1";static OCIEnv *envhp;
static OCIError *errhp;static void checkerr(/*_ OCIError *errhp, sword status _*/);
static void cleanup(/*_ void _*/);
static void myfflush(/*_ void _*/);
int main(/*_ int argc, char *argv[] _*/);static sword status;int main()
{//参数类型//ub1 logid, logType,logContent;sb2 ind[3];                  /* 指示符变量 */OCIDescribe  *dschndl1 = (OCIDescribe *)0,*dschndl2 = (OCIDescribe *)0,*dschndl3 = (OCIDescribe *)0;OCISession *authp = (OCISession *)0; /* 用户会话句柄 */OCIServer *srvhp;   /* 服务器句柄 */OCISvcCtx *svchp;    /* 服务句柄 */OCIStmt   *stmthp;OCIDefine *defnp = (OCIDefine *)0;OCIBind  *bnd1p = (OCIBind *)0;             /* the first bind handle */OCIBind  *bnd2p = (OCIBind *)0;             /* the second bind handle */OCIBind  *bnd3p = (OCIBind *)0;             /* the third bind handle */OCIBind  *bnd4p = (OCIBind *)0;             /* the fourth bind handle */OCIBind  *bnd5p = (OCIBind *)0;             /* the fifth bind handle */OCIBind  *bnd6p = (OCIBind *)0;             /* the sixth bind handle */sword errcode = 0;/* 将模式初始化为线程和对象环境 */errcode = OCIEnvCreate((OCIEnv **)&envhp, (ub4)OCI_DEFAULT,(dvoid *)0, (dvoid * (*)(dvoid *, size_t)) 0,(dvoid * (*)(dvoid *, dvoid *, size_t)) 0,(void(*)(dvoid *, dvoid *)) 0, (size_t)0, (dvoid **)0);if (errcode != 0) {(void)printf("OCIEnvCreate failed with errcode = %d.\n", errcode);exit(1);}/* 分配一个错误句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR,(size_t)0, (dvoid **)0);/* 分配一个服务器句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER,(size_t)0, (dvoid **)0);/* 分配一个服务句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX,(size_t)0, (dvoid **)0);//(void)OCIServerAttach(srvhp, errhp, (text *)"", strlen(""), 0);//连接远程服务器(void)OCIServerAttach(srvhp, errhp, (text *)"82.156.213.963:1521/oracle", strlen("82.156.213.963:1521/oracle"), 0);/* 在服务上下文句柄中设置服务器属性*/(void)OCIAttrSet((dvoid *)svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp,(ub4)0, OCI_ATTR_SERVER, (OCIError *)errhp);/* 分配一个用户会话句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&authp,(ub4)OCI_HTYPE_SESSION, (size_t)0, (dvoid **)0);/* 在用户会话句柄中设置用户名属性 */(void)OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION,(dvoid *)username, (ub4)strlen((char *)username),(ub4)OCI_ATTR_USERNAME, errhp);/* 在用户会话句柄中设置密码属性 */(void)OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION,(dvoid *)password, (ub4)strlen((char *)password),(ub4)OCI_ATTR_PASSWORD, errhp);checkerr(errhp, OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS,(ub4)OCI_DEFAULT));/* 在服务上下文句柄中设置用户会话属性*/(void)OCIAttrSet((dvoid *)svchp, (ub4)OCI_HTYPE_SVCCTX,(dvoid *)authp, (ub4)0,(ub4)OCI_ATTR_SESSION, errhp);checkerr(errhp, OCIHandleAlloc((dvoid *)envhp, (dvoid **)&stmthp,OCI_HTYPE_STMT, (size_t)0, (dvoid **)0));//定义变量的类型 ,LOG_TYPE,LOG_CONTENTtext logId[50];text logContent[100];int logType;//准备sql语句checkerr(errhp, OCIStmtPrepare(stmthp, errhp, selectlogbytype,(ub4)strlen((char *)selectlogbytype),(ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT));//绑定输出列checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (ub1*)logId,sizeof(logId), SQLT_STR, &ind[0], (ub2 *)0,(ub2 *)0, OCI_DEFAULT));checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp,2, (ub1*)logContent,sizeof(logContent), SQLT_STR, &ind[1], (ub2 *)0, (ub2 *)0, OCI_DEFAULT));checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 3, (dvoid *)&logType,(sb4)sizeof(int), SQLT_INT, &ind[2], (ub2 *)0, (ub2 *)0, OCI_DEFAULT));if ((status = OCIStmtExecute(svchp, stmthp, errhp, (ub4)1, (ub4)0,(CONST OCISnapshot *) NULL, (OCISnapshot *)NULL, OCI_DEFAULT))){checkerr(errhp, status);cleanup();return OCI_ERROR;}else {//用do while是因为 先执行一次do{printf("logId=%s,logContent=%s,logType=%d\n", logId, logContent, logType);} while ((OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT)) != OCI_NO_DATA);}
}void checkerr(errhp, status)
OCIError *errhp;
sword status;
{text errbuf[512];sb4 errcode = 0;switch (status){case OCI_SUCCESS:break;case OCI_SUCCESS_WITH_INFO:(void)printf("Error - OCI_SUCCESS_WITH_INFO\n");break;case OCI_NEED_DATA:(void)printf("Error - OCI_NEED_DATA\n");break;case OCI_NO_DATA:(void)printf("Error - OCI_NODATA\n");break;case OCI_ERROR:(void)OCIErrorGet((dvoid *)errhp, (ub4)1, (text *)NULL, &errcode,errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);(void)printf("Error - %.*s\n", 512, errbuf);break;case OCI_INVALID_HANDLE:(void)printf("Error - OCI_INVALID_HANDLE\n");break;case OCI_STILL_EXECUTING:(void)printf("Error - OCI_STILL_EXECUTE\n");break;case OCI_CONTINUE:(void)printf("Error - OCI_CONTINUE\n");break;default:break;}
}/**  Exit program with an exit code.*/
void cleanup()
{if (envhp)(void)OCIHandleFree((dvoid *)envhp, OCI_HTYPE_ENV);return;
}void myfflush()
{eb1 buf[50];fgets((char *)buf, 50, stdin);
}/* end of file cdemo81.c */

insert插入

#define _CRT_SECURE_NO_WARNINGS     //这个宏定义最好要放到.c文件的第一行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oci.h>
static text *username = (text *) "scott";
static text *password = (text *) "oracle";/* Define SQL statements to be used in program. ,LOG_TYPE,LOG_CONTENT  */
static text *selectlogbytype = (text *)"SELECT ID,LOG_CONTENT,LOG_TYPE FROM SYS_LOG WHERE LOG_TYPE = 1";
static text *insertsql = (text *)"INSERT INTO SYS_LOG(ID, LOG_CONTENT,LOG_TYPE) VALUES (:logId, :logContent, :logType)";static OCIEnv *envhp;
static OCIError *errhp;static void checkerr(/*_ OCIError *errhp, sword status _*/);
static void cleanup(/*_ void _*/);
static void myfflush(/*_ void _*/);
int main(/*_ int argc, char *argv[] _*/);static sword status;int main()
{//参数类型//ub1 logid, logType,logContent;sb2 ind[3];                  /* 指示符变量 */OCIDescribe  *dschndl1 = (OCIDescribe *)0,*dschndl2 = (OCIDescribe *)0,*dschndl3 = (OCIDescribe *)0;OCISession *authp = (OCISession *)0; /* 用户会话句柄 */OCIServer *srvhp;   /* 服务器句柄 */OCISvcCtx *svchp;    /* 服务句柄 */OCIStmt   *inserthp, *stmthp;OCIDefine *defnp = (OCIDefine *)0;OCIBind  *bnd1p = (OCIBind *)0;             /* the first bind handle */OCIBind  *bnd2p = (OCIBind *)0;             /* the second bind handle */OCIBind  *bnd3p = (OCIBind *)0;             /* the third bind handle */OCIBind  *bnd4p = (OCIBind *)0;             /* the fourth bind handle */OCIBind  *bnd5p = (OCIBind *)0;             /* the fifth bind handle */OCIBind  *bnd6p = (OCIBind *)0;             /* the sixth bind handle */sword errcode = 0;/* 将模式初始化为线程和对象环境 */errcode = OCIEnvCreate((OCIEnv **)&envhp, (ub4)OCI_DEFAULT,(dvoid *)0, (dvoid * (*)(dvoid *, size_t)) 0,(dvoid * (*)(dvoid *, dvoid *, size_t)) 0,(void(*)(dvoid *, dvoid *)) 0, (size_t)0, (dvoid **)0);if (errcode != 0) {(void)printf("OCIEnvCreate failed with errcode = %d.\n", errcode);exit(1);}/* 分配一个错误句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR,(size_t)0, (dvoid **)0);/* 分配一个服务器句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER,(size_t)0, (dvoid **)0);/* 分配一个服务句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX,(size_t)0, (dvoid **)0);(void)OCIServerAttach(srvhp, errhp, (text *)"", strlen(""), 0);//连接远程服务器//(void)OCIServerAttach(srvhp, errhp, (text *)"82.156.213.852:1521/oracle", strlen("82.156.213.852:1521/oracle"), 0);/* 在服务上下文句柄中设置服务器属性*/(void)OCIAttrSet((dvoid *)svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp,(ub4)0, OCI_ATTR_SERVER, (OCIError *)errhp);/* 分配一个用户会话句柄 */(void)OCIHandleAlloc((dvoid *)envhp, (dvoid **)&authp,(ub4)OCI_HTYPE_SESSION, (size_t)0, (dvoid **)0);/* 在用户会话句柄中设置用户名属性 */(void)OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION,(dvoid *)username, (ub4)strlen((char *)username),(ub4)OCI_ATTR_USERNAME, errhp);/* 在用户会话句柄中设置密码属性 */(void)OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION,(dvoid *)password, (ub4)strlen((char *)password), (ub4)OCI_ATTR_PASSWORD, errhp);checkerr(errhp, OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, (ub4)OCI_DEFAULT));/* 在服务上下文句柄中设置用户会话属性*/(void)OCIAttrSet((dvoid *)svchp, (ub4)OCI_HTYPE_SVCCTX,(dvoid *)authp, (ub4)0,(ub4)OCI_ATTR_SESSION, errhp);checkerr(errhp, OCIHandleAlloc((dvoid *)envhp, (dvoid **)&inserthp,OCI_HTYPE_STMT, (size_t)0, (dvoid **)0));/**当我们绑定insert语句时,我们还需要分配存储空间因此将在分配语句句柄时分配它;这将在语句消失且内容减少时获得释放碎片化。+2,以允许\\n和\\0**///insert的字段sword   insert_type;text     *insert_id, *insert_content;sb4      idlen = 32;sb4      typelen = 11;sb4      contentlen = 50;checkerr(errhp, OCIHandleAlloc((dvoid *)envhp, (dvoid **)&inserthp,OCI_HTYPE_STMT, (size_t)idlen + 2,(dvoid **)&insert_id));insert_id = "asdww1111";insert_content = "asdadffff2";insert_type = 2;//准备insert sql语句checkerr(errhp, OCIStmtPrepare(inserthp, errhp, insertsql,(ub4)strlen((char *)insertsql),(ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT));sb2      sal_ind, job_ind;sword    empno, sal, deptno;/*  Bind the placeholders in the INSERT statement. */if ((status = OCIBindByName(inserthp, &bnd1p, errhp, (text *) ":logId",-1, (dvoid *)insert_id,idlen + 1, SQLT_STR, (dvoid *)0,(ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0, OCI_DEFAULT)) ||(status = OCIBindByName(inserthp, &bnd2p, errhp, (text *) ":logContent",-1, (dvoid *)insert_content,contentlen + 1, SQLT_STR, (dvoid *)0,(ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0, OCI_DEFAULT)) ||(status = OCIBindByName(inserthp, &bnd3p, errhp, (text *) ":logType",-1, &insert_type,(sword) sizeof(insert_type), SQLT_INT, (dvoid *)0,(ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0, OCI_DEFAULT))){checkerr(errhp, status);cleanup();return OCI_ERROR;}//执行insert语句if ((status = OCIStmtExecute(svchp, inserthp, errhp, (ub4)1, (ub4)0,(CONST OCISnapshot *) NULL, (OCISnapshot *)NULL, OCI_DEFAULT))&& status != 1){checkerr(errhp, status);cleanup();return OCI_ERROR;}/*//定义变量的类型 ,LOG_TYPE,LOG_CONTENTtext logId[50];text logContent[100];int logType;//准备select sql语句checkerr(errhp, OCIStmtPrepare(stmthp, errhp, selectlogbytype,(ub4)strlen((char *)selectlogbytype),(ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT));//绑定输出列checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (ub1*)logId,sizeof(logId), SQLT_STR, &ind[0], (ub2 *)0, (ub2 *)0, OCI_DEFAULT));checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 2, (ub1*)logContent,sizeof(logContent), SQLT_STR, &ind[1], (ub2 *)0, (ub2 *)0, OCI_DEFAULT));checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 3, (dvoid *)&logType,(sb4)sizeof(int), SQLT_INT, &ind[2], (ub2 *)0, (ub2 *)0, OCI_DEFAULT));if ((status = OCIStmtExecute(svchp, stmthp, errhp, (ub4)1, (ub4)0,(CONST OCISnapshot *) NULL, (OCISnapshot *)NULL, OCI_DEFAULT))){checkerr(errhp, status);cleanup();return OCI_ERROR;}else {//用do while是因为 先执行一次do{printf("logId=%s,logContent=%s,logType=%d\n", logId, logContent, logType);} while ((OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT)) != OCI_NO_DATA);}*//* Commit the change. */if (status = OCITransCommit(svchp, errhp, 0)){checkerr(errhp, status);cleanup();return OCI_ERROR;}}void checkerr(errhp, status)
OCIError *errhp;
sword status;
{text errbuf[512];sb4 errcode = 0;switch (status){case OCI_SUCCESS:break;case OCI_SUCCESS_WITH_INFO:(void)printf("Error - OCI_SUCCESS_WITH_INFO\n");break;case OCI_NEED_DATA:(void)printf("Error - OCI_NEED_DATA\n");break;case OCI_NO_DATA:(void)printf("Error - OCI_NODATA\n");break;case OCI_ERROR:(void)OCIErrorGet((dvoid *)errhp, (ub4)1, (text *)NULL, &errcode,errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);(void)printf("Error - %.*s\n", 512, errbuf);break;case OCI_INVALID_HANDLE:(void)printf("Error - OCI_INVALID_HANDLE\n");break;case OCI_STILL_EXECUTING:(void)printf("Error - OCI_STILL_EXECUTE\n");break;case OCI_CONTINUE:(void)printf("Error - OCI_CONTINUE\n");break;default:break;}
}/**  Exit program with an exit code.*/
void cleanup()
{if (envhp)(void)OCIHandleFree((dvoid *)envhp, OCI_HTYPE_ENV);return;
}void myfflush()
{eb1 buf[50];fgets((char *)buf, 50, stdin);
}/* end of file cdemo81.c */

C语言OCI的方式连接oracle数据库相关推荐

  1. (window)C语言OCI的方式连接oracle

    Oracle创建表数据 说明: 我们需要通用的实验数据,emp表 与 dept表 但是数据库中有没有. 这时,我们可以手动创建. Oracle数据库sql语句练习[emp和dept的连表查询由浅入深] ...

  2. C语言DCI(OCI)方式连接DM数据库

    C语言DCI(OCI)方式连接DM数据库 一.背景 近期用户使用DCI的方式连接达梦数据库出现中文乱码的问题,所以决定写一个测试Demo. 因为使用DCI的方式连接,适配中心https://eco.d ...

  3. oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...

    C#连接Oracle数据库通过存储过程操作数据库 收藏 此文于2011-06-07被推荐到CSDN首页 此文于2011-06-08被推荐到CSDN首页 如何被推荐? 之前笔者一直用C#连接SQL Se ...

  4. Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法

    Python 连接 Oracle 数据库 第一章:连接 oracle 数据与环境配置 ① 连接 oracle 数据库效果演示 ② oci 下载 ③ oci 配置 ④ 环境变量配置 ⑤ 检测是否有 or ...

  5. PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示

    PL/SQL 工具远程连接 Oracle 数据库 第一章:PL/SQL 工具配置 ① oci 下载 ② oci 配置 ③ PL/SQL 工具配置 ④ PL/SQL 远程连接 Oracle 数据库演示 ...

  6. Navicat 数据库连接工具连接oracle数据库提示cannot create oci handles问题解决方法

    Navicat 连接 oracle 数据库需要本地有 oracle 环境. oracle 客户端太大了,我们只需装个 oracle install client 就好了. oracle install ...

  7. 用什么方式链接oracle数据库,使用cx_Oracle 连接oracle数据库的几种方式

    连接oracle数据库的几种方式: 语法: cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME') import cx_Oracl ...

  8. C语言ODBC方式连接DM数据库

    C语言ODBC方式连接DM数据库 一.安装 UNIX ODBC 下载 unixODBC 和 unixODBC-devel . 安装 unixODBC 和 unixODBC-devel. [root@R ...

  9. vs使用ado连接oracle,在VS环境下以ADO方式操作Oracle数据库

    利用ADO引擎方式访问Oracle数据库的实现方法: 定义数据库头文件为CDBOperation.h #pragma once #import "C:\Program Files\Commo ...

最新文章

  1. ESP32模块的MicroPython的基本实验
  2. Linux内核分析(三)----初识linux内存管理子系统
  3. Digit sum【暴力+打表】
  4. 绝了,几款主流的 JSON 库性能对比!
  5. [转载] .NET 中可以有类似 JVM 的幻像引用吗?
  6. CSSSCSS的学习笔记
  7. java面向对象(抽象类)
  8. 中国计算机学会推荐国际学术会议和期刊目录(2019)
  9. CImageList
  10. Flash网页游戏辅助工具制作简析
  11. matlab加权网络图,如何在matlab中编写求解加权网络的各个节点..._网络编辑_帮考网...
  12. windows2003下如何关闭默认共享
  13. jsp+sql智能道路交通信息管理系统的设计与实现(论文+系统+开题报告+答辩PPT+外文翻译)
  14. Node爬虫(二):使用cheerio爬取表情包
  15. linux编辑文本到最后一行,linux编辑文本(vim)时跳转到最后一行和第一行及相关指令...
  16. OSChina 周四乱弹 —— 如果你追到我,我就和你……
  17. java什么是类型擦除_Java 泛型,你了解类型擦除吗?
  18. 周易六十四卦——雷山小过卦
  19. 水库大坝隧道安全监测通用的无线解决方案
  20. 专业学位计算机技术排名,山东师范大学计算机技术(专业学位)专业考研难度分析-专业排名-难度大小...

热门文章

  1. Qbasic 输出 星号三角形
  2. POJ1009:Edge Detection
  3. STM32 固件库,CMSIS 标准,STM32Cube
  4. EfficientDet论文解读
  5. 安装 Ghost XP 雨林木风纯净版 Y 8.0 系统
  6. Java程序员开发编程常用的工具
  7. 输出给定集合的所有真子集的三种方法之比较
  8. 20140627-STM8L101F3P6关于毫秒级延时函数不同写法的波形
  9. 从2300块月薪的女工,到年薪80万的程序员,我花了10年
  10. 安装:logstash后,爆出:ModuleNotFoundError: No module named ‘event‘,解决方法。