【转】Java程序数据库连接,数据源配置,数据库连接池

数据源 和数据库连接池 数据源(数据库连接池)池的概念池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计 阅读详情

Java程序数据库连接,数据源配置,数据库连接池

Java程序,用到的数据库一定要配置数据源吗?

一般写小程序直接在程序里设置连接就可以了,而大的系统一般要配置数据源

数据源是要配置到中间件服务器中的(比如:Tomcat,JBoss,WebLogic一类的),配置后可以提高数据库查询性能,避免重复的打开和关闭数据库。因此开发java的B/S项目时(就是J2EE的项目,通过浏览器访问的项目),都会配置数据源连接。如果你写的管理软件是B/S结构,那么只需要在搭建环境的服务器上配置数据源就可以了,用户访问时是通过浏览器访问,不需要做其他设置。如果是C/S(就是用户需要单独安装客户端程序,比如QQ),也不需要在用户那里设置数据源,只需要在你的服务器端程序上手工配置好数据源即可。java实现数据库操作,现在多数流行的都是JDBC,采用配置数据源的方式多数是用了框架的原因,比如Hibernate、EJB、Struts、Spring。但是所有的数据源配置原理都是基于JDBC的操作。

1.直接编码连接数据库

JDBC (Java Database Connectivity)

JDBC以一种统一的方式来对各种各样的数据库进行存取,JDBC为开发人员隐藏了不同数据库的不同特性。程序员开发时,知道要开发访问数据库的应用,于是将一个对应数据库的JDBC驱动程序类的引用进行了编码,并通过使用适当的JDBC URL 连接到数据库。

代码示例: 

数据库连接代码1

 

 

或者通过配置属性文件的方式:

数据库连接代码2

 

以上都是传统的做法,这种做法一般在小规模的开发过程中不会产生问题,只要程序员熟悉Java语言、了解JDBC技术和各种数据库,可以很快开发出相应的应用程序。

这种方式带来的问题:

1、数据库服务器名称、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;
2
、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;
3
、随着实际使用终端的增加,原配置的连接池参数可能需要调整;

解决办法:
程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。由此,就有了JNDI,配置数据源。

2.配置数据源

JNDI(Java Naming and Directory Interface)

JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,后者在应用服务器中的对象。在JNDI中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。应用可以通过这个初始化的context经由这个目录树来定位它所需要的资源或对象。

在Tomcat中配置数据源获得连接

 在tomcat中通过JNDI服务获得DataSource引用,通过DataSource获得数据库连接,步骤如下:
 1.
配置数据源JNDI服务
 2.
在应用中通过JNDI使用javax.naming.Context的lookup方法来检索DataSource引用
 3. DataSource
的getConnection方法获得连接

 

配置JNDI服务的代码:

数据库连接代码3

 

配置文件内容:

数据库连接代码4

 

在应用中通过JNDI使用javax.naming.Context的lookup方法来检索DataSource引用,由DataSource获得数据库连接:

数据库连接代码5

 

直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。在系统部署后,如果数据库的相关参数变更,只需要修改配置文件中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。JNDI在满足了数据源配置的要求的基础上,还进一步扩充了作用:所有与系统外部的资源的引用,都可以通过JNDI定义和引用。所以,在J2EE规范中,J2EE 中的资源并不局限于 JDBC 数据源。引用的类型有很多,其中包括资源引用、环境实体和 EJB 引用。特别是 EJB 引用,它暴露了 JNDI 在 J2EE 中的另外一项关键角色:查找其他应用程序组件。EJB 的 JNDI 引用非常类似于 JDBC 资源的引用。在服务趋于转换的环境中,这是一种很有效的方法。可以对应用程序架构中所得到的所有组件进行这类配置管理,从 EJB 组件到 JMS 队列和主题,再到简单配置字符串或其他对象,这可以降低随时间的推移服务变更所产生的维护成本,同时还可以简化部署,减少集成工作。

