我正在试用示例应用程序来演示Oracle Data Guard,我已经编写了一个简单的Java Servlet来从Oracle数据库中获取数据。
Servlet看起来像这样:
package com;
import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class DisplayServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@10.10.220.4:1529:poc","poc","poc");
PreparedStatement ps=con.prepareStatement("select * from admin_emp");
//ps.setInt(1,roll);
out.print("<table width=50% border=1>");
out.print("<caption>Result:</caption>");
ResultSet rs=ps.executeQuery();
/* Printing column names */
ResultSetMetaData rsmd=rs.getMetaData();
int total=rsmd.getColumnCount();
out.print("<tr>");
for(int i=1;i<=total;i++)
{
out.print("<th>"+rsmd.getColumnName(i)+"</th>");
}
out.print("</tr>");
/* Printing result */
while(rs.next())
{
out.print("<tr><td>"+rs.getInt(1)+"</td><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(4)+"</td></tr>");
}
out.print("</table>");
}catch (Exception e2) {e2.printStackTrace();}
finally{out.close();}
}
}
所以我的问题是,当这个数据库失败时,我应该自动连接到另一台主机上的其他数据库,在它抛出超时异常之前。
这通常通过tnsnames.ora文件处理。因此不需要编写任何代码。即使是精简JDBC驱动程序支持tnsnames查找。
- 设置JVM属性指向tnsnames.ora文件
- 请DBA为Data Guard提供连接字符串
- 在您的代码中创建数据库连接使用tnsnames项的名称,而不是host:port:sid
另一种选择是直接将Oracleconnect string
硬编码到代码中。
超时前异常?
在一个单独的线程中计算时间,并在给定的时间将连接变量更改为2。服务器