JDBCTemplate在hsqldb数据库中的应用

人工智能训练师三级考试大纲深度解读|理论+实操分值分布+六大模块占比 三级人工智能训练师考试分为理论和实操两大模块(各100分,合格线60分)。理论考试包含AI基础(30%)、数据标注(25%)、模型训练(20%)、测试(15%)和系统运维(10%),题型为客观题;实操考核侧重数据标注(40%)、模型测试(35%)和系统运维(25%),采用现场操作形式。复习应优先关注AI基础和数据标注等高分值模块,实操需重点掌握标准流程和结果准确性(占评分70%)。考试要求两模块均达标,理论侧重概念理解,实操强调规范执行与文档完整。 阅读详情
public

class 
JDBCTemplateTest {

    //初始化JDBCTemplate

    private static JdbcTemplate jdbcTemplate;     

    @BeforeClass
    public  static void setUpClass() {  

    //利用内存来作为数据的存储源

        String url = "jdbc:hsqldb:mem:test"; 

        String username = "sa"; 

        String password = "";

        //获取数据源

        DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password); 

        //设置驱动

        dataSource.setDriverClassName("org.hsqldb.jdbcDriver"); 

        jdbcTemplate = new JdbcTemplate(dataSource);  

    }

 

    @Before
    public void setUp(){

        //建表
        String createTableSql = "create memory table test" + "(id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, " + "name varchar(100))";

        //execute一般用来执行DDL

        jdbcTemplate.execute(createTableSql);

        System.out.println("表创建成功");

        //建函数

        String createHsqldbFunctionSql =  "CREATE FUNCTION FUNCTION_TEST(str CHAR(100)) "   "returns INT begin atomic return length(str);end"; 

        jdbcTemplate.update(createHsqldbFunctionSql);

        System.out.println("函数创建成功");

        //创建存储过程

        String createHsqldbProcedureSql =  
                  "CREATE PROCEDURE PROCEDURE_TEST" +  "(INOUT
 inOutName VARCHAR(100), OUT outId INT) " 
+  

                  "MODIFIES
 SQL DATA " 
+  

                  "BEGIN
 ATOMIC " 
+  

                  " 
 insert into test(name) values (inOutName); " 
+  

                  " 
 SET outId = IDENTITY(); " 
+  

                  " 
 SET inOutName = 'Hello,' + inOutName; " 
+  

                "END"; 

        jdbcTemplate.update(createHsqldbProcedureSql);

        System.out.println("存储过程创建成功!");

    }

     

    @Test

    public

void 
test(){

        insert();

        update();

        delete();

        select();

        testPpreparedStatement();

        testPreparedStatement2();

        testResultSet();

        testResultSet2();

        testResultSet3();

        testCallableStatementCreator1();

        testCallableStatementCreator3();

    }

 

    /**

     *
 插入数据

     */

    private

