ORA-12516,TNS:侦听器找不到可用的处理程序

我的错误:

java.sql.SQLException: Listener refused the connection with the following error:

ORA-12516, TNS:listener could not find available handler with matching protocol

stack

The Connection descriptor used by the client was:

//10.2.5.21:9001/XE

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java

:112)

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java

:261)

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)

at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:

414)

at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)

at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtensio

n.java:35)

at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)

at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSou

rce.java:297)

at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java

:221)

at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java

:165)

at utilityService.DB_util.setOracleConnectionActive(DB_util.java:99)

at utilityService.DB_util.getRecPreparedAuthentication(DB_util.java:124)

我常见的数据库连接类:

package utilityService;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import oracle.jdbc.pool.OracleDataSource;

public class DB_util {

String propValue = "";

ResultSet rec = null;

Statement stm = null;

PreparedStatement pre_stm = null;

CallableStatement call_stm = null;

Connection conn1 = null;

/**

* Constructure to get oracle connection

*/

public DB_util() {

Util util=new Util();

propValue=util.getFilePathToSave();

//propValue = Util.propValue;// get oracle connection

setOracleConnectionActive();

}

/**

* Close all oracle connections and result sets.

*/

public void setOracleConnectionClose() {

try {

if (conn1 != null || !conn1.isClosed()) {

if (rec != null) {

rec.close();

rec = null;

}

if (stm != null) {

stm.close();

stm = null;

}

if (pre_stm != null) {

pre_stm.close();

pre_stm = null;

}

if (call_stm != null) {

call_stm.close();

call_stm = null;

}

conn1.commit();

conn1.close();

conn1 = null;

}

} catch (Exception ex) {

ex.printStackTrace();

}

}

/**

* return a result set according to sql sent

*

* @param SQL

* @return

*/

public ResultSet getRec(String SQL) {

try {

setOracleConnectionActive();

stm = conn1.createStatement();

rec = stm.executeQuery(SQL);

return rec;

} catch (Exception ex) {

ex.printStackTrace();

return rec;

}

}

/**

* Activate oracle connection

*/

private void setOracleConnectionActive() {

try {

if (conn1 == null || conn1.isClosed()) {

OracleDataSource ods = new OracleDataSource();

if (propValue != null) {

ods.setURL(propValue);

}

conn1 = ods.getConnection();

System.out.println("DB connection CONNECTED......");

conn1.setAutoCommit(false);

}

} catch (Exception ex) {

//setOracleConnectionActive();

ex.printStackTrace();

System.out.println("DB connection FAILED......");

}

}

/**

* send prepared result set with user authenticate

*

* @param SQL

* @param strInputUserMobile

* @param strInputUserName

* @param strInputUserPassword

* @return

*/

public ResultSet getRecPreparedAuthentication(String SQL,

String strInputUserMobile, String strInputUserName,

String strInputUserPassword) {

try {

setOracleConnectionActive();

pre_stm = conn1.prepareStatement(SQL);

pre_stm.setString(1, strInputUserMobile);

pre_stm.setString(2, strInputUserName);

pre_stm.setString(3, strInputUserPassword);

rec = pre_stm.executeQuery();

return rec;

} catch (Exception ex) {

ex.printStackTrace();

return rec;

}

}

/**

* insert sql to db which is send as a sql

*

* @param SQL

* @return

*/

public int insertSQL(String SQL) {

int output = 0;

try {

setOracleConnectionActive();

stm = conn1.createStatement();

output = stm.executeUpdate(SQL);

conn1.commit();

output = 1;

} catch (Exception ex) {

try {

conn1.rollback();

output = 0;

} catch (SQLException e) {

e.printStackTrace();

output = 0;

}

ex.printStackTrace();

}

return output;

}

/**

* Send a callable statement according to sent sql

*

* @param SQL

* @return

*/

public CallableStatement callableStatementSQL(String SQL) {

int output = 0;

try {

setOracleConnectionActive();

call_stm = conn1.prepareCall(SQL);

} catch (Exception ex) {

try {

conn1.rollback();

output = 0;

} catch (SQLException e) {

e.printStackTrace();

output = 0;

}

ex.printStackTrace();

}

return call_stm;

}

}

每笔交易我都会参考此类并进行提取和CRUD操作。我的代码有什么问题吗?

回答:

您打开了很多连接,这就是问题所在。我认为在您的代码中,您没有关闭打开的连接。

数据库反弹可能会暂时解决,但在您连续执行时会重新出现。另外,还应验证到数据库的并发连接数。如果达到最大DB进程参数,这是常见症状。

此线程的礼貌:https :

//community.oracle.com/thread/362226?tstart=-1

以上是 ORA-12516,TNS:侦听器找不到可用的处理程序 的全部内容, 来源链接: utcz.com/qa/418811.html

回到顶部