J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时,间接地查找其他组件、资源或服务的通用机制。在多数情况下,提供 JNDI 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(Java 管理扩展(Java Management Extensions,JMX)也可以用作这个目的)。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。在 J2EE 中,JNDI 是把 J2EE 应用程序合在一起的粘合剂,JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。

3.数据库连接池

连接池是创建和管理多个连接的一种技术,这些连接可被需要使用它们的任何线程使用。连接池技术基于下述事实:对于大多数应用程序,当它们正在处理通常需要数毫秒完成的事务时,仅需要能够访问JDBC连接的1个线程。未处理事务时,连接处于闲置状态。使用连接池,允许其他线程使用闲置连接来执行有用的任务。事实上,当某一线程需要用JDBC在MySQL或其他数据库上执行操作时,需要用到由连接池提供的连接。使用连接完成线程后,线程会将连接返回给连接池,以便该连接能够被其他需要使用连接的线程使用。从连接池“借出”连接时,该连接仅供请求它的线程使用。从编程观点看,其效果等同于每次需要JDBC连接时调用DriverManager.getConnection(),但是,采用连接池技术,可通过使用新的或已有的连接结束线程。连接池技术能显著增加Java应用程序的性能,同时还能降低资源使用率。

连接池技术的主要优点包括:

(1) 缩短了连接创建时间

创建新的JDBC连接会导致联网操作和一定的JDBC驱动开销,如果这类连接是“循环”使用的,使用该方式,可避免这类不利因素。

(2)简化的编程模型

使用连接池技术时,每个单独线程能够像创建了自己的JDBC连接那样进行操作,从而允许使用直接的JDBC编程技术。

(3)受控的资源使用

如果不使用连接池技术,而是在每次需要时为线程创建新的连接,那么应用程序的资源使用将十分浪费,而且在负载较重的情况下会导致无法预期的结果。

注意,与数据库的每个连接均会在客户端和服务器端造成一定的开销(CPU、关联转换等)。每个连接均会对应用程序和数据库服务器的可用资源带来一定的限制。无论连接是否执行任何有用的任务,仍将使用这些资源中的相当一部分。

连接池能够使性能最大化,同时还能将资源利用控制在一定的水平之下,如果超过该水平,应用程序将崩溃而不仅仅是变慢。

幸运的是,Sun公司通过JDBC-2.0“可选”接口,完成了JDBC中连接池概念的标准化实施,所有主要应用服务器均实施了能够与MySQL Connector/J一起良好工作的这类API。

通常,你可以在应用服务器的配置文件中配置连接池,并通过Java命名和目录接口(JNDI)访问它。使用连接池时需要牢记的最重要事项是,无论在代码中出现了什么(异常、控制流等),连接以及由连接创建的任何部分(语句、结果集等)均应被关闭,以便能再次使用它们。如不然,它们将纠缠在一起,在最好的情况下,意味着它们所代表的数据库服务器资源(缓冲区、锁定、套接字等)可能会捆绑一段时间,在最坏的情况下,可能会导致永久捆绑。

连接池的最佳大小是什么?

取决于具体情况。尽管最佳大小取决与预期的负载和平均的数据库事务时间,最佳的连接池大小小于你的预期。例如,如果使用的是Sun公司的Java Petstore Blueprint应用程序,对于包含15~20个连接的连接池,使用MySQL和Tomcat,在可接受的相应时间下,可服务于中等程度的负载(600个并发用户)。要想确定用于应用程序的连接池大小,应使用诸如Apache Jmeter或The Grinder等工具创建负载测试脚本,并对应用程序进行负载测试。确定出发点的一种简单方法是,将连接池的最大连接数配置为“无限”,运行负载测试,并测量最大的并发连接数。随后,应进行反向操作,确定出使应用程序具有最佳性能的连接池的最小和最大值。

连接池与数据源区别?

数据库连接池是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应在请求队列中排队等待。并且应用程序可根据池中连接的使用率,动态增加或减少池中的连接数。当关闭连接操作时,连接并不真正的关闭,而是返回到连接池中作为空闲连接在后面继续使用,连接池技术解决了数据库连接频繁打开关闭所带来的性能问题。

