Oracle时间函数

news2025/1/31 8:20:55

Oracle 时间函数

  • INTERVAL
    • 间隔一年
    • 间隔一天
    • 间隔一小时
    • 间隔一分钟
  • NUMTODSINTERVAL
    • 间隔一天
    • 间隔一小时
    • 间隔一分钟
  • MyBatis xml 中计算时间间隔
    • 需要处理的问题
    • INTERVAL 函数整合到 MyBatis
      • $ 符号拼接 sql 源码追踪
    • NUMTODSINTERVAL 函数整合到 MyBatis

Oracle 时间间隔函数有INTERVALNUMTODSINTERVAL等,本文介绍这两个函数,以及如何在MyBtis中使用。要想整合到MyBtis中,首先需要编写正确的SQL,理解SQL的意思,然后在再代码中使用。

INTERVAL

间隔一年

  1. 当前时间加一年
SELECT SYSDATE, SYSDATE + INTERVAL '1' YEAR FROM dual;

在这里插入图片描述
2. 当前时间减一年

SELECT SYSDATE, SYSDATE - INTERVAL '1' YEAR FROM dual;

在这里插入图片描述

间隔一天

SELECT SYSDATE, SYSDATE + INTERVAL '1' DAY FROM dual;

在这里插入图片描述

间隔一小时

SELECT SYSDATE, SYSDATE + INTERVAL '1' HOUR FROM dual;

在这里插入图片描述

间隔一分钟

SELECT SYSDATE, SYSDATE + INTERVAL '1' MINUTE FROM dual;

在这里插入图片描述

NUMTODSINTERVAL

间隔一天

SELECT SYSDATE, SYSDATE + NUMTODSINTERVAL(1, 'DAY') FROM dual;

间隔一小时

SELECT SYSDATE, SYSDATE + NUMTODSINTERVAL(1, 'HOUR') FROM dual;

间隔一分钟

SELECT SYSDATE, SYSDATE + NUMTODSINTERVAL(1, 'MINUTE') FROM dual;

NUMTODSINTERVAL 函数对于 YEAR、MONTH 参数不支持,返回函数的参数非法,如下图所示
在这里插入图片描述
在这里插入图片描述

MyBatis xml 中计算时间间隔

需要处理的问题

查找表中创建时间超过了24小时的数据,建表语句如下

CREATE TABLE t_test_table (
"ID" NUMBER(18,0), 
"CREATE_TIME" TIMESTAMP(6),
CONSTRAINT pk_id PRIMARY KEY(ID)
)

创建序列,获取唯一ID

CREATE SEQUENCE seq_t_test_table;

插入测试数据

INSERT INTO t_test_table ("ID", "CREATE_TIME") VALUES (SEQ_T_TEST_TABLE.nextval, SYSDATE - NUMTODSINTERVAL(1, 'DAY'));
INSERT INTO t_test_table ("ID", "CREATE_TIME") VALUES (SEQ_T_TEST_TABLE.nextval, SYSDATE - NUMTODSINTERVAL(1, 'HOUR'));
INSERT INTO t_test_table ("ID", "CREATE_TIME") VALUES (SEQ_T_TEST_TABLE.nextval, SYSDATE - NUMTODSINTERVAL(1, 'MINUTE'));

如果把插入语句修改成批量插入,还能获取到正确的序列数据吗?

INSERT ALL 
INTO t_test_table ("ID", "CREATE_TIME") VALUES (SEQ_T_TEST_TABLE.nextval, SYSDATE - NUMTODSINTERVAL(1, 'DAY'))
INTO t_test_table ("ID", "CREATE_TIME") VALUES (SEQ_T_TEST_TABLE.nextval, SYSDATE - NUMTODSINTERVAL(1, 'HOUR'))
INTO t_test_table ("ID", "CREATE_TIME") VALUES (SEQ_T_TEST_TABLE.nextval, SYSDATE - NUMTODSINTERVAL(1, 'MINUTE'))
select 1 from dual;

查询数据是否插入成功
在这里插入图片描述
查询超过创建时间大于24小时的sql 如下

SELECT * FROM t_test_table WHERE SYSDATE -  INTERVAL '24' HOUR >= CREATE_TIME;

在这里插入图片描述

SELECT * FROM t_test_table WHERE SYSDATE - NUMTODSINTERVAL(24, 'HOUR') >= CREATE_TIME;

INTERVAL 函数整合到 MyBatis

<select id="selectBeforeHour" resultType="java.lang.Long">
        SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL #{hour} HOUR >= CREATE_TIME
    </select>

