Merge pull request #3157 from taosdata/hotfix/jdbcmemleak
fix jdbc memory leaks. #3098
This commit is contained in:
commit
984d3c3ac8
|
@ -335,6 +335,24 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getResultSetImp(
|
||||||
return tres;
|
return tres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_isUpdateQueryImp(JNIEnv *env, jobject jobj, jlong con,
|
||||||
|
jlong tres) {
|
||||||
|
TAOS *tscon = (TAOS *)con;
|
||||||
|
if (tscon == NULL) {
|
||||||
|
jniError("jobj:%p, connection is closed", jobj);
|
||||||
|
return JNI_CONNECTION_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((void *)tres == NULL) {
|
||||||
|
jniError("jobj:%p, conn:%p, resultset is null", jobj, tscon);
|
||||||
|
return JNI_RESULT_SET_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SSqlObj *pSql = (TAOS_RES *)tres;
|
||||||
|
|
||||||
|
return (tscIsUpdateQuery(pSql)? 1:0);
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_freeResultSetImp(JNIEnv *env, jobject jobj, jlong con,
|
JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_freeResultSetImp(JNIEnv *env, jobject jobj, jlong con,
|
||||||
jlong res) {
|
jlong res) {
|
||||||
TAOS *tscon = (TAOS *)con;
|
TAOS *tscon = (TAOS *)con;
|
||||||
|
|
|
@ -172,6 +172,12 @@ public class TSDBJNIConnector {
|
||||||
|
|
||||||
private native long getResultSetImp(long connection, long pSql);
|
private native long getResultSetImp(long connection, long pSql);
|
||||||
|
|
||||||
|
public boolean isUpdateQuery(long pSql) {
|
||||||
|
return isUpdateQueryImp(this.taos, pSql) == 1? true:false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private native long isUpdateQueryImp(long connection, long pSql);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free resultset operation from C to release resultset pointer by JNI
|
* Free resultset operation from C to release resultset pointer by JNI
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class TSDBStatement implements Statement {
|
||||||
* Status of current statement
|
* Status of current statement
|
||||||
*/
|
*/
|
||||||
private boolean isClosed = true;
|
private boolean isClosed = true;
|
||||||
|
private int affectedRows = 0;
|
||||||
|
|
||||||
TSDBStatement(TSDBJNIConnector connecter) {
|
TSDBStatement(TSDBJNIConnector connecter) {
|
||||||
this.connecter = connecter;
|
this.connecter = connecter;
|
||||||
|
@ -60,13 +61,21 @@ public class TSDBStatement implements Statement {
|
||||||
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
|
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
this.connecter.freeResultSet(pSql);
|
this.connecter.freeResultSet(pSql);
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||||
} else if (resultSetPointer == TSDBConstants.JNI_NULL_POINTER) {
|
}
|
||||||
// create/insert/update/del/alter
|
|
||||||
|
// create/insert/update/delete/alter
|
||||||
|
if (resultSetPointer == TSDBConstants.JNI_NULL_POINTER) {
|
||||||
this.connecter.freeResultSet(pSql);
|
this.connecter.freeResultSet(pSql);
|
||||||
return null;
|
return null;
|
||||||
} else {
|
|
||||||
return new TSDBResultSet(this.connecter, resultSetPointer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this.connecter.isUpdateQuery(pSql)) {
|
||||||
|
return new TSDBResultSet(this.connecter, resultSetPointer);
|
||||||
|
} else {
|
||||||
|
this.connecter.freeResultSet(pSql);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int executeUpdate(String sql) throws SQLException {
|
public int executeUpdate(String sql) throws SQLException {
|
||||||
|
@ -83,9 +92,10 @@ public class TSDBStatement implements Statement {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
int num = this.connecter.getAffectedRows(pSql);
|
this.affectedRows = this.connecter.getAffectedRows(pSql);
|
||||||
this.connecter.freeResultSet(pSql);
|
this.connecter.freeResultSet(pSql);
|
||||||
return num;
|
|
||||||
|
return this.affectedRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getErrorMsg(long pSql) {
|
public String getErrorMsg(long pSql) {
|
||||||
|
@ -182,7 +192,8 @@ public class TSDBStatement implements Statement {
|
||||||
if (isClosed) {
|
if (isClosed) {
|
||||||
throw new SQLException("Invalid method call on a closed statement.");
|
throw new SQLException("Invalid method call on a closed statement.");
|
||||||
}
|
}
|
||||||
return this.connecter.getAffectedRows(this.pSql);
|
|
||||||
|
return this.affectedRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getMoreResults() throws SQLException {
|
public boolean getMoreResults() throws SQLException {
|
||||||
|
|
Loading…
Reference in New Issue