有了连接池,我们没必要直接找数据源打交道了,连接池在你的程序所在的机器内存,数据源不一定,并且数据源和连接池会保持一定数量的连接,这样我们访问数据库的时候就不需要找数据源要连接,直接在本地内存中取得连接,可以提高程序的性能。连结池的存在是为了效率,因为实例化一个连接很耗费资源,而连接又有可重用的特征,所以可以把一定数量的连接放在连接池里面以提高效率。

 

Tomcat自带的数据库连接池管理

C3p0数据库连接池

数据库连接池配置代码:

数据库连接代码6

 

配置文件:

数据库连接代码7

 

 

 

【参考资料综合】

 

http://hi.baidu.com/sunkangle/blog/item/55a9db7cb076a3330dd7dadb.html  

JDBC与JNDI应用比较

 

http://13243356.javaeye.com/blog/402961   

数据库连接与数据源配置

 

http://hi.baidu.com/yaoming159/blog/item/5c4efe33e2122df31a4cfff5.html

JDBC与JNDI区别

 

http://wenwen.soso.com/z/q155303937.htm?pid=wenwen.autologin 

java数据库一定要配置数据源吗?

 

 

http://hi.baidu.com/begin_think/blog/item/b959f9f45b67092ebd310973.htmlJNDI

与JDBC比较以及连接池的技术

 

http://topic.youkuaiyun.com/u/20090311/10/f6ee00c1-34ed-42ef-b5aa-77d2c7a8e775.html 

连接池与数据源 分别起什么作用呢?

 

 

整理

By willowind

 

 

 

 

MyBatis的数据库连接池与数据源 1.背景介绍 MyBatis是一款优秀的Java持久化框架,它可以使用SQL语句直接操作数据库,而不需要编写繁琐的Java代码。MyBatis的核心功能是将SQL语句与Java代码分离,使得开发人员可以更加方便地操作数据库。 在MyBatis中,数据库连接池和数据源是两个非常重要的概念。数据库连接池是用于管理和重用数据库连接的组件,而数据 阅读详情

相关推荐

Tomcat配置高效数据源连接池HikariCP指南

HikariCP在设计时注重性能和轻量级。其源码简单、易于理解,并且经过优化以减少CPU的使用率。HikariCP使用了大量现代Java技术,如Java 8的Optional、Lambda表达式以及并发集合等,使得它能够在并发环境下提供更好的性能。低内存占用:与其他连接池相比,HikariCP的内存占用较小,它不会创建大量的后台线程。高速连接获取:HikariCP提供了最快的连接获取和友好的重试机制。简单的配置:尽管功能强大,但HikariCP的配置却异常简单。

weixin_42513209的博客 1175

Java-数据库连接池

1)预先在缓冲池中放入一定数量的链接,当需要建立数据库连接时,只需要从“缓冲池”中取出,使用完毕后再“放回”;2)数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立;3)当应用程序向连接池请求的连接数量超过最大连接数量时,这些请求将被加入到等待队列中。

Ego_Ekko的博客 6295

Java连接达梦数据库驱动dm_jdbc

Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14.jar dm_jdbc\Dm7JdbcDriver15.jar dm_jdbc\Dm7JdbcDriver16.jar dm_jdbc\Dm7JdbcDriver17.jar dm_jdbc\dmgeo_1.6.jar dm_jdbc\Hibernate Dialect&JDBC;.txt dm_jdbc\version.txt

详解数据库连接池概念、原理、运行机制等

概述   数据库连接池是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。那么其中的运行机制又是怎样的呢?今天主要介绍一下数据库连接池原理和常用的连接池。 01 为什么要使用连接池   数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,...

weixin_30485379的博客 803

转录组数据提取技巧汇总

数据整理是数据分析的前提,而数据的正确提取则是数据整理的前提。

zfyyzhys的博客 1784

5分钟搞懂SCMA:稀疏码多址接入的核心原理与实战应用