测试方法

package com.scd.mybatis.oracle;

import com.scd.mapper.OracleBatchSeqMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import java.io.Reader;
import java.util.List;

/**
 * @author James
 */
public class TimeFunTest {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void setUp() throws Exception {
        String resource = "templates/mybatis-config-oracle.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }

    @Test
    public void testBeforeHour() {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            OracleBatchSeqMapper oracleBatchSeqMapper = sqlSession.getMapper(OracleBatchSeqMapper.class);
            List<Long> idList = oracleBatchSeqMapper.selectBeforeHour(6);
            System.out.println(idList);
        }
    }
}

运行测试方法报错

22:36:08.489 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
22:36:08.515 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
22:36:08.515 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
22:36:08.515 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
22:36:08.515 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
22:36:08.616 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Opening JDBC Connection
22:36:09.563 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Created connection 1766505436.
22:36:09.564 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@694abbdc]
22:36:09.567 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==>  Preparing: SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL ? HOUR >= CREATE_TIME
22:36:09.714 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==> Parameters: 6(Integer)
22:36:09.774 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@694abbdc]
22:36:09.775 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Closing JDBC Connection [oracle.jdbc.driver.T4CConnection@694abbdc]
22:36:09.775 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1766505436 to pool.

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符

### The error may exist in mapper/OracleBatchSeqMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL ? HOUR >= CREATE_TIME
### Cause: java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符


	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)
	at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
	at com.sun.proxy.$Proxy8.selectBeforeHour(Unknown Source)
	at com.scd.mybatis.oracle.TimeFunTest.testBeforeHour(TimeFunTest.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符

	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509)
	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:461)
	at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104)
	at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:550)
	at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268)
	at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:270)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:91)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:807)
	at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:983)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3666)
	at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1426)
	at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3778)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1081)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
	at com.sun.proxy.$Proxy10.execute(Unknown Source)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
	... 32 more
Caused by: Error : 920, Position : 53, Sql = SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL :1  HOUR >= CREATE_TIME, OriginalSql = SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL ? HOUR >= CREATE_TIME, Error Msg = ORA-00920: 无效的关系运算符

	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513)
	... 60 more

输出的查询sql

22:36:09.567 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==>  Preparing: SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL ? HOUR >= CREATE_TIME
22:36:09.714 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==> Parameters: 6(Integer)
22:36:09.774 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@694abbdc]

ORA-00920: 无效的关系运算符 少了符号 ',修改 xml 如下

<select id="selectBeforeHour" resultType="java.lang.Long">
        SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL &#039;#{hour}&#039; HOUR >= CREATE_TIME
    </select>

输出的查询sql

22:42:57.663 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==>  Preparing: SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL '?' HOUR >= CREATE_TIME

报错信息

Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: 无效的列索引
	at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:75)
	at org.apache.ibatis.type.UnknownTypeHandler.setNonNullParameter(UnknownTypeHandler.java:67)
	at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:73)
	... 42 more
Caused by: java.sql.SQLException: 无效的列索引
	at oracle.jdbc.driver.OraclePreparedStatement.setIntInternal(OraclePreparedStatement.java:4530)
	at oracle.jdbc.driver.OraclePreparedStatement.setInt(OraclePreparedStatement.java:4521)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.setInt(OraclePreparedStatementWrapper.java:197)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:67)
	at com.sun.proxy.$Proxy10.setInt(Unknown Source)
	at org.apache.ibatis.type.IntegerTypeHandler.setNonNullParameter(IntegerTypeHandler.java:31)
	at org.apache.ibatis.type.IntegerTypeHandler.setNonNullParameter(IntegerTypeHandler.java:26)
	at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:73)
	... 44 more

看报错信息是预编译sql 设置参数有问题,如果把 # 改成 $ 符号是否会成功了?修改xml 如下

 <select id="selectBeforeHour" resultType="java.lang.Long">
        SELECT ID FROM t_test_table WHERE SYSDATE - INTERVAL &#039;${hour}&#039; HOUR >= CREATE_TIME
    </select>

再次运行测试方法,查询成功,xml 中使用 $ 符号就不在使用预编译的sql了,直接拼接sql,如果这么写,估计有些安全检查过不了,使用另外一个方法 NUMTODSINTERVAL就可以使用 # 预编译参数的方式

$ 符号拼接 sql 源码追踪

