我用以下代码用来测试数据库连接是否正常:
 try {
            logger.info("start to registerDriver...");
            DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
            logger.info(pros.getProperty("dbURL")+"--"+pros.getProperty("user")+"--"+ pros.getProperty("password"));
            con = DriverManager.getConnection(pros.getProperty("dbURL"), pros.getProperty("user"), pros.getProperty("password"));;
            if (con != null) {
                st = con.createStatement();
                rs = st.executeQuery("select 1 from dual");
                rs.next();
                if (rs.getInt(1) == 1) {
                    res = true;
                }
            }
        } 
 
然后我做了一个java application桌面小应用程序(extends FrameView),在小应用程序中点击事件触发此段代码,如下:
private void dbTestMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                               
    //从配置文件中读取连接相关属性
    String info = "数据库连接异常,请确认配置文件是参数是否正确。";
    Properties per = new Properties();
    try {
        logger.info("start to test the db connection...");
        per.load(new FileInputStream(Content.configFile));
        logger.info("system have loaded the config files successfully");
       
        DbOper db = new DbOper();
        if (db.checkDBConnect(per)) {
            info = "数据库连接正常";
        }
        logger.info("数据连接测试结果:" + info);
    } catch (Exception e) {
        logger.error("Exception when test the DB connection, ",e);
    }
 
    if (aboutBox == null) {
        JFrame mainFrame = AnalyseExcelApp.getApplication().getMainFrame();
        aboutBox = new DBTestResultBox(mainFrame, info);
        aboutBox.setLocationRelativeTo(mainFrame);
    }
    AnalyseExcelApp.getApplication().show(aboutBox);
}      
 
但在运行时,程序头也不回地直接死了,调试时发现程序是在
con = DriverManager.getConnection(pros.getProperty("dbURL"), pros.getProperty("user"), pros.getProperty("password"));;
这一行,不行了,也不报错,就直接在此行一直呆着,啥也不做...
 
另外还有二种情况,也让我比较奇怪:
1. 若同样调用此段测试代码,但不是在java application中,而是直接在一个普通的java类的main方法中,测可以测试通过。
2. 若数据库边的是本机的数据库,那么此段测试代码也可以通过,在java application与java类的main方法中均可以。
 
为什么,连接远程数据时,在java application中会无故down掉呢?
 
ps. 排除数据库地址,用户名,密码等错误;我的JDBC驱动是ojdbc14.jar,JDK 1.5