java lob_Java程序中使用oracle数据库LOB字段的总结

LOB中咱们用的比较多的主要有两种CLOB和BLOB,咱们对两种类型分别讨论html

1.CLOB是字符型LOB,主要存储文本信息,最长为4G.,在J2EE程序中,好比网页的textarea中的字符信息比较长,Varchar2字段类型不能知足时,咱们就得用CLOB数据类型,咱们此次项目中就碰到这种状况.如今咱们先说说如何存取CLOB字段java

如今我要把网页中的textarea元素的信息保存到数据库的CLOB字段中, 咱们都知道textarea中的信息固然不能直接保存成CLOB,咱们在后台获得的是String类型的,很少说拉,咱们仍是以一个实例讲吧!sql

先建一个test表,表有2个字段:ID,CONTENTS,其中CONTENTS保存CLOB类型的文本数据数据库

525a444d1868319309c13e584fd6aedc.gif

create

table

TEST

525a444d1868319309c13e584fd6aedc.gif(

525a444d1868319309c13e584fd6aedc.gifID

VARCHAR2

(

18

)

not

null

,

525a444d1868319309c13e584fd6aedc.gifCONTENTS CLOB,

525a444d1868319309c13e584fd6aedc.gif)

525a444d1868319309c13e584fd6aedc.gif

525a444d1868319309c13e584fd6aedc.gif

接着咱们编写一个测试用的jsp文件ClobTest.jsp,代码以下服务器

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

...

@ page language="java"contentType="text/html; charset=gb2312"

%>

525a444d1868319309c13e584fd6aedc.gif

<

html

>

525a444d1868319309c13e584fd6aedc.gif

<

head

>

525a444d1868319309c13e584fd6aedc.gif

<

meta

http-equiv

="Content-Type"

content

="text/html; charset=gb2312"

>

525a444d1868319309c13e584fd6aedc.gif

<

title

>

Clob对象的存取测试

title

>

525a444d1868319309c13e584fd6aedc.gif

head

>

525a444d1868319309c13e584fd6aedc.gif

525a444d1868319309c13e584fd6aedc.gif

<

body

>

525a444d1868319309c13e584fd6aedc.gif

<

form

name

="test"

method

="post"

action

="clobTest.action"

>

525a444d1868319309c13e584fd6aedc.gif

<

table

width

="80%"

height

="88"

border

="0"

align

="center"

cellpadding

="0"

cellspacing

="0"

>

525a444d1868319309c13e584fd6aedc.gif

<

tr

>

525a444d1868319309c13e584fd6aedc.gif

<

td

height

="30"

align

="center"

>

输入ID号

<

input

type

="text"

name

="ID"

>

525a444d1868319309c13e584fd6aedc.gif

tr

>

525a444d1868319309c13e584fd6aedc.gif

<

tr

>

525a444d1868319309c13e584fd6aedc.gif

<

td

align

="center"

>

525a444d1868319309c13e584fd6aedc.gif

<

textarea

rows

="28"

cols

="68"

name

="CONTENTS"

>

textarea

>

525a444d1868319309c13e584fd6aedc.gif

td

>

525a444d1868319309c13e584fd6aedc.gif

tr

>

525a444d1868319309c13e584fd6aedc.gif

<

tr

>

525a444d1868319309c13e584fd6aedc.gif

<

td

align

="center"

>

525a444d1868319309c13e584fd6aedc.gif

<

input

type

="submit"

name

="Submit"

value

="提交"

>

525a444d1868319309c13e584fd6aedc.gif

td

>

525a444d1868319309c13e584fd6aedc.gif

tr

>

525a444d1868319309c13e584fd6aedc.gif

table

>

525a444d1868319309c13e584fd6aedc.gif

form

>

525a444d1868319309c13e584fd6aedc.gif

body

>

525a444d1868319309c13e584fd6aedc.gif

html

>

525a444d1868319309c13e584fd6aedc.gif

525a444d1868319309c13e584fd6aedc.gif

点击”提交”按钮,咱们在后台的到的是2个String类型的对象oracle

String strID = request.getParameter("ID");