本文深入浅出地解析了SCMA(稀疏码多址接入)的核心原理与实战应用。通过对比传统正交多址技术,阐释了SCMA如何通过非正交叠加和稀疏码本设计,实现远超资源单元数的用户接入,从而有效应对5G海量机器通信(mMTC)的挑战。文章还探讨了其在上行海量连接、免授权接入等场景的应用潜力及工程实现中的关键考量。

zeta9的博客 264

什么是 Java 中的数据库连接池?为什么使用连接池来管理数据库连接?

数据库连接池(database connection pool)是在 Java 中用于管理数据库连接的一种技术。它的主要目的是提高数据库连接的重用性和性能。在传统的数据库连接方式中,每次与数据库建立连接时都需要进行一系列的网络通信和身份验证操作,这样的开销较大并且会影响应用程序的性能。而连接池则通过预先创建一定数量的数据库连接,并将这些连接保存在一个池中,供应用程序随时使用和归还。

Java智慧阁 2407

别只当玩具!聊聊这个555金属探测器电路背后的电磁感应与RLC调谐原理

本文深入解析了555金属探测器电路的工作原理,重点探讨了电磁感应与RLC调谐原理。通过分析电感线圈的电磁特性、RLC谐振电路的行为以及555定时器的多重功能,揭示了这一看似简单的装置如何实现金属检测。文章还提供了灵敏度优化方案和常见问题解决方法,帮助读者从科学角度理解这一实用技术。

weixin_29204205的博客 478

JAVA中数据库连接池及其配置

JAVA中数据库连接池及其配置

LuoluoluoluoYan的博客 1775

使用 Python 获取网络数据

本文介绍了 Python 获取网络数据、使用 requests 库、编写爬虫代码以及使用 IP 代理的方法。Python 的 requests 库非常方便,可以帮助我们快速访问网络资源。编写爬虫程序需要掌握正则表达式、HTTP 协议等知识,同时需要注意爬取速度和频率,以避免对被爬取网站造成负担。最后,使用 IP 代理可以帮助我们隐匿身份,保护我们的网络安全。

互联说 2695

Oracle数据库安装及配置(Oracle19c)

Windows 10安装Oracle 19c教程

weixin_69200200的博客 2万+

DBCP数据库连接池以及在Tomcat中配置JNDI数据源

本地Tomcat的JNDI配置

weixin_52937170的博客 1944

UE5 Mass交通规则设计指南:从Stop Sign到智能红绿灯的进阶配置

本文详细解析了UE5 Mass框架下的交通规则设计,从基础Stop Sign到智能红绿灯的进阶配置。通过UMassTrafficIntersectionSpawnDataGenerator等核心组件,实现动态响应、自然流畅的交通行为系统,提升虚拟城市的真实感与游戏性。

weixin_30500105的博客 502

【JAVA】JAVA数据源

文章目录前言连接池、数据源、JNDI连接池、数据源连接池思想JNDI直连数据源 前言 我们在进行数据访问,声明模板和repository之前【JAVA】Spring对JDBC的支持,都需要配置数据源用来连接数据库。数据源又可以分为两大类:直连的数据源 和 连接池的数据源 ,其中连接池的数据源又有多种,接下来就让我们来学习一下这两种数据源。当然在学习之前,我们首先需要知道连接池、数据源、JNDI是什...

xueba8的博客 1万+

T型三电平逆变器中点电位平衡详解

T型三电平逆变器(T-type Three-Level Inverter)是一种高效的多电平拓扑,相比传统NPC(Neutral Point Clamped)三电平逆变器,具有更低的开关损耗、更高效率和更简单的结构,尤其适用于中功率应用(如光伏逆变器、风电变换器和工业驱动)。(T-type Three-Level Inverter)中的应用已成为当前中高压功率变换领域(如光伏逆变器、储能PCS、电动汽车充电桩、风电并网和工业驱动)的热门方案。针对 T型逆变器,类似 NPC 的零序注入法适用。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 546

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1545

