jstring向char* 的转换
jstring不能直接在c程序中使用,需要转换成char*。重要的一点是,在使用完char*之后,一定要记得将其释放,以免发生内存泄漏。如下例:
- JNIEXPORT jobjectArray JNICALL Java_com_oracle_estt_sc_db_impl_SCQueryODBC__1getCustomerRequestByCondition
- (JNIEnv *env, jobject, jstring condition, jint customerid){
-
- //将jstring转换为cha*
- char* str_condition=(char*) env->GetStringUTFChars(condition,JNI_FALSE);
-
- ......
-
- //释放变量
- env->ReleaseStringUTFChars(condition,str_condition);
-
- ......
-
- }
char*转换成jstring
这个转换就比较麻烦了,但是在数据库操作时会用到。比如,从数据库查询得到的是char*,但是给对象属性赋值的时候需要用jstring,这是需要用到这种转换。具体如下例:
- char* col_timestamp=.....;
-
- //加载string类
- jclass strClass = env->FindClass("Ljava/lang/String;");
- //获得方法id
- jmethodID ctorID = env->GetMethodID(strClass, "", "([BLjava/lang/String;)V");
-
- //将字符串转换为jstring
- bytes_time = env->NewByteArray(strlen(col_timestamp));
- env->SetByteArrayRegion(bytes_time, 0, strlen(col_timestamp), (jbyte*)col_timestamp);
- jstring js_time = env->NewStringUTF("utf-8");
-
- js_time=(jstring)env->NewObject(strClass, ctorID, bytes_time, js_time)