void 
insert(){

        String
 sql = "select
 count(*) from test";

        jdbcTemplate.update("insert
 into test(name) values('name1')"); 

        jdbcTemplate.update("insert
 into test(name) values('name2')"); 

        assertEquals(2,
 jdbcTemplate.queryForInt(sql));

        System.out.println("插入记录数为:"+jdbcTemplate.queryForInt(sql));

    }

     

    /**

     *
 更新数据

     */

    private

void 
update(){

        String
 sql = "select
 count(*) from test where name='name3'";

        jdbcTemplate.update("update
 test set name='name3' where name=?",new

Object[]{"name2"});

        assertEquals(1,
 jdbcTemplate.queryForInt(sql));

        System.out.println("更新的记录数为:"+jdbcTemplate.queryForInt(sql));

    }

     

    /**

     *
 删除数据

     */

    private

void 
delete(){

        String
 sql = "select
 count(*) from test";

        jdbcTemplate.update("delete
 from test where name =?",new

Object[]{"name1"});

        assertEquals(1,
 jdbcTemplate.queryForInt(sql));

        System.out.println("删除的记录数为:"+jdbcTemplate.queryForInt(sql));

         

    }

 

    /**

     *
 查询数据(利用回调函数)

     */

    private

void 
select(){

        String
 sql = "select
 count(*) from test";

        jdbcTemplate.query("select
 * from test",
new

RowCallbackHandler(){

 

            @Override

            public

void 
processRow(ResultSet rs) throws

SQLException {

                int

id = rs.getInt("id");

                String
 name = rs.getString("name");

                System.out.println("id="+id+","+"name="+name);

                 

            }});

        System.out.println("查询的数据:"+jdbcTemplate.queryForInt(sql));

    }

 

    /**

     *
 预编译语句及存储过程创建回调

     */

    private

void 
testPpreparedStatement(){

        int

count = jdbcTemplate.execute(new

PreparedStatementCreator() {

            @Override

            public

PreparedStatement createPreparedStatement(Connection conn)

                    throws

SQLException {

                return

conn.prepareStatement("select
 count(*) from test");

            }

        },
new

PreparedStatementCallback<Integer>(){

 

            @Override

            public

Integer doInPreparedStatement(PreparedStatement pstmt)

                    throws

SQLException, DataAccessException {

                pstmt.execute();

                ResultSet
 rs = pstmt.executeQuery();

                rs.next();

                return

rs.getInt(1);

            }  

        });

        assertEquals(1,
 count);

        System.out.println("预编译语句count=:"+count);

    }

 

    /**

     *
 预编译语句设值回调使用(带参数)

     */

    private

void 
testPreparedStatement2(){

        String
 sql = "insert
 into test(name) values(?)";

        int

count = jdbcTemplate.update(sql,new

PreparedStatementSetter(){

 

            @Override

            public

void 
setValues(PreparedStatement ps) throws

SQLException {

                ps.setObject(1,
"name4");

            }

        });

        assertEquals(1,
 count);

        System.out.println("当前的数据条目:"+count);

        //优先使用update(sql,args)

        String
 sqldelete = "delete
 from test where name =?";

        count
 = jdbcTemplate.update(sqldelete, new

Object[]{"name4"});

        assertEquals(1,
 count);

        System.out.println("删除后的数据条目:"+count);

    }

 

    /**

     *
 结果集处理回调(RowMapper<Map>接口,以Map的方式返回结果集)

     */

    private

void 
testResultSet(){

        jdbcTemplate.update("insert
 into test(name) values('name5')"); 

        String
 listSql = "select
 * from test"; 

        List
 list = jdbcTemplate.query(listSql, new

RowMapper<Map>() {  

            @Override 

            public

Map mapRow(ResultSet rs, int

rowNum) throws

SQLException {  

                Map
 row = new

HashMap();  

                row.put(rs.getInt("id"),
 rs.getString("name")); 

                return

row;  

        }}); 

        jdbcTemplate.update("delete
 from test where name='name5'");

        assertEquals(2,
 list.size());

        System.out.println("当前的list结果为"+list.get(0)+","+list.get(1));

    }

 

    /**

     *
 结果集处理回调(RowCallbackHandler接口,将结果集转换为需要的形式)

     */

    private

void 
testResultSet2(){

        jdbcTemplate.update("insert
 into test(name) values(?)",new

Object[]{"name5"});

        String
 sql = "select
 * from test";

        final

List list = new

ArrayList();

        jdbcTemplate.query(sql,new

RowCallbackHandler(){

 

            @Override

            public

void 
processRow(ResultSet rs) throws

SQLException {

                Map
 map = new

HashMap();

                map.put(rs.getInt("id"),
 rs.getString("name"));

                list.add(map);

            }

        });

        assertEquals(2,
 list.size());

        System.out.println("当前的数组结果为"+list.get(0)+","+list.get(1));

        jdbcTemplate.update("delete
 from test where name=?",
new

Object[]{"name5"});

    }

 

    /**

     *
 结果集处理回调(ResultSetExtractor接口,提供给用户整个结果集,让用户决定如何处理该结果集)

     */

    private

void 
testResultSet3(){

        jdbcTemplate.update("insert
 into test(name) values(?)",new

Object[]{"name5"});

        String
 sql = "select
 * from test";

        List
 result = jdbcTemplate.query(sql,new

ResultSetExtractor<List>(){

            @Override

            public

List extractData(ResultSet rs) throws

SQLException,

                    DataAccessException
 {

                List
 list = new

ArrayList();

                while(rs.next()){

                    Map
 map = new

HashMap();

                    map.put(rs.getInt("id"),rs.getString("name"));

                    list.add(map);

                }

                return

list;

            }

        });

        assertEquals(2,
 result.size());

        System.out.println("当前的数组1结果为"+result.get(0)+","+result.get(1));

        jdbcTemplate.update("delete
 from test where name=?",new

Object[]{"name5"});

    }

 

    /**

     *
 调用函数(利用回调函数)

     */

    public

void 
testCallableStatementCreator1() {  

        final

String callFunctionSql = "{call
 FUNCTION_TEST(?)}"; 

        List<SqlParameter>
 params = new

ArrayList<SqlParameter>(); 

        //设置函数参数

        params.add(new

SqlParameter(Types.VARCHAR));  

        //设置函数返回结果集

        params.add(new

SqlReturnResultSet("result",
new

ResultSetExtractor<Integer>(){

            @Override

            public

Integer extractData(ResultSet rs) throws

SQLException,

                    DataAccessException
 {

                while(rs.next()){

                    return

rs.getInt(1);

                }

                return

0;

            }}));

        //获取结果   

        Map<String,
 Object> outValues = jdbcTemplate.call(new

CallableStatementCreator() {

             

            @Override

            public

CallableStatement createCallableStatement(Connection conn)

                    throws

SQLException {

                CallableStatement
 cstm = conn.prepareCall(callFunctionSql);

                cstm.setString(1,
"test");

                return

cstm;

            }

        },
 params);  

        System.out.println("函数调用成功!");

        System.out.println(outValues.get("result"));

        Assert.assertEquals(4,
 outValues.get("result")); 

    }

 

    /**

     *
 MYSQL的函数调用(和之前的类似)

     */

    public

void 
testCallableStatementCreator2() {  

        JdbcTemplate
 mysqlJdbcTemplate = new

JdbcTemplate(getMysqlDataSource());  

        //2.创建自定义函数 

        String
 createFunctionSql = "CREATE
 FUNCTION FUNCTION_TEST(str VARCHAR(100)) " 
+  

                "returns
 INT return LENGTH(str)"; 

        String
 dropFunctionSql = "DROP
 FUNCTION IF EXISTS FUNCTION_TEST"; 

        mysqlJdbcTemplate.update(dropFunctionSql);        

        mysqlJdbcTemplate.update(createFunctionSql); 

        //3.准备sql,mysql支持{?=
 call …}  

        final

String callFunctionSql = "{?=
 call FUNCTION_TEST(?)}"; 

        //4.定义参数 

        List<SqlParameter>
 params = new

ArrayList<SqlParameter>();  

        params.add(new

SqlOutParameter("result",
 Types.INTEGER));  

        params.add(new

SqlParameter("str",
 Types.VARCHAR));  

        Map<String,
 Object> outValues = mysqlJdbcTemplate.call(  

        new

CallableStatementCreator() {  

            @Override 

            public

CallableStatement createCallableStatement(Connection conn) throws

SQLException {  

              CallableStatement
 cstmt = conn.prepareCall(callFunctionSql);  

              cstmt.registerOutParameter(1,
 Types.INTEGER);  

              cstmt.setString(2,
"test"); 

                return

cstmt;  

            }},
 params);  

           Assert.assertEquals(4,
 outValues.get("result")); 

        } 

    public

DataSource getMysqlDataSource() {  

        String
 url = "jdbc:mysql://localhost:3306/test"; 

        DriverManagerDataSource
 dataSource =  

            new

DriverManagerDataSource(url, "root",
"");    
 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 

        return

dataSource;  

    }

     

    /**

     *
 调用存储过程(利用回调函数)

     */

    public

void 
testCallableStatementCreator3() {  

        final

String callProcedureSql = "{call
 PROCEDURE_TEST(?, ?)}"; 

        List<SqlParameter>
 params = new

ArrayList<SqlParameter>();

        //定义数组输出参数

        params.add(new

SqlInOutParameter("inOutName",
 Types.VARCHAR));  

        //定义存储过程参数

        params.add(new

SqlOutParameter("outId",
 Types.INTEGER));  

        Map<String,
 Object> outValues = jdbcTemplate.call(  

          new

CallableStatementCreator() {  

            @Override 

            public

CallableStatement createCallableStatement(Connection conn) throws

SQLException {  

              CallableStatement
 cstmt = conn.prepareCall(callProcedureSql);  

              cstmt.registerOutParameter(1,
 Types.VARCHAR);  

              cstmt.registerOutParameter(2,
 Types.INTEGER);  

              cstmt.setString(1,
"test"); 

              return

cstmt;  

        }},
 params);  

        Assert.assertEquals("Hello,test",
 outValues.get("inOutName")); 

        Assert.assertEquals(6,
 outValues.get("outId")); 

    } 

    /*

    public
 void test() {

        //1.声明SQL 

        String
 sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES"; 

        //2.执行查询

        jdbcTemplate.query(sql,
 new RowCallbackHandler(){

 

            @Override

            public
 void processRow(ResultSet rs) throws SQLException {

                //2.处理结果集 

                String
 value = rs.getString("TABLE_NAME");  

                System.out.println("Column
 TABLENAME:" + value); 

            }});

    }

    */

     

    @After

    public

void 
setDown(){

        jdbcTemplate.execute("drop
 function FUNCTION_TEST");

        System.out.println("函数删除成功!");

        jdbcTemplate.execute("DROP
 PROCEDURE PROCEDURE_TEST"); 

        System.out.println("存储过程删除成功!");

        String
 dropTableSQL = "drop
 table test";

        jdbcTemplate.execute(dropTableSQL);

        System.out.println("表删除成功!");

    }

}

2025年5月架构设计师论文真题回顾,附写作技巧、所涉知识点及参考范文(三) 本文主要回顾2025年上半年(2025-5-24)系统架构设计师考试下午论文的题目,同时附带写作技巧、所涉知识点及参考范文。试题三:多模型数据库及应用。 阅读详情

相关推荐

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响

本文深入探讨数字IC设计中clock_uncertainty的设置策略及其对后端实现的影响。通过分析时钟不确定度的组成(包括clock_skew、clock_jitter和margin),并结合实际项目经验,详细介绍了在不同设计阶段(综合、布局布线、签核)的动态调整方法。文章还提供了工程化处理参数来源、跨时钟域特殊处理以及优化时序收敛的实用技巧,帮助工程师提升数字IC设计的可靠性和性能。

weixin_29284657的博客 227

JdbcTemplate系列(一)----使用详解

一、简介 1.什么是JDBC模板(jdbcTemplate) JDBC--->Java Data Base Connectivity,java数据库连接,简单点说就是可以为多种关系数据库提供统一访问,由一组用java语言编写的类和接口组成。 模板就是事先准备好的东西,你只需要去套用就可以,JDBCTemplate就是这样的模板,通过设置JDBCTemplate可以减少对数据库

fendo 2万+

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 467

trigger调用(java)存储过程——HSQL_DB存储过程学习笔记(1)

1 trigger调用存储过程        createprocedure insert_student(name VARCHAR(50))        MODIFIESSQL DATA        beginATOMIC        DECLAREid INTEGER;        --DECLAREname VARCHAR(50);        setid=Select

蓄水方塘 1219

科研指南:IEEE期刊LaTeX/Word模板下载与使用全解析

本文详细解析了IEEE期刊LaTeX/Word模板的下载与使用技巧,帮助科研人员高效完成论文排版。从官方模板获取入口到LaTeX文档结构配置,再到Word样式管理与常见问题解决方案,全面覆盖投稿准备的关键步骤。特别针对数学公式、参考文献和图片处理等难点提供实用建议,助力学术写作规范化。

weixin_28396629的博客 566

手把手式介绍 ADNI 影像数据下载

1.搜索 1.1登录 打开ADNI的官网:http://adni.loni.usc.edu/,进入下面的界面。 点击 DATA&SMPLES 下的 ACCESS DATA AND SAMPLES,如下图。 页面跳转以后点击中间的“LOGIN”,这时会跳出一个新的界面,然后在右上角输入自己的帐号、密码即可。如果没有权限可以跳转到第2部分看看如何申请权限。 登录以后选择DOWNLOAD下的 Image Collections就是搜索下载影像数据,其他还有一些学习测试数据和遗传数据。 1.2 sea

永远想不起来更新的博客 1万+

Spring JdbcTemplate方法详解

JdbcTemplate主要提供以下五类方法:execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;query方法及queryForXXX方法:用于执行查询相关语句;call方法:用于执行存储过程、函数相关语句。 JdbcTemplate

萌萌的It人 www.itmmd.com 11万+

嵌入式AI实战:基于RK3588部署YOLOv11并集成OpenCV实现实时推理(全流程详解)

本文详细介绍了在RK3588芯片上部署YOLOv11目标检测模型的全流程,包括环境搭建、模型转换和实时推理实现。主要内容为:1)通过YOLOv11官方工具将PyTorch模型转为ONNX格式;2)使用RKNN Toolkit2将ONNX模型转换为适配RK3588的RKNN格式;3)在RK3588上结合OpenCV实现实时视频推理功能。教程提供了完整的代码示例和详细步骤说明,帮助开发者快速在边缘设备上部署目标检测模型,实现AI视觉应用的落地。