Java程序数据库连接,数据源配置,数据库连接池

Java程序数据库连接,数据源配置,数据库连接池 Java程序,用到的数据库一定要配置数据源吗? 一般写小程序直接在程序里设置连接就可以了,而大的系统一般要配置数据源 数据源是要配置到中间件服务器中的(比如:Tomcat,JBoss,WebLogic一类的),配置后可以提高数据库查询性能,避免重复的打开和关闭数据库。因此开发java的B/S项目时(就是J2EE的项目,通过浏览器访

u012967013的博客 4438

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Tomcat中配置数据源和连接池

(1)为什么需要配置数据源和连接池? 我们知道在每次java程序俩接数据库的时候我们都需要请求连接数据库然后打开读取数据然后关闭, 这样使得每一个用户访问的时候都需要服务器做出相应,这样的话服务器端承受巨大的压力,如此效率就会下降, 为了解决这个问题我们可以让数据库提前打开连接等待用户连接当有用户连接的时候,就把数据库已存在的连接 给用户即可 而我们就把这条连接叫做“连接池”  当连接池中

徐刘根的博客 4607

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Hutool JDBC实战:多数据源配置与连接池优化

本文详细介绍了如何使用Hutool JDBC工具高效配置和管理多数据源,并集成HikariCP等主流连接池进行性能优化。通过实战代码演示了从配置文件定义、动态数据源切换,到连接池参数调优和高级自定义扩展的全过程,为企业级应用提供稳定可靠的数据库访问方案。

pink的博客 841

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

在GlassFish中配置数据源连接池

下面,我们将告诉你如何在你的服务器(比如:GlassFish和Tomcat)中配置一个数据源,并如何在Web应用程序中访问数据源。GlassFish有一个基于web的管理接口,你可以通过来配置数据源,把你的浏览器指向http://localhost:4848,然后登录它,默认的用户名和密码是amin和adminadmin。 首先,配置一个数据库连接池。选择“连接池”> “新建”,进行常

我的博客 7348

Spring配置数据源(连接池)

首先数据源就是为了提高程序的性能而出现的。连接池的作用是为了提高性能,避免重复多次的打开数据库连接而曹诚性能的下降和系统资源的浪费;连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建和销毁的过程。这样以提高系统的性能。 数据源的开发步骤: 1,导入数据源的坐标和数据库驱动坐标 2,创建数据源对象 3,设置数据源的基本连接数据 4,使用数据源获取连接资源和归还连接资源 使用连接池的优势: 1、资源复用:由于数据库连接得到重用,避免了频繁创建

security_linsho的博客 4506

Mybatis数据源结构解析之连接池

对于 ORM 框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对 MyBatis 框架的数据源结构进行详尽的分析,找出什么时候创建 Connection ,并且深入解析 MyBatis 的连接池。 本章的组织结构: 零、什么是连接池和线程池 一、MyBatis 数据源 DataSource 分类 二、数据源 DataSource 的创建过程 三、 DataSource 什么时候创建 Connection 对象 四、不使用连接池的 UnpooledDataSource

srs1995的博客 3981

Java数据库连接池

一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。如下图所示: 二、使用数据库连接池优化程序性能 2.1、数据库连接池的基本概念 数据库连接是一种关键的有限的昂贵的资源,这一点在...

pan_junbiao的博客 2122

weblogic10数据源(连接池)配置

在weblogic中配置数据源比在tomcat中配置数据源要麻烦一些,但是性能要强大得多! 1.        打开浏览器输入控制台url,进入控制台进行管理(http://82.XXX.XXX.XXX:7001/console),用户名密码输入之前配置的域用户名、密码 2.        点击“锁定并编辑”,选择:服务-数据源 3.        点击新建,选择“一般数据源”,

御前两把刀的专栏 2万+
上一篇: 【转】Eclipse插件安装总结
下一篇: 【转】windows xp下PHP环境搭建及BugFree安装步骤
willowind
博客等级 码龄18年 5粉丝 0原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值