【问题标题】:Loop attempt to connect to JDBC循环尝试连接到 JDBC
【发布时间】:2012-04-22 01:47:57
【问题描述】:

我正在尝试创建一个用于签入和签出设备的应用程序。到目前为止,我已经取得了成功,但我试图让名为 index.jsp 的主页面显示一条消息,如“正在连接”,直到可以实际建立与数据库的连接,然后显示实际的登录表单。所以有点意思。

Connection con = null;
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
boolean connected = false;

while(!connected) {
    try{
        String url = "jdbc:mysql://localhost:3306/test";
        con = DriverManager.getConnection(url,"username","password");
        connected = true;

        //Display form allowing user to authenticate login

    } catch(Exception e) {
        //Display Message "Attempting to connect to database"
    }
}

我遇到的问题是同一条消息会在网页上一遍又一遍地重复,但我只想让它显示一次并留在那里直到找到连接,然后将其删除并替换为登录表单。有什么想法吗?

【问题讨论】:

  • 你的应用逻辑可能有错误。

标签: java mysql jsp servlets


【解决方案1】:

我建议您使用 connection pooling.... 管理连接非常容易,并且会减少开销,从而使您的应用程序高效。

请参阅以下内容

【讨论】:

    【解决方案2】:

    以这种方式更改您的代码

    Connection con = null;
    String driver = "com.mysql.jdbc.Driver";
    Class.forName(driver).newInstance();
    boolean connected = false;
    int errors = 0;
    
    while(!connected) {
        try{
            String url = "jdbc:mysql://localhost:3306/test";
            con = DriverManager.getConnection(url,"root","ikkakumon");
            connected = true;
    
            //Display form allowing user to authenticate login
    
        } catch(Exception e) {
    
            if (errors == 0) {
                //Display Message "Attempting to connect to database"
            }
            ++errors;
    
            Thread.sleep(1000); // wait a little before the next attempts
        }
    }
    

    所以你只在第一次显示错误信息。 然后在一次尝试和另一次尝试之间等待。

    但是循环不是管理连接的常用方法。为什么选择这个解决方案?你收到什么样的例外?

    【讨论】:

    • 只要数据库正常,我就不会收到任何实际异常。但我本质上是想让错误检查更好一点。目前首先显示登录表单,如果数据库没有启动,那么当他们提交时,它会直接在 sql 页面中出现错误,tomcat 显示显示发生的异常等......非常难看,我宁愿只向他们显示一个连接对话框,直到数据库已启动,然后向他们显示要登录的表单
    【解决方案3】:

    有什么想法吗?

    是的。

    您需要了解如何向用户显示内容。正常的模型是浏览器向服务器发送一个 HTTP 请求,服务器创建一个包含 HTML 页面的响应,然后浏览器显示该页面。在此模型中,如果您希望用户看到结果,服务器必须完成并发送响应。在此之前,用户会看到一个空白屏幕(或他/她之前所在的页面)。

    因此,要获得更新的页面,您有两种选择:

    • 您可以创建一个包含<meta>标签的页面,该标签请求浏览器在固定延迟后重新发送请求;见http://en.wikipedia.org/wiki/Meta_refresh

    • 您可以在页面中嵌入 javascript 以向服务器发送 AJAX 请求以要求更新。收到响应后,javascript 需要使用新信息修改显示页面的 DOM。

    但是在任何一种情况下,您都应该清楚,您不能在对单个 JSP 的单个调用中执行此操作。因此,您不希望在 JSP 或分派到 JSP 的控制器中出现 while 循环。循环必须发生在浏览器端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2012-10-13
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多