String strContents = request.getParameter("CONTENTS");app

接着咱们要作的任务就是如何把String类型CONTENTS存到数据库中的CLOB类型字段中!jsp

注意:LOB数据不能象其它类型数据同样直接插入(INSERT)。插入前必须先插入一个空的LOB对象,CLOB类型的空对象为EMPTY_CLOB (),BLOB类型的空对象为EMPTY_BLOB()。以后经过SELECT命令查询获得先前插入的记录并锁定,继而将空对象修改成所要插入的LOB对象。post

525a444d1868319309c13e584fd6aedc.gif

//

咱们先插入一个空的CLOB对象

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

public

int

insertEmptyClob()

throws

Exception

...

{

cbc2456743fdbcbacaf9c7d398d9f156.gifStatement statement=null;

cbc2456743fdbcbacaf9c7d398d9f156.gifintintResult=-1;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.giftry...{

cbc2456743fdbcbacaf9c7d398d9f156.gif//建立数据库操做语句cbc2456743fdbcbacaf9c7d398d9f156.gifstatement=connection.createStatement();

cbc2456743fdbcbacaf9c7d398d9f156.gif//定义SQL语句cbc2456743fdbcbacaf9c7d398d9f156.gifString strSQL=“INSET INTO TEST (ID,CONTENTS) VALUES(strID, EMPTY_CLOB())”;

cbc2456743fdbcbacaf9c7d398d9f156.gif//执行SQL语句cbc2456743fdbcbacaf9c7d398d9f156.gifintResult=statement.executeUpdate(strSQL);

cbc2456743fdbcbacaf9c7d398d9f156.gifSystem.out.println("intResult valus is"+intResult);

cbc2456743fdbcbacaf9c7d398d9f156.gifreturnintResult;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}catch(Exception e)...{

cbc2456743fdbcbacaf9c7d398d9f156.gife.printStackTrace();

cbc2456743fdbcbacaf9c7d398d9f156.gifreturn-1;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}finally...{

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(statement!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifstatement.close();

85436e02641bc272a07f0764aa95052c.gif}85436e02641bc272a07f0764aa95052c.gif}c4a598015b86eda3087cf77b80fb788a.gif}

525a444d1868319309c13e584fd6aedc.gif

525a444d1868319309c13e584fd6aedc.gif

//

把strCONTENT插入CLOB字段

525a444d1868319309c13e584fd6aedc.gif

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

public

void

insertClob()

throws

Exception

...

{

cbc2456743fdbcbacaf9c7d398d9f156.gifStatement statement=null;

cbc2456743fdbcbacaf9c7d398d9f156.gifResultSet resultset=null;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.giftry...{

cbc2456743fdbcbacaf9c7d398d9f156.gif//设置不自动提交cbc2456743fdbcbacaf9c7d398d9f156.gifconnection.setAutoCommit(false);

cbc2456743fdbcbacaf9c7d398d9f156.gif//建立数据库操做语句cbc2456743fdbcbacaf9c7d398d9f156.gifstatement=connection.createStatement();

cbc2456743fdbcbacaf9c7d398d9f156.gif//定义SQL语句cbc2456743fdbcbacaf9c7d398d9f156.gifString strSQL=“SELECT CONTENTS FROM TEST WHERE ID=strID"”cbc2456743fdbcbacaf9c7d398d9f156.gifresultset=statement.executeQuery(strSQL);

cbc2456743fdbcbacaf9c7d398d9f156.giforacle.sql.CLOB contents=null;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifwhile(resultset.next())...{

cbc2456743fdbcbacaf9c7d398d9f156.gif//取出CLOB对象cbc2456743fdbcbacaf9c7d398d9f156.gifcontents=(oracle.sql.CLOB)resultset.getClob("CONTENTS");

85436e02641bc272a07f0764aa95052c.gif}cbc2456743fdbcbacaf9c7d398d9f156.gifWriter out=contents.getCharacterOutputStream();

cbc2456743fdbcbacaf9c7d398d9f156.gifout.write(strContents);

cbc2456743fdbcbacaf9c7d398d9f156.gifout.flush();

cbc2456743fdbcbacaf9c7d398d9f156.gifout.close();

cbc2456743fdbcbacaf9c7d398d9f156.gif//数据库提交cbc2456743fdbcbacaf9c7d398d9f156.gifconnection.commit();

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}catch(Exception e)...{

cbc2456743fdbcbacaf9c7d398d9f156.gife.printStackTrace();

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}finally...{

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(resultset!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifresultset.close();

85436e02641bc272a07f0764aa95052c.gif}07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(statement!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifstatement.close();

85436e02641bc272a07f0764aa95052c.gif}85436e02641bc272a07f0764aa95052c.gif}c4a598015b86eda3087cf77b80fb788a.gif}