在 org.apache.ibatis.scripting.xmltags.TextSqlNode#apply 这个方法加个断点
在这里插入图片描述
解析到 ${ 符号就会开始拼接sql, 具体逻辑代码如下
在这里插入图片描述

NUMTODSINTERVAL 函数整合到 MyBatis

修改 xml 中的 sql, 将时间间隔函数修改成 NUMTODSINTERVAL

    <select id="selectBeforeHour" resultType="java.lang.Long">
        SELECT ID FROM t_test_table WHERE SYSDATE - NUMTODSINTERVAL(#{hour}, 'HOUR') >= CREATE_TIME
    </select>

运行输出的 sql 如下:

23:10:53.627 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==>  Preparing: SELECT ID FROM t_test_table WHERE SYSDATE - NUMTODSINTERVAL(?, 'HOUR') >= CREATE_TIME
23:10:53.780 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - ==> Parameters: 6(Integer)
23:10:53.873 [main] DEBUG com.scd.mapper.OracleBatchSeqMapper.selectBeforeHour - <==      Total: 1

正确的获取到了结果

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

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

相关文章

%25 express 中的中间件

1、express 中的中间件 &#xff08;1&#xff09;、当客户端的请求到达 express 服务器后&#xff0c;会连续调用多个中间件&#xff0c;对请求进行预处理 &#xff08;2&#xff09;、本质是一个 function 处理函数(与普通路由函数相比&#xff0c;形参中多了 next 参数&…

深入分析广告和电商结合的逻辑,针对性推出一套广告电商方案

大家好&#xff0c;我是林工&#xff0c;本期林工给大家深入分析广告和电商结合的逻辑&#xff0c;针对性推出一套广告电商方案。 对于消费者来说&#xff0c;广告要发挥引导、刺激并满足消费者需求的作用&#xff0c;首先要使广告传播的信息引人注意&#xff0c;激发消费者购…

掌握Qt构造系统

1. 前言 ​对于日常在Qt或者Visual Studio等**集成开发环境&#xff08;即IDE&#xff09;**中编码的开发者来说&#xff0c;构造系统通常是比较容易被忽略的部分。集成开发环境配置简单&#xff0c;界面友好&#xff0c;可以提高开发效率。 ​随着对开发环境的深度使用&…

2.0、Hibernate-级联关系

2.0、Hibernate-级联关系 级联关系 中 最为常见的就是 -> 1、一对多关系 &#xff1a;一个消费者可以购买多个商品 -> 生成多个订单; 消费者是1&#xff0c;订单是多 那么在数据库中&#xff0c;1 的一方是主表&#xff0c;多的一方是从表&#xff0c;通过主外键关系去维…

C# Winform 三层架构

一、介绍 三层架构是 C# 桌面开发中比较常用的框架&#xff0c;是由 表示层&#xff08;UI&#xff09;、业务逻辑层&#xff08;BLL&#xff09;和数据访问层&#xff08;DAL&#xff09;三层架构组成&#xff0c;目的是为了 “高内聚&#xff0c;低耦合”。开发人员分工更明…

深度学习入门(六十五)循环神经网络——序列到序列学习(seq2seq)

深度学习入门&#xff08;六十五&#xff09;循环神经网络——序列到序列学习&#xff08;seq2seq&#xff09;前言循环神经网络——序列到序列学习&#xff08;seq2seq&#xff09;课件机器翻译seq2seq编码器-解码器细节训练衡量生成序列的好坏的BLEU总结教材1 编码器2 解码器…

为什么世界500强企业都要求员工必须学Python编程语言?

行业的更迭与进化并非虚无缥缈&#xff0c;它就发生在我们每天的生活中。当代最具竞争力的技能是什么&#xff1f;高盛、JP 摩根、麦肯锡等顶级公司纷纷给出了答案——编程。 今年新加入摩根大通的全部资产管理分析师必须强制学习编程语言&#xff0c;Python。 摩根大通资产管…

【Java异常】处理异常

一&#xff1a;异常的处理&#xff1a;抓抛处理 过程一&#xff1a;"抛":程序在正常执行的过程中&#xff0c;一旦出现异常&#xff0c;就会在异常代码处生成一个对应异常类的对象并将此对象抛出一旦抛出对象以后&#xff0c;其后的代码不再执行 过程二&#xff1a;&…

科班演员陶弈菱:北京电影学院的系统学习是我艺术道路上最大的底气

今天的记忆是带着海水的味道………”12月18日&#xff0c;在年末岁尾之际&#xff0c;徽风皖韵熏陶下成长的新生代演员陶奕菱再次来到海南三亚&#xff0c;受邀参加第四届海南岛国际电影节&#xff0c;迫不及待地跑向沙滩面朝大海&#xff0c;感受多姿多彩的魅力三亚。 优雅端…

在 React 中应用设计模式:策略模式

这篇文章是关于我们许多人在 React 和前端开发中遇到的一个问题&#xff08;有时甚至没有意识到这是一个问题&#xff09;&#xff1a;在不同的组件、钩子、实用程序等中实现了一段逻辑。 让我们深入了解问题的详细信息以及如何解决它。正如标题所暗示的&#xff0c;我们将使用…

DPDK-收包完整过程

本篇博客作为自己了解dpdk收包过程的一个记录。在写时发现已经有很多写DPDK收包过程的博客了&#xff0c;但还是决定自己写一遍。 DPDK收包分为两个阶段&#xff0c;首先是DMA将数据包从网卡搬运到内存&#xff0c;然后是调用dpdk提供的接口rte_eth_rx_burst去取。但是具体是怎…

Oracle和其他数据库有什么区别?从引号开始了解!

无论测试或者开发&#xff0c;对数据库的增删改查都是家常便饭。但有些小知识是经常被忽略&#xff0c;却又不能不去了解的&#xff0c;例如单引号和双引号的用法和区别&#xff0c;看完这一篇&#xff0c;你肯定会有收获。 首先我们要区别一个概念&#xff0c;即单引号(‘)和…

【Java语言】— Java基础02

1.数据类型 &#xff08;1&#xff09;数据类型的作用 数据类型就是约束变量存储数据的形式。 数据类型 变量名称初始值;&#xff08;2&#xff09;数据类型的分类 引用数据类型&#xff08;除基本数据类型之外的&#xff0c;如String&#xff09;基本数据类型:4大类8种。 …

如何从 0 开始学 Python 自动化测试开发(一)

本文是「如何从 0 开始学 Python 自动化测试开发」专题系列文章第一篇&#xff0c;适合零基础入门的同学。 作者方程老师&#xff0c;是前某跨国通信公司高级测试经理&#xff0c;目前为某互联网名企资深测试技术专家&#xff0c;也是霍格沃兹测试学院特邀讲师。有十余年大型电…

项目管理软件怎么选?只需要关注4点

项目管理有许多不同的风格&#xff0c;但无论如何管理项目&#xff0c;根据企业的当前需求和未来发展轨迹选择合适的项目管理软件都很重要。 虽然大多数优秀的项目管理软件都提供相似的功能&#xff0c;但没有两个平台是完全相同的。以下是企业在选择项目管理软件时应该考虑的…

【虹科新闻】虹科与SOSLAB正式建立合作伙伴关系

近日&#xff0c;虹科与SOSLAB正式建立合作伙伴关系&#xff0c;虹科将共同与SOSLAB开展亚太地区市场开发&#xff0c;聚焦于工业领域客户开拓&#xff0c;深入本地技术支持、测试与售后服务落地&#xff0c;为客户提供高效、可靠的激光雷达解决方案。 “虹科很高兴与SOSLAB合作…

锁等待超时

问题背景 今天测试同事发现项目里面大部分接口报错&#xff0c;把日志捞出来看了下出现大量的锁等待超时的错误。 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transactionat sun.reflect.N…

MULLS: Versatile LiDAR SLAM via Multi-metric Linear Least Square论文阅读

1. 摘要 随着自动驾驶与移动建图的快速发展&#xff0c;实际项目中对现成的激光SLAM建图方案的需求也越来越强烈&#xff0c;并且要求解决方案适用于各种不同规格的激光雷达与各种复杂场景。因此&#xff0c;我们提出了MULLS&#xff0c;一种高效&#xff0c;低漂移&#xff0…

状态观测控制器设计与仿真验证

【无限嚣张&#xff08;菜菜&#xff09;】&#xff1a;hello您好&#xff0c;我是菜菜&#xff0c;很高兴您能来访我的博客&#xff0c;我是一名爱好编程学习研究的菜菜&#xff0c;每天分享自己的学习&#xff0c;想法&#xff0c;博客来源与自己的学习项目以及编程中遇到问题…

深度学习炼丹-数据处理和增强

前言一&#xff0c;Normalization 概述 1.1&#xff0c;Normalization 定义1.2&#xff0c;什么情况需要 Normalization1.3&#xff0c;Data Normalization 方法1.4&#xff0c;示例代码 二&#xff0c;normalize images 2.1&#xff0c;图像 normalization 定义2.2&#xff0c…