【问题标题】:Connection changes at RUN TIME in JAVA appJAVA 应用程序中运行时的连接更改
【发布时间】:2013-01-06 20:34:22
【问题描述】:

我必须创建一个 JSP,其中有一个屏幕可以在 运行时,意味着我必须在运行时提供数据库详细信息(瘦客户端/驱动程序信息等),然后连接并处理下一页,这是一个小型应用程序(最多 20 个用户),所以我想 2 知道我如何管理连接.

-- 在 Session 中存储连接? - 在 HashTable 中,键作为会话 id,值作为连接? - 或运行时的一些连接池(我认为这不好).. -- 或创建属性文件并在运行时进行更改并重新加载它..

让我知道这种性能和设计的最佳方法。

问候, 阿米特

【问题讨论】:

    标签: java jsp jdbc connection connection-pooling


    【解决方案1】:

    您可以在 .properties 文件中设置连接信息(数据库名称、密码、服务器地址等)。喜欢下面。

    1)静态方式 config.properties(一般是在classPath-src\config.properties创建的)文件包含

    driver=com.mysql.jdbc.Driver
    database=jdbc:mysql://localhost:3306/dbName
    dbuser=root
    dbpassword=root
    

    您也可以创建或重置值

    1)创建或设置动态属性文件。

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class App 
    {
        public static void main( String[] args )
        {
            Properties prop = new Properties();
    
            try {
                //set the properties value
                prop.setProperty("database", "localhost");
                prop.setProperty("dbuser", "patel");
                prop.setProperty("dbpassword", "password");
    
                //save properties to project root folder
                prop.store(new FileOutputStream("config.properties"), null);
    
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    

    在 (config.properties) 中输出

     dbpassword=password
     database=localhost
     dbuser=patel
    

    2) 现在是时候在运行时读取它了。

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class App 
    {
        public static void main( String[] args )
        {
            Properties prop = new Properties();
    
            try {
                   //load a properties file
                prop.load(new FileInputStream("config.properties"));
    
                   //get the property value and print it out
                    System.out.println(prop.getProperty("database"));
                System.out.println(prop.getProperty("dbuser"));
                System.out.println(prop.getProperty("dbpassword"));
    
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    
        }
    }
    

    输出

    localhost
    patel
    password
    

    请在 中用 jsp 编写这段代码 这样你就可以在运行时加载任何东西。 需要任何帮助 ping 我.......................:)

    【讨论】:

    • 但是这个 jsp 页面将被多个用户访问,每次更改 prpoerty 文件并修改它是一个好方法吗,例如我使用 db D1 一些其他 D2 和一些其他 D6 等等并在第二天 D4、D9 和 D10,所以在这种情况下,我猜连接池不会像好的方法一样工作..
    • 您可以为每个用户创建文件,而不是通过它的 id 创建文件,例如会话文件名中的 id=1 将 db1.properties 或类似的............
    • 为每个用户创建文件不是一个好方法,如果连接了 20 个用户,那么我必须创建 20 个文件。 :(
    • 我假设连接信息只能通过网络从用户那里获得。
    • 嗨@PratikPatel。我看到您删除了有关 PHP 加密的问题,尽管我花时间添加了几个有用的链接来帮助您开始研究。在 StackOverflow 上,您不必担心奇怪的否决票或问题关闭 - 它会发生。希望您现在对如何提出问题有了更清晰的认识。这也不错:whathaveyoutried.com.
    【解决方案2】:

    你可以使用连接池

    check this

    【讨论】:

      【解决方案3】:

      将登录凭据存储在使用会话 ID 作为密钥的服务器内存映射中可能更简单,在每次调用时重新打开连接并在服务调用结束时关闭它。虽然打开连接是有代价的,但每个 Web 交互一个应该足够有效。这可以防止连接泄漏。

      为了防止伪造会话 ID 会造成安全问题,您的网络服务器必须确保用户在每次调用时都经过身份验证。

      【讨论】:

      • 我想对于每个请求,我都必须创建新连接,使用它服务,然后在 finally 块中关闭连接。没有连接池,也没有单点;d ?
      • 是的。与 Web 请求往返服务器的时间相比,打开与某些下一台机器中的数据库的连接的时间应该非常短。但是您的头部将不会出现连接泄漏问题,也不会出现线程安全问题。
      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2015-09-06
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多