525a444d1868319309c13e584fd6aedc.gif

525a444d1868319309c13e584fd6aedc.gif

OK,咱们已经把这段文本以CLOB字段的形式保存到数据库中了,在实际应用中,若是要保存或修改一条记录,咱们要分2步作,先保存或修改非LOB字段类型的字段,再保存或修改LOB字段!接下来咱们来把刚才保存到数据库中的CLOB字段读到jsp页面中去。测试

咱们在保存的时候,CLOB字段会把上面textarea中的文本按原来的格式一行一行(包括空格)都保存到CLOB字段中,读取的时候咱们只要按照原来格式读起出来就好了(我这里本身用了一个小处理方法,但若是你有更好的方法请告诉我)。在这里咱们把CLOB读到StringBuffer中,为了保存不一样行我在行之间加了个“&”字符来区分。最后转化成String

放到VO中,这样就保证从前台到后台,从后台到前台的数据传递的一致性!代码以下:

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

/** */

/**cbc2456743fdbcbacaf9c7d398d9f156.gif* 获取CLOB文本对象

cbc2456743fdbcbacaf9c7d398d9f156.gif*sbSQL

cbc2456743fdbcbacaf9c7d398d9f156.gif*cbc2456743fdbcbacaf9c7d398d9f156.gif*java.lang.Exception

c4a598015b86eda3087cf77b80fb788a.gif*/

525a444d1868319309c13e584fd6aedc.gif

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

public

String selectIncludeClob(StringBuffer sbSQL)

throws

Exception

...

{

cbc2456743fdbcbacaf9c7d398d9f156.gifStatement stmt=null;

cbc2456743fdbcbacaf9c7d398d9f156.gifResultSet rs=null;

cbc2456743fdbcbacaf9c7d398d9f156.gifStringBuffer sbResult=newStringBuffer();

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.giftry...{

cbc2456743fdbcbacaf9c7d398d9f156.gif//设定数据库不自动提交

cbc2456743fdbcbacaf9c7d398d9f156.gif//connection.setAutoCommit(false);

cbc2456743fdbcbacaf9c7d398d9f156.gif//建立数据库操做语句cbc2456743fdbcbacaf9c7d398d9f156.gifstmt=connection.createStatement();

cbc2456743fdbcbacaf9c7d398d9f156.gif//获取结果集cbc2456743fdbcbacaf9c7d398d9f156.gifrs=stmt.executeQuery(sbSQL.toString());

cbc2456743fdbcbacaf9c7d398d9f156.gif

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifwhile(rs.next())...{

cbc2456743fdbcbacaf9c7d398d9f156.gifCLOB clob=(CLOB)rs.getClob("CONTENTS");

cbc2456743fdbcbacaf9c7d398d9f156.gifReader isClob=clob.getCharacterStream();

cbc2456743fdbcbacaf9c7d398d9f156.gifBufferedReader bfClob=newBufferedReader(isClob);

cbc2456743fdbcbacaf9c7d398d9f156.gifString strClob=bfClob.readLine();

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifwhile(strClob!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifsbResult.append(strClob);

cbc2456743fdbcbacaf9c7d398d9f156.gifbResult.append("&");

cbc2456743fdbcbacaf9c7d398d9f156.gifstrClob=bfClob.readLine();

85436e02641bc272a07f0764aa95052c.gif}85436e02641bc272a07f0764aa95052c.gif}cbc2456743fdbcbacaf9c7d398d9f156.gif//提交事务

cbc2456743fdbcbacaf9c7d398d9f156.gif//connection.commit();07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}catch(Exception e)...{

cbc2456743fdbcbacaf9c7d398d9f156.gife.printStackTrace();

cbc2456743fdbcbacaf9c7d398d9f156.gifthrowe;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}finally...{

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(rs!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifrs.close();

85436e02641bc272a07f0764aa95052c.gif}07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(stmt!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifstmt.close();

85436e02641bc272a07f0764aa95052c.gif}85436e02641bc272a07f0764aa95052c.gif}cbc2456743fdbcbacaf9c7d398d9f156.gifreturnsbResult.toString();

c4a598015b86eda3087cf77b80fb788a.gif}

