【发布时间】:2017-07-22 17:07:51
【问题描述】:
我正在开发一个使用 Oracle 数据库的 Java 项目。当我创建一个新的 Oracle 驱动程序时:
jdbcDriver driver = new jdbcDriver();
...我检查它是否有效:
if (!driver.isValid())
{
throw new UncheckedSqlException("jdbcDriver not valid");
}
如果驱动程序无效,正确的程序是什么?也就是说,由于数据库不可用,因此无法存储数据并稍后异步重试(即不锁定应用程序)。是否假设如果我只是重试几次,我会得到一个有效的驱动程序?
更新
感谢 EJP 正确指出 jdbcDriver 是我代码中的一个类。这是正确的——它是我正在研究的代码库中的一个类。 EJP 要求发布相关详细信息。他们来了。
package us.mydev.jdbc.util;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import org.apache.log4j.Logger;
import us.mydev.data.exception.UncheckedSqlException;
public class jdbcDriver
{
[.....]
public jdbcDriver()
{
try
{
m_iActiveConnections++;
if (showLogMessages)
{
log.debug("jdbcDriver() created, hashcode = " + this.hashCode()
+ ",Active Connection Count is " + m_iActiveConnections);
log.debug("Data Source is " + DS_STANDARDUSER);
}
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(DS_STANDARDUSER);
mydevGetJDBCConn getConn = new sqlConn(ds);
m_conn = getConn.getConnection();
m_iDatabaseType = getConn.getDBType();
}
catch (NamingException _exp)
{ // handle any errors
log.error("failed", _exp);
}
}
public boolean isValid() throws SQLException
{
return m_conn != null && m_conn.isValid(10);
}
[.....]
}
我发现在这段代码之后:
jdbcDriver driver = new jdbcDriver();
boolean driverIsValid = driver.isValid();
...driverIsValid 是 false 大约每 1000 次左右的数据库访问一次。我想这是我当前开发系统的产物——我让 Oracle 在虚拟机中运行。
在这种情况下,driverIsValid 在生产中出现错误会是不寻常的(或闻所未闻的)吗?如果它不是闻所未闻——考虑到我无法将相关数据保存到数据库中,通常如何处理——也就是说,我可以重试几次获取数据库连接并期望得到一个?
更新 #2
根据我从回复中了解到的情况,我需要使用我正在处理的代码库中定义的对象中的任何代码来提出这个问题。我将接受罗文斌提供的答案,并更恰当地重新提出问题。
【问题讨论】:
-
jdbcDriver是什么? -
jdbcDriver是什么?你是说java.sql.Driver接口吗? -
如果您想在 JDBC 级别访问数据库(而不是通过 JPA、SpringData 等更高级别的抽象),那么您应该从以下内容开始:mkyong.com/jdbc/connect-to-oracle-db-via-jdbc-driver-java
-
接口从
import java.sql.*;导入 -
我什至不会评论不完整的代码或 cmets 中的代码。如果您希望我们为您的代码提供帮助,您必须在您的问题中以一种有意义的形式发布它,所有相关的东西,而不是关于它是什么的错误断言。您提到的类不是
java.sql中的接口或类,并且java.sql中除了java.sql.Connection.isValid(int timeout)之外没有isValid()方法,这不是您要调用的。帮我们和你自己一个忙,并正确地解释你自己。或查看您的问题已结束。