configlib/dbmsjdbc/src/native/DbmsResultSet.cpp
changeset 1 b538b70cbe51
equal deleted inserted replaced
0:2e8eeb919028 1:b538b70cbe51
       
     1 // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <jni.h>
       
    17 #include "DbmsResultSet.h"
       
    18 #include "DbmsStatement.h"
       
    19 #include "DbmsConnection.h"
       
    20 #include "Utils.h"
       
    21 #include "dbmsjni/com_symbian_dbms_jdbc_DbmsResultSet.h"
       
    22 
       
    23 
       
    24 // //
       
    25 // DbmsResultSet peer
       
    26 // //
       
    27 
       
    28 DbmsResultSet::DbmsResultSet(DbmsStatement* aStatement){
       
    29 	iStatement = aStatement;
       
    30 }
       
    31 
       
    32 DbmsResultSet::~DbmsResultSet(){
       
    33 }
       
    34 
       
    35 
       
    36 // //
       
    37 // JNI
       
    38 // //
       
    39 
       
    40 /*
       
    41  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
    42  * Method:    _rowcount
       
    43  * Signature: (I)I
       
    44  */
       
    45 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1rowcount
       
    46   (JNIEnv *, jobject, jint aPeerHandle) {
       
    47 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
    48 	RDbView& view = rset->iStatement->iView;
       
    49 	jint res = 0;
       
    50 	TRAPD(err, res = view.CountL() );
       
    51 	if ( err != KErrNone ) {
       
    52 		return err;
       
    53 	}
       
    54 	return res;
       
    55 }
       
    56 
       
    57 /*
       
    58  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
    59  * Method:    _colcount
       
    60  * Signature: (I)I
       
    61  */
       
    62 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1colcount
       
    63   (JNIEnv *, jobject, jint aPeerHandle) {
       
    64 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
    65 	RDbView& view = rset->iStatement->iView;
       
    66 	return view.ColCount();
       
    67 }
       
    68 
       
    69 /*
       
    70  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
    71  * Method:    _next
       
    72  * Signature: (II)Z
       
    73  */
       
    74 JNIEXPORT jboolean JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1next
       
    75   (JNIEnv *, jobject, jint aPeerHandle, jint aCount) {
       
    76 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
    77 	RDbView& view = rset->iStatement->iView;
       
    78 	TBool res = EFalse;
       
    79 	TInt err = 0;
       
    80 	for ( TInt i = 0; i < aCount ; i++ )
       
    81 		{
       
    82 		TRAP( err, res = view.NextL() );
       
    83 		if ( err != KErrNone || ! res )
       
    84 			{
       
    85 			return false;
       
    86 			}
       
    87 		}
       
    88 	TRAP(err, view.GetL());
       
    89 	if ( err != KErrNone ) {
       
    90 		return false;
       
    91 	}
       
    92 	return true;
       
    93 }
       
    94 
       
    95 /*
       
    96  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
    97  * Method:    _first
       
    98  * Signature: (I)Z
       
    99  */
       
   100 JNIEXPORT jboolean JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1first
       
   101   (JNIEnv *, jobject, jint aPeerHandle){
       
   102 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   103 	RDbView& view = rset->iStatement->iView;
       
   104 	TBool res = EFalse;
       
   105 	TInt err = 0;
       
   106 	TRAP(err, res = view.FirstL());
       
   107 	if ( err != KErrNone ) {
       
   108 		return false;
       
   109 	}
       
   110 	if ( res ) {
       
   111 		TRAP(err, view.GetL());
       
   112 		if ( err != KErrNone ) {
       
   113 			return false;
       
   114 		}
       
   115 		return true;
       
   116 	}
       
   117 	return false;
       
   118 }
       
   119 
       
   120 /*
       
   121  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   122  * Method:    _last
       
   123  * Signature: (I)Z
       
   124  */
       
   125 JNIEXPORT jboolean JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1last
       
   126   (JNIEnv *, jobject, jint aPeerHandle) {
       
   127 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   128 	RDbView& view = rset->iStatement->iView;
       
   129 	TBool res = EFalse;
       
   130 	TInt err = 0;
       
   131 	TRAP(err, res = view.LastL());
       
   132 	if ( res ) {
       
   133 		TRAP(err, view.GetL());
       
   134 		if ( err != KErrNone ) {
       
   135 			return false;
       
   136 		}
       
   137 		return true;
       
   138 	}
       
   139 	return false;
       
   140 }
       
   141 
       
   142 /*
       
   143  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   144  * Method:    _prev
       
   145  * Signature: (II)Z
       
   146  */
       
   147 JNIEXPORT jboolean JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1prev
       
   148   (JNIEnv *, jobject, jint aPeerHandle, jint aCount) {
       
   149 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   150 	RDbView& view = rset->iStatement->iView;
       
   151 	TBool res = EFalse;
       
   152 	TInt err = 0;
       
   153 	for ( TInt i = 0; i < aCount ; i++ )
       
   154 		{
       
   155 		TRAP( err, res = view.PreviousL() );
       
   156 		if ( err != KErrNone || ! res )
       
   157 			{
       
   158 			return false;
       
   159 			}
       
   160 		}
       
   161 	TRAP(err, view.GetL());
       
   162 	if ( err != KErrNone ) {
       
   163 		return false;
       
   164 	}
       
   165 	return true;
       
   166 }
       
   167 
       
   168 /*
       
   169  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   170  * Method:    _close
       
   171  * Signature: (I)V
       
   172  */
       
   173 JNIEXPORT void JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1close
       
   174   (JNIEnv *, jobject, jint aPeerHandle) {
       
   175 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   176 	RDbView& view = rset->iStatement->iView;
       
   177 	view.Close();
       
   178 	delete rset;
       
   179 }
       
   180 
       
   181 /*
       
   182  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   183  * Method:    delete
       
   184  * Signature: (I)Z
       
   185  */
       
   186 JNIEXPORT jboolean JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1delete
       
   187   (JNIEnv *, jobject, jint /*aPeerHandle*/) {
       
   188 	// not implemented
       
   189 	return false;
       
   190 }
       
   191 
       
   192 /*
       
   193  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   194  * Method:    _isSigned
       
   195  * Signature: (II)I
       
   196  */
       
   197 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1isSigned
       
   198   (JNIEnv *, jobject, jint aPeerHandle, jint aColNo) {
       
   199 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   200 	RDbView& view = rset->iStatement->iView;
       
   201 	TDbColType type = view.ColType(aColNo);
       
   202 	switch ( type ) {
       
   203 	case EDbColInt8  :
       
   204 	case EDbColInt16 :
       
   205 	case EDbColInt32 :
       
   206 	case EDbColInt64 :
       
   207 	case EDbColReal32:
       
   208 	case EDbColReal64:
       
   209 	{
       
   210 		return 1;
       
   211 	}break;
       
   212 	default:
       
   213 		return 0;
       
   214 	}
       
   215 }
       
   216 
       
   217 /*
       
   218  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   219  * Method:    _isFirst
       
   220  * Signature: (I)I
       
   221  */
       
   222 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1isFirst
       
   223   (JNIEnv *, jobject, jint aPeerHandle) {
       
   224 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   225 	RDbView& view = rset->iStatement->iView;
       
   226 	return view.AtBeginning();
       
   227 }
       
   228 
       
   229 /*
       
   230  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   231  * Method:    _isLast
       
   232  * Signature: (I)I
       
   233  */
       
   234 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1isLast
       
   235   (JNIEnv *, jobject, jint aPeerHandle){
       
   236 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   237 	RDbView& view = rset->iStatement->iView;
       
   238 	return view.AtEnd();
       
   239 }
       
   240 
       
   241 /*
       
   242  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   243  * Method:    _isAutoIncrement
       
   244  * Signature: (II)I
       
   245  */
       
   246 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1isAutoIncrement
       
   247   (JNIEnv *, jobject, jint aPeerHandle, jint aColumn) {
       
   248 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   249 	RDbView& view = rset->iStatement->iView;
       
   250 	TDbCol col = view.ColDef(aColumn);
       
   251 	if ( col.iAttributes & TDbCol::EAutoIncrement ) {
       
   252 		return 1; // Auto increment
       
   253 	} else {
       
   254 		return 0; // Not auto increment
       
   255 	}
       
   256 }
       
   257 
       
   258 /*
       
   259  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   260  * Method:    _isNullable
       
   261  * Signature: (II)I
       
   262  */
       
   263 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1isNullable
       
   264   (JNIEnv *, jobject, jint aPeerHandle, jint aColumn) {
       
   265 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   266 	RDbView& view = rset->iStatement->iView;
       
   267 	TDbCol col = view.ColDef(aColumn);
       
   268 	if ( col.iAttributes & TDbCol::ENotNull ) {
       
   269 		return 1; // Nullable
       
   270 	} else {
       
   271 		return 0; // Not nullable
       
   272 	}
       
   273 }
       
   274 
       
   275 /*
       
   276  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   277  * Method:    _columnNames
       
   278  * Signature: (I[Ljava/lang/String;)I
       
   279  */
       
   280 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1columnNames
       
   281   (JNIEnv *aEnv, jobject, jint aPeerHandle, jobjectArray aNames) {
       
   282 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   283 	RDbView& view = rset->iStatement->iView;
       
   284 	TInt colCount = view.ColCount();
       
   285     for( TInt i = 0 ; i < colCount ; i++ ) {
       
   286     	TDbCol col = view.ColDef(i+1);
       
   287     	jstring colName = CreateJavaString(aEnv,col.iName);
       
   288         aEnv->SetObjectArrayElement(aNames, i, colName);
       
   289     }
       
   290     return 0;
       
   291 }
       
   292 
       
   293 
       
   294 /*
       
   295  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   296  * Method:    _coltypes
       
   297  * Signature: (I[I)I
       
   298  */
       
   299 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1columnTypes
       
   300   (JNIEnv *aEnv, jobject, jint aPeerHandle, jintArray aTypes) {
       
   301 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   302 	RDbView& view = rset->iStatement->iView;
       
   303 	TInt colCount = view.ColCount();
       
   304     for( TInt i = 0 ; i < colCount ; i++ ) {
       
   305     	TDbCol col = view.ColDef(i+1);
       
   306     	jint colType = col.iType;
       
   307         aEnv->SetIntArrayRegion(aTypes,i,1,&colType);
       
   308     }
       
   309     return 0;
       
   310 }
       
   311 
       
   312 
       
   313 /*
       
   314  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   315  * Method:    _getBoolean
       
   316  * Signature: (I)Z
       
   317  */
       
   318 JNIEXPORT jboolean JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getBoolean
       
   319   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex) {
       
   320 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   321 	RDbView& view = rset->iStatement->iView;
       
   322 	TInt val = view.ColUint8(aColIndex);
       
   323 	if ( val == 0 ) {
       
   324 		return false;
       
   325 	} else {
       
   326 		return true;
       
   327 	}
       
   328 }
       
   329 
       
   330 /*
       
   331  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   332  * Method:    _getByte
       
   333  * Signature: (I)B
       
   334  */
       
   335 JNIEXPORT jbyte JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getByte
       
   336   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex){
       
   337 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   338 	RDbView& view = rset->iStatement->iView;
       
   339 	jbyte ret = view.ColInt8(aColIndex);
       
   340 	return ret;
       
   341 }
       
   342 
       
   343 /*
       
   344  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   345  * Method:    _getShort
       
   346  * Signature: (I)S
       
   347  */
       
   348 JNIEXPORT jshort JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getShort
       
   349   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex){
       
   350 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   351 	RDbView& view = rset->iStatement->iView;
       
   352 	return (jshort) view.ColInt16(aColIndex);
       
   353 }
       
   354 
       
   355 /*
       
   356  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   357  * Method:    _getInteger
       
   358  * Signature: (I)I
       
   359  */
       
   360 JNIEXPORT jint JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getInteger
       
   361   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex){
       
   362 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   363 	RDbView& view = rset->iStatement->iView;
       
   364 	TInt res = view.ColInt(aColIndex);
       
   365 	return (jint)res;
       
   366 }
       
   367 
       
   368 /*
       
   369  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   370  * Method:    _getLong
       
   371  * Signature: (I)J
       
   372  */
       
   373 JNIEXPORT jlong JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getLong
       
   374   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex){
       
   375 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   376 	RDbView& view = rset->iStatement->iView;
       
   377 	return (jlong) view.ColInt64(aColIndex);
       
   378 }
       
   379 
       
   380 /*
       
   381  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   382  * Method:    _getFloat
       
   383  * Signature: (I)F
       
   384  */
       
   385 JNIEXPORT jfloat JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getFloat
       
   386   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex){
       
   387 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   388 	RDbView& view = rset->iStatement->iView;
       
   389 	return (jfloat) view.ColReal32(aColIndex);
       
   390 }
       
   391 
       
   392 
       
   393 /*
       
   394  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   395  * Method:    _getTime
       
   396  * Signature: (I)J
       
   397  */
       
   398 JNIEXPORT jlong JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getTime
       
   399   (JNIEnv *aEnv, jobject, jint aPeerHandle, jint aColIndex){
       
   400 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   401 	RDbView& view = rset->iStatement->iView;
       
   402 	TTime stored = view.ColTime(aColIndex);
       
   403 	TInt64 time = stored.Int64();
       
   404 	// sym time (0AD) to java time (1970AD) adjustment
       
   405 	TInt64 adjustment = MAKE_TINT64(0x00dcddb3,0x0f2f8000);
       
   406 	TInt64 result = time - adjustment;
       
   407 	jlong rv = result / 1000;	// convert microseconds into millisconds
       
   408 	return rv;
       
   409 }
       
   410 
       
   411 
       
   412 /*
       
   413  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   414  * Method:    _getText
       
   415  * Signature: (I)Ljava/lang/String;
       
   416  */
       
   417 JNIEXPORT jstring JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getText
       
   418   (JNIEnv *aEnv, jobject, jint aPeerHandle, jint aColIndex){
       
   419 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   420 	RDbView& view = rset->iStatement->iView;
       
   421 	jstring jstr = NULL;
       
   422 	// handle wide/8bit text types
       
   423 	TDbColNo colNo(aColIndex);
       
   424 	if ( view.IsColNull(colNo) ) {
       
   425 		return jstr;
       
   426 	}
       
   427 	TDbCol def = view.ColDef(aColIndex);
       
   428 	jint colType = def.iType;
       
   429 
       
   430 	if ( colType == EDbColText8) {
       
   431 		TPtrC8 tmp = view.ColDes8(aColIndex);
       
   432 		RBuf buf;
       
   433 		TInt res = buf.Create(tmp.Length());
       
   434 		if ( res != KErrNone ) {
       
   435 			ThrowExc(aEnv, res );
       
   436 			return jstr;
       
   437 		}
       
   438 		buf.Copy(tmp);
       
   439 		jstr = CreateJavaString(aEnv, buf);
       
   440 	} else if ( colType == EDbColLongText8 ) {
       
   441 		TInt blobLength = view.ColLength(aColIndex);
       
   442 		RBuf8 cbuf;
       
   443 		TInt res = cbuf.Create(blobLength);
       
   444 		if ( res != KErrNone ) {
       
   445 			ThrowExc(aEnv, res );
       
   446 			return jstr;
       
   447 		}
       
   448 
       
   449 		RDbColReadStream blob;
       
   450 		TRAP(res, blob.OpenL(view,aColIndex));
       
   451 		if ( res != KErrNone ) {
       
   452 			ThrowExc(aEnv, res );
       
   453 			cbuf.Close();
       
   454 			return jstr;
       
   455 		}
       
   456 		TRAP(res, blob.ReadL(cbuf, blobLength));
       
   457 		if ( res != KErrNone ) {
       
   458 			ThrowExc(aEnv, res );
       
   459 			cbuf.Close();
       
   460 			blob.Release();
       
   461 			blob.Close();
       
   462 			return jstr;
       
   463 		}
       
   464 		blob.Release();
       
   465 		blob.Close();
       
   466 
       
   467 		RBuf buf;
       
   468 		res = buf.Create(cbuf.Length());
       
   469 		if ( res != KErrNone ) {
       
   470 			ThrowExc(aEnv, res );
       
   471 			cbuf.Close();
       
   472 			return jstr;
       
   473 		}
       
   474 		buf.Copy(cbuf);
       
   475 		cbuf.Close();
       
   476 		jstr = CreateJavaString(aEnv, buf);
       
   477 		buf.Close();
       
   478 	} else if ( colType == EDbColLongText16 ) {
       
   479 		TInt blobLength = view.ColLength(aColIndex);
       
   480 		RBuf cbuf;
       
   481 		TInt res = cbuf.Create(blobLength);
       
   482 		if ( res != KErrNone ) {
       
   483 			ThrowExc(aEnv, res );
       
   484 			return jstr;
       
   485 		}
       
   486 
       
   487 		RDbColReadStream blob;
       
   488 		TRAP(res, blob.OpenL(view,aColIndex));
       
   489 		if ( res != KErrNone ) {
       
   490 			ThrowExc(aEnv, res );
       
   491 			cbuf.Close();
       
   492 			return jstr;
       
   493 		}
       
   494 		TRAP(res, blob.ReadL(cbuf, blobLength));
       
   495 		if ( res != KErrNone ) {
       
   496 			ThrowExc(aEnv, res );
       
   497 			cbuf.Close();
       
   498 			blob.Release();
       
   499 			blob.Close();
       
   500 			return jstr;
       
   501 		}
       
   502 		blob.Release();
       
   503 		blob.Close();
       
   504 
       
   505 		jstr = CreateJavaString(aEnv, cbuf);
       
   506 		cbuf.Close();
       
   507 	} else {
       
   508 		// 16 bit / wide string
       
   509 		TPtrC ptr = view.ColDes16(aColIndex);
       
   510 		jstr = CreateJavaString(aEnv, ptr);
       
   511 	}
       
   512 
       
   513 	return jstr;
       
   514 }
       
   515 
       
   516 /*
       
   517  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   518  * Method:    _getBytes
       
   519  * Signature: (I)[B
       
   520  */
       
   521 JNIEXPORT jbyteArray JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getBytes
       
   522   (JNIEnv *aEnv, jobject, jint aPeerHandle, jint aColIndex){
       
   523 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   524 	RDbView& view = rset->iStatement->iView;
       
   525 	jbyteArray array = NULL;
       
   526 	TDbColNo colNo(aColIndex);
       
   527 	if ( view.IsColNull(colNo) ) {
       
   528 		return array;
       
   529 	}
       
   530 	TDbCol col = view.ColDef(aColIndex);
       
   531 	TInt colType = col.iType;
       
   532 	TInt size = view.ColSize(aColIndex);
       
   533 	if ( colType == EDbColBinary ) {
       
   534 		TPtrC8 buf = view.ColDes8(aColIndex);
       
   535 		array = aEnv->NewByteArray(size);
       
   536 		aEnv->SetByteArrayRegion(array, 0, size, (jbyte*)buf.Ptr());
       
   537 		return array;
       
   538 	} else {
       
   539 		RDbColReadStream stream;
       
   540 		TRAPD(err, stream.OpenL(view, aColIndex));
       
   541 		if ( err != KErrNone ) {
       
   542 			ThrowExc(aEnv, err );
       
   543 			return array;
       
   544 		}
       
   545 
       
   546 		// read from stream into buffer
       
   547 		RBuf8 buf;
       
   548 		err = buf.Create(size);
       
   549 		if ( err != KErrNone ) {
       
   550 			ThrowExc(aEnv, err );
       
   551 			stream.Release();
       
   552 			stream.Close();
       
   553 			return array;
       
   554 		}
       
   555 
       
   556 		stream.ReadL(buf, size);
       
   557 		stream.Release();
       
   558 		stream.Close();
       
   559 		array = aEnv->NewByteArray(size);
       
   560 		aEnv->SetByteArrayRegion(array, 0, size, (jbyte*)buf.Ptr());
       
   561 		buf.Close();
       
   562 		return array;
       
   563 	}
       
   564 }
       
   565 
       
   566 /*
       
   567  * Class:     com_symbian_dbms_jdbc_DbmsResultSet
       
   568  * Method:    _getDouble
       
   569  * Signature: (I)D
       
   570  */
       
   571 JNIEXPORT jdouble JNICALL Java_com_symbian_dbms_jdbc_DbmsResultSet__1getDouble
       
   572   (JNIEnv *, jobject, jint aPeerHandle, jint aColIndex){
       
   573 	DbmsResultSet* rset = (DbmsResultSet*) aPeerHandle;
       
   574 	RDbView& view = rset->iStatement->iView;
       
   575 	return (jdouble) view.ColReal64(aColIndex);
       
   576 }