525a444d1868319309c13e584fd6aedc.gif

525a444d1868319309c13e584fd6aedc.gif

到jsp页面中,咱们从VO中获取改文本信息。

525a444d1868319309c13e584fd6aedc.gif

<

textarea

rows

="42"

cols

="68"

name

="CONTENTS"

style

="border-style: solid; border-color: #FFFFFF; font-family:仿宋_GB2312; font-size:14pt; line-height:200%; margin-top:8; margin-bottom:6"

>

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

...

cbc2456743fdbcbacaf9c7d398d9f156.gifStringcontent=vo.getContent();

cbc2456743fdbcbacaf9c7d398d9f156.gifString[] contentArray=content.split("&");

cbc2456743fdbcbacaf9c7d398d9f156.giffor(inti=0;i

cbc2456743fdbcbacaf9c7d398d9f156.gifStrings=contentArray[i];

cbc2456743fdbcbacaf9c7d398d9f156.gifout.println(s);

c4a598015b86eda3087cf77b80fb788a.gif}

525a444d1868319309c13e584fd6aedc.gif

%>

525a444d1868319309c13e584fd6aedc.gif

textarea

>

这样咱们就保证什么格式保存就以什么格式显示。

2.BLOB字段,二进制LOB,主要存储二进制数据,最长为4G,在J2EE程序中,通常相似于图片和文件的保存。固然也有另外一种方法,就把图片和文件保存在硬盘上,数据库中只保存图片的连接地址和文件在服务器上的路径。若是遇到文件和图片比较重要的仍是须要保存到数据库中(例如:咱们作国土资源项目的时候,好多图片、文件就很重要,须要保存到数据库中),下面我写一个保存文件到数据库的Blob字段和从数据库的Blob字段中获取文件的方法

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

/** */

/**cbc2456743fdbcbacaf9c7d398d9f156.gif* 把上传的文件保存到数据库的Blob字段中

cbc2456743fdbcbacaf9c7d398d9f156.gif*strTableName 对应的表名称

cbc2456743fdbcbacaf9c7d398d9f156.gif*strColumnName 表中保存文件的Blob字段名称

cbc2456743fdbcbacaf9c7d398d9f156.gif*@paraminputStream 输入的文件流

cbc2456743fdbcbacaf9c7d398d9f156.gif*@paramsbSQLWhere where条件

cbc2456743fdbcbacaf9c7d398d9f156.gif*@throwsjava.lang.Exception

c4a598015b86eda3087cf77b80fb788a.gif*/

525a444d1868319309c13e584fd6aedc.gif

public

static

void

fileUpload(String strTableName,

525a444d1868319309c13e584fd6aedc.gifString strColumnName,

525a444d1868319309c13e584fd6aedc.gifInputStream inputStream,

525a444d1868319309c13e584fd6aedc.gifStringBuffer sbSQLWhere)

184aabef8e6ac1a42fc5024ff365827c.gif

837ef41fadadf369bbf344626396f25a.gif

throws

Exception

...