LXY_LOVE36的博客 213

跟我StepByStep学FLEX教程------访问数据库之hsqldb

跟我StepByStep学FLEX教程------访问数据库之hsqldb     说明:该文系作者原创,请勿商用或者用于论文发表,转载必须经作者同意并且注明出处。           这一讲本来要简单提及一下的,看上一讲的评论还是决定再详细一点,这样大家能够比较成功的做成Demo。       为了Demo比较容易,选择内存数据库hsqldb(读者也可以用mysql),这种小型数据...

wangyisong 167

YOLOv12改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度(二次改进A2C2f)

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1888

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring 数据访问策略

Spring封装的数据访问异常  与SQLException是一个Checked Exception不同,Spring定义的基本书籍访问异常DataAccessException是一个RuntimeException,DataAccessException继承自NestedRuntimeException,完整的保留了原始异常信息。  异常 定义 DataAcces

jazywoo_在路上 700

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

sqlh和mysql的区别_HSQL和MySQL的区别

我使用MySQL作为我的应用程序数据库,但HSQL作为测试内存数据库。现在的问题是,我有一个SQL selectQuery象下面这样:HSQL和MySQL的区别SELECT date(a.created_at) as record_dateFROM table a现在,日期()是日期时间转换为日期在MySQL中的功能,但在HSQL同样的功能是TO_DATE()。现在,我有一个方法将上面的查询输出到...

