java getchunk_AppendChunk 和 GetChunk 方法示例 (VJ++)

AppendChunk 和 GetChunk 方法示例 (VJ++)AppendChunk and GetChunk methods example (VJ++)

09/18/2015

本文内容

适用于:Access 2013、Office 2013Applies to: Access 2013, Office 2013

以下示例使用 AppendChunk 和 GetChunk 方法,用来自其他记录的数据填充图像字段。This example uses the AppendChunk and GetChunk methods to fill an image field with data from another record.

// BeginAppendChunkJ

import com.ms.wfc.data.*;

import java.io.*;

import com.ms.com.*;

import java.util.*;

public class AppendChunkX

{

// The main entry point for the application.

public static void main (String[] args)

{

AppendChunkX();

System.exit(0);

}

// AppendChunkX function

static void AppendChunkX()

{

// Define ADO Objects.

Connection cnConn1 = null;

Recordset rstPubInfo = null;

//Declarations.

String strCnn;

String strPubID;

String strPRInfo;

String strMessage = "";

long lngOffset = 0;

long lngLogoSize;

final int conChunkSize = 100;

byte[] varChunk = new byte[conChunkSize];

int intCommand = 0 ;

int intMulChunkSize,intLastChunkSize;

Vector varLogo = new Vector();

BufferedReader in =

new BufferedReader(new InputStreamReader(System.in));

String line = null;

int noOfRecords;

int noOfRecordesDisplayed = 5;

int recordCount = 0;

String info;

int indexOfComma ;

try

{

// Open a connection.

strCnn = "Provider='sqloledb';Data Source='MySqlServer';"

+ "Initial Catalog='Pubs';Integrated Security='SSPI';";

cnConn1 = new Connection();

cnConn1.open(strCnn,"","",AdoEnums.CommandType.UNSPECIFIED);

// Open the pub_info Table.

rstPubInfo = new Recordset();

rstPubInfo.setCursorType(AdoEnums.CursorType.KEYSET );

rstPubInfo.setLockType(AdoEnums.LockType.OPTIMISTIC );

rstPubInfo.open("pub_info", cnConn1,AdoEnums.CursorType.KEYSET ,

AdoEnums.LockType.OPTIMISTIC, AdoEnums.CommandType.TABLE );

System.out.println ("Available logos are : \n");

noOfRecords = rstPubInfo.getRecordCount();

// Prompt for the Logo to copy.

for ( int i = 0; i < noOfRecords; i++)

{

recordCount++;

strMessage = strMessage +

rstPubInfo.getField("pub_id").getString() + "\n";

indexOfComma =

rstPubInfo.getField("pr_info").getString().indexOf(",");

info =

rstPubInfo.getField("pr_info").getString().substring(0,

indexOfComma );

strMessage = strMessage + info + "\n\n";

// Display five records at a time.

if ( recordCount == noOfRecordesDisplayed)

{

System.out.println(strMessage);

System.out.println("\n\nPress to continue..");

line = in.readLine();

strMessage = "";

recordCount = 0;

}

rstPubInfo.moveNext();

// Display last records and exit if last record.

if(rstPubInfo.getEOF())

{

System.out.println(strMessage);

break;

}

}

System.out.println ("\nEnter the ID of a logo to copy :\n" );

strPubID = in.readLine();

// Copy the logo to a variable in chunks.

rstPubInfo.setFilter("pub_id = '" + strPubID + "'");

lngLogoSize = rstPubInfo.getField("logo").getActualSize();

while (lngOffset < lngLogoSize)

{

varChunk = rstPubInfo.getField("logo")

.getByteChunk(conChunkSize);

int i = 0;

while (i < conChunkSize && varLogo.size() < (int)lngLogoSize)

{

varLogo.addElement(new Byte(varChunk[i]));

i++;

}

lngOffset = lngOffset + conChunkSize ;

}

//Get the data for New ID from the user.

System.out.println

("\nEnter a new pub ID [must be > 9899 & < 9999]:");

strPubID = in.readLine().trim();

System.out.println ("\nEnter descriptive text :");

strPRInfo = in.readLine().trim();

//Temporarily add new publisher to publishers table to

//avoid getting error foreign key constraint.

cnConn1.execute("INSERT publishers(pub_id) VALUES('" +

strPubID + "')");

//Add a new record.

rstPubInfo.addNew();

rstPubInfo.getField("pub_id").setString(strPubID);

rstPubInfo.getField("pr_info").setString(strPRInfo);

//Copy the selected logo to the new logo in chunks.

lngOffset = 0;

//Divide logosize in multiples of constant chunk size.

intMulChunkSize =

(varLogo.size()/conChunkSize) * conChunkSize;

intLastChunkSize = varLogo.size()- intMulChunkSize ;

byte[] arrChunk = new byte[conChunkSize];

byte[] lastChunk = new byte[intLastChunkSize];

while ( lngOffset < varLogo.size () )

{

int ii = 0 ;

// Copy the logo in constant chunk size.

if ( (int)lngOffset < intMulChunkSize)

{

while (ii < conChunkSize &&

(int)lngOffset < varLogo.size () )

{

arrChunk[ii] =

((Byte)varLogo.elementAt

((int)lngOffset)).byteValue();

ii++;

lngOffset++;

}

rstPubInfo.getField("logo").appendChunk(arrChunk);

}

// Copy the last remaining chunk.

else

{

while (ii < intLastChunkSize &&

(int)lngOffset < varLogo.size () )

{

lastChunk[ii] =

((Byte)varLogo.elementAt

((int)lngOffset)).byteValue();

ii++;

lngOffset++;

}

rstPubInfo.getField("logo").appendChunk(lastChunk);

}

}

// Update the new recordset with new logo.

rstPubInfo.update();

//Show the newly added data.

System.out.println ("\nNew Record : " +

rstPubInfo.getField("pub_id").getString() + "\n");

System.out.println ("Description : " +

rstPubInfo.getField("pr_info").getString() + "\n");

System.out.println ("Logo Size : " +

rstPubInfo.getField("logo").getActualSize() );

System.out.println ("\n\nPress key to continue.");

in.readLine();

//Delete new records because this is a demonstration.

rstPubInfo.requery();

cnConn1.execute("DELETE FROM pub_info WHERE pub_id = '" +

strPubID + "'");

cnConn1.execute("DELETE FROM publishers WHERE pub_id = '" +

strPubID + "'");

}

catch( AdoException ae )

{

// Notify user of any errors that result from ADO.

// Check for null pointer for connection object.

if(rstPubInfo.getActiveConnection()==null)

System.out.println("Exception: " + ae.getMessage());

// As passing a Recordset, check for null pointer first.

if (rstPubInfo != null)

{

PrintProviderError(rstPubInfo.getActiveConnection());

PrintADOError(ae);

}

else

{

System.out.println("Exception: " + ae.getMessage());

}

}

// System Read requires this catch.

catch( java.io.IOException je )

{

PrintIOError(je);

}

finally

{

// Cleanup objects before exit.

if (rstPubInfo != null)

if (rstPubInfo.getState() == 1)

rstPubInfo.close();

if (cnConn1 != null)

if (cnConn1.getState() == 1)

cnConn1.close();

}

}

// PrintProviderError Function

static void PrintProviderError( Connection Cnn1 )

{

// Print Provider errors from Connection object.

// ErrItem is an item object in the Connections Errors collection.

com.ms.wfc.data.Error ErrItem = null;

long nCount = 0;

int i = 0;

nCount = Cnn1.getErrors().getCount();

// If there are any errors in the collection, print them.

if( nCount > 0);

{

// Collection ranges from 0 to nCount - 1

for (i = 0; i< nCount; i++)

{

ErrItem = Cnn1.getErrors().getItem(i);

System.out.println("\t Error number: " + ErrItem.getNumber()

+ "\t" + ErrItem.getDescription() );

}

}

}

// PrintIOError Function

static void PrintIOError( java.io.IOException je)

{

System.out.println("Error \n");

System.out.println("\tSource = " + je.getClass() + "\n");

System.out.println("\tDescription = " + je.getMessage() + "\n");

}

// PrintADOError Function

static void PrintADOError(AdoException ae)

{

System.out.println("\t Error Source = " + ae.getSource() + "\n");

System.out.println("\t Description = " + ae.getMessage() + "\n");

}

}

// EndAppendChunkJ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值