{

cbc2456743fdbcbacaf9c7d398d9f156.gifConnection con=null;

cbc2456743fdbcbacaf9c7d398d9f156.gifResultSet resultset=null;

cbc2456743fdbcbacaf9c7d398d9f156.gifStatement stmt=null;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.giftry...{

cbc2456743fdbcbacaf9c7d398d9f156.gif//获得数据库链接cbc2456743fdbcbacaf9c7d398d9f156.gifcon=DBConnector.getConnection();

cbc2456743fdbcbacaf9c7d398d9f156.gif//构建查询语句cbc2456743fdbcbacaf9c7d398d9f156.gifStringBuffer sbSQL=newStringBuffer();

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQL.append("UPDATE");

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQL.append(strTableName);

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQL.append("SET");

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQL.append(strColumnName);

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQL.append("=EMPTY_BLOB()");

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQL.append(sbSQLWhere);

cbc2456743fdbcbacaf9c7d398d9f156.gifSystem.out.println("update sql value is*******"+sbSQL.toString());

cbc2456743fdbcbacaf9c7d398d9f156.gif//获取数据库操做语句cbc2456743fdbcbacaf9c7d398d9f156.gifstmt=con.createStatement();

cbc2456743fdbcbacaf9c7d398d9f156.gif//插入空的blob对象cbc2456743fdbcbacaf9c7d398d9f156.gifstmt.executeUpdate(sbSQL.toString());

cbc2456743fdbcbacaf9c7d398d9f156.gifcon.setAutoCommit(false);

cbc2456743fdbcbacaf9c7d398d9f156.gifStringBuffer sbSQLBlob=newStringBuffer();

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQLBlob.append("SELECT");

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQLBlob.append(strColumnName);

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQLBlob.append("FROM");

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQLBlob.append(strTableName);

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQLBlob.append(sbSQLWhere);

cbc2456743fdbcbacaf9c7d398d9f156.gifsbSQLBlob.append("FOR UPDATE");

cbc2456743fdbcbacaf9c7d398d9f156.gifSystem.out.println("select sql value is*********"+sbSQL.toString());

cbc2456743fdbcbacaf9c7d398d9f156.gifresultset=stmt.executeQuery(sbSQLBlob.toString());

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifwhile(resultset.next())...{

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif/**//*取出此BLOB对象*/cbc2456743fdbcbacaf9c7d398d9f156.giforacle.sql.BLOB blob=(oracle.sql.BLOB)resultset.getBlob("BODY");

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif/**//*向BLOB对象中写入数据*/cbc2456743fdbcbacaf9c7d398d9f156.gifBufferedOutputStream out=newBufferedOutputStream(blob.getBinaryOutputStream());

cbc2456743fdbcbacaf9c7d398d9f156.gifBufferedInputStream in=newBufferedInputStream(inputStream);

cbc2456743fdbcbacaf9c7d398d9f156.gifintc;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifwhile((c=in.read())!=-1)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifout.write(c);

85436e02641bc272a07f0764aa95052c.gif}cbc2456743fdbcbacaf9c7d398d9f156.gifin.close();

cbc2456743fdbcbacaf9c7d398d9f156.gifout.close();

85436e02641bc272a07f0764aa95052c.gif}cbc2456743fdbcbacaf9c7d398d9f156.gifcon.setAutoCommit(false);

cbc2456743fdbcbacaf9c7d398d9f156.gifcon.commit();

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}catch(Exception ex)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifex.printStackTrace();

cbc2456743fdbcbacaf9c7d398d9f156.gifthrowex;

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gif}finally...{

07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(stmt!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifstmt.close();

85436e02641bc272a07f0764aa95052c.gif}07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifIf (resultset!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifresultset.close();

85436e02641bc272a07f0764aa95052c.gif}07062f2c3ba67f5b3d368e6bc3533394.gif

61aebdf9c092566434088c5e30613686.gifif(con!=null)...{

cbc2456743fdbcbacaf9c7d398d9f156.gifcon.close();

85436e02641bc272a07f0764aa95052c.gif}85436e02641bc272a07f0764aa95052c.gif}c4a598015b86eda3087cf77b80fb788a.gif}

525a444d1868319309c13e584fd6aedc.gif

下面的方法是从数据库中获得上传的文件的输入流,把输入流写到servlet流中,再从页面中获取,servlet就不写了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值