diff --git a/src/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h b/src/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h index 61ae5082f31cd9129a3cec1eaa1e0552ada7993b..74d0a6f1050354d722dd6f8bd85765f766388c3f 100644 --- a/src/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h +++ b/src/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h @@ -239,6 +239,22 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_closeStmt(JNIEnv JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_setTableNameTagsImp (JNIEnv *, jobject, jlong, jstring, jint, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jlong); +/* + * Class: com_taosdata_jdbc_TSDBJNIConnector + * Method: insertTelnetLinesImp + * Signature: ([Ljava/lang/String;J)I + */ +JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_insertTelnetLinesImp + (JNIEnv *, jobject, jobjectArray, jlong); + +/* + * Class: com_taosdata_jdbc_TSDBJNIConnector + * Method: insertJsonPayloadImp + * Signature: (Ljava/lang/String;J)I + */ +JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_insertJsonPayloadImp + (JNIEnv *, jobject, jstring, jlong); + #ifdef __cplusplus } #endif diff --git a/src/client/src/TSDBJNIConnector.c b/src/client/src/TSDBJNIConnector.c index 925b7d75db9f88c9905270aa365c60990e9f45a3..4c01bb5cd2be00658bfe80b3d3ab2ac520fdaf02 100644 --- a/src/client/src/TSDBJNIConnector.c +++ b/src/client/src/TSDBJNIConnector.c @@ -98,6 +98,7 @@ jmethodID g_blockdataSetNumOfColsFp; #define JNI_SQL_NULL -5 #define JNI_FETCH_END -6 #define JNI_OUT_OF_MEMORY -7 +#define JNI_PARAMETER_NULL -8 static void jniGetGlobalMethod(JNIEnv *env) { // make sure init function executed once @@ -1084,4 +1085,68 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_insertLinesImp(J return JNI_TDENGINE_ERROR; } return code; +} + +JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_insertTelnetLinesImp(JNIEnv *env, jobject jobj, + jobjectArray lines, jlong conn) { + TAOS *taos = (TAOS *)conn; + if (taos == NULL) { + jniError("jobj:%p, connection already closed", jobj); + return JNI_CONNECTION_NULL; + } + + int numLines = (*env)->GetArrayLength(env, lines); + char **c_lines = calloc(numLines, sizeof(char *)); + if (c_lines == NULL) { + jniError("c_lines:%p, alloc memory failed", c_lines); + return JNI_OUT_OF_MEMORY; + } + for (int i = 0; i < numLines; ++i) { + jstring line = (jstring)((*env)->GetObjectArrayElement(env, lines, i)); + c_lines[i] = (char *)(*env)->GetStringUTFChars(env, line, 0); + } + + int code = taos_insert_telnet_lines(taos, c_lines, numLines); + + for (int i = 0; i < numLines; ++i) { + jstring line = (jstring)((*env)->GetObjectArrayElement(env, lines, i)); + (*env)->ReleaseStringUTFChars(env, line, c_lines[i]); + } + + tfree(c_lines); + if (code != TSDB_CODE_SUCCESS) { + jniError("jobj:%p, conn:%p, code:%s", jobj, taos, tstrerror(code)); + + return JNI_TDENGINE_ERROR; + } + return code; +} + +JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_insertJsonPayloadImp(JNIEnv *env, jobject jobj, jstring jsonString, jlong conn){ + + TAOS *taos = (TAOS *)conn; + if (taos == NULL) { + jniError("jobj:%p, connection already closed", jobj); + return JNI_CONNECTION_NULL; + } + + char *payload = NULL; + if (jsonString != NULL) { + payload = (char *)(*env)->GetStringUTFChars(env, jsonString, NULL); + } + + if (payload == NULL) { + jniDebug("jobj:%p, invalid argument: opentsdb insert json is NULL", jobj); + return JNI_PARAMETER_NULL; + } + + int code = taos_insert_json_payload(taos, payload); + + (*env)->ReleaseStringUTFChars(env, jsonString, payload); + if (code != TSDB_CODE_SUCCESS) { + jniError("jobj:%p, conn:%p, code:%s", jobj, taos, tstrerror(code)); + + return JNI_TDENGINE_ERROR; + } + return code; } \ No newline at end of file diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java index d0054c8e15f23cb0e409d70efb58a9827afc5230..39f2ee29027d707c846c9cd27f976930ab359b50 100755 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java @@ -376,13 +376,13 @@ public class TSDBJNIConnector { * @throws SQLException execute insert error */ public void insertTelnetLines(String[] lines) throws SQLException { - int code = insertTelnetLinesImp(lines, lines.length, this.taos); + int code = insertTelnetLinesImp(lines, this.taos); if (TSDBConstants.JNI_SUCCESS != code) { throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNKNOWN, "failed to insertTelnetLines"); } } - private native int insertTelnetLinesImp(String[] lines, int numOfRows, long conn); + private native int insertTelnetLinesImp(String[] lines, long conn); /** * insert openTSDB data with json format