weixin_33514475的博客 680

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[原创]Spring JdbcTemplate 使用总结与经验分享

引言 近期开发的几个项目,均是基于Spring boot框架的web后端项目,使用JdbcTemplate执行数据库操作,实际开发过程中,掌握了一些有效的开发经验,踩过一些坑,在此做个记录及总结,与各位读者分享。 欢迎留言与我交流。 正确使用JdbcTemplate执行数据库操作 1、Bean声明 新增类型DatabaseConfiguration,添加注解@Configuration ...

weixin_34198453的博客 306

Spring–查看HSQLDB嵌入式数据库的内容

一个Spring @Configuration示例,用于启动HSQLDB嵌入式数据库或内存数据库。 DataSourceConfig.java package com.mkyong.config.db; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org...

一名可爱的技术搬运工 692

Spring-JdbcTemplate详解,这都看不懂就安心去当个咸鱼吧!

Nullable方法。

2401_89829461的博客 662

Spring JdbcTemplate详解

Spring JdbcTemplate使用实例 JDBC 基础 Java程序使用JDBC接口访问关系数据库的时候,需要以下几步: 创建全局DataSource实例,表示数据库连接池; 在需要读写数据库的方法内部,按如下步骤访问数据库: 从全局DataSource实例获取Connection实例; 通过Connection实例创建PreparedStatement实例; 执行SQL语句,如果是查询,则通过ResultSet读取结果集,如果是修改,则获得int结果。 正确编写JDBC代码的关键是使用try

编程牧马人 726

How to use hsqldb to test DB operation

sometime we want to test dao operation in junit test, below we will use hsqldb to test it. 1. setup hsqldb configuation. we have a persistent-config.xml like this: &lt;?xml version="1.0" encoding=...

sunxboy的专栏 162

jdbctemplate 执行多条sql_SpringBoot中文参考指南(2.1.6)31、使用 SQL 数据库

上一篇[30、安全]下一篇[31.3、JPA 和 Spring Data JPA]英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-sql.htmlGitHub:https://github.com/jijicai/Spring/tree/master/spring-boo...

weixin_39600319的博客 434

SpringBoot 官方文档示例:(67)使用hsqldb

boot

amadeus_liu2的博客 413

Spring开发系列教程(13)——JDBC

我们在前面介绍DataSourceDataSourceConnectionConnectionResultSetint正确编写JDBC代码的关键是使用释放资源,涉及到事务的代码需要正确提交或回滚事务。在Spring使用JDBC,首先我们通过IoC容器创建并管理一个DataSource实例,然后,Spring提供了一个,可以方便地让我们操作JDBC,因此,通常情况下,我们会实例化一个。顾名思义,这个类主要使用了。编写示例代码或者测试代码时,我们强烈推荐使用。

彩蛋在每篇文章的最后名片 1158

企业分布式微服务云SpringCloud SpringBoot mybatis (七)Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。数据源配置在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt...

qq_40342510的博客 278
上一篇: Spring的JDBCTemplate
下一篇: 动态去生成一个bean
webrobot
博客等级 码龄23年 111粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值