Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据源与简单连接数据库_Java_.net_Database_Connection_Datasource - Fatal编程技术网

Java 数据源与简单连接数据库

Java 数据源与简单连接数据库,java,.net,database,connection,datasource,Java,.net,Database,Connection,Datasource,最好的方法是什么?我需要连接许多远程数据库来解决来自Restful web服务的许多请求。我在想两个解决方案: 每个远程数据库一个数据源,到每个数据源的连接就像一个单例模式 每个远程数据库都有一个简单的连接,也就是一个与每个数据库连接的单例模式 第一种方法的一个例子如下(vía msdn): 对于第二种方法,单例示例可以是: public java.sql.Connection conn; private static Statement statement; public static My

最好的方法是什么?我需要连接许多远程数据库来解决来自Restful web服务的许多请求。我在想两个解决方案:

  • 每个远程数据库一个数据源,到每个数据源的连接就像一个单例模式

  • 每个远程数据库都有一个简单的连接,也就是一个与每个数据库连接的单例模式

  • 第一种方法的一个例子如下(vía msdn):

    对于第二种方法,单例示例可以是:

    public java.sql.Connection conn;
    private static Statement statement;
    
    public static MysqlConnect db;
    
    private MysqlConnect() {
        String url= "jdbc:mysql://localhost:3306/";
        String dbName = "Banco";
        String driver = "com.mysql.jdbc.Driver";
        String userName = "root";
        String password = "123456";
        try {
            Class.forName(driver).newInstance();
            this.conn = (java.sql.Connection)DriverManager.getConnection(url+dbName,userName,password);
            System.out.println("Connected to DataBase: " + dbName);
        }
        catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException sqle) {
            System.out.println("Error Inesperado en MysqlConnect" + sqle.toString());
        }
    }
    
    /**
     *Method for connect to a database
     * @return MysqlConnect Database connection object
     */
    public static synchronized MysqlConnect getDbCon() {
        if ( db == null ) {
            try {
                db = new MysqlConnect();
                statement = db.conn.createStatement();
            } catch (SQLException ex) {
                Logger.getLogger(MysqlConnect.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.out.println("Connection to DB: OK");
        return db;
    }
    

    这取决于数据库和查询之间的关系。如果有许多查询要访问单个数据库,例如用户数据库,那么您将需要多个到该数据库的连接,否则您的线程将阻塞该资源

    最灵活的方法是为每个远程数据库提供一个连接池,并对每个连接池进行配置,以使它们具有适当数量的可用连接,同时考虑到它们在任何单个REST事务期间被查询的可能性


    一个好的起点可能是查看Tomcat数据源池。请注意,无论是否使用Tomcat作为Web服务器,您都可以使用它。

    连接不能由多个线程同时使用,而数据源可以

    public java.sql.Connection conn;
    private static Statement statement;
    
    public static MysqlConnect db;
    
    private MysqlConnect() {
        String url= "jdbc:mysql://localhost:3306/";
        String dbName = "Banco";
        String driver = "com.mysql.jdbc.Driver";
        String userName = "root";
        String password = "123456";
        try {
            Class.forName(driver).newInstance();
            this.conn = (java.sql.Connection)DriverManager.getConnection(url+dbName,userName,password);
            System.out.println("Connected to DataBase: " + dbName);
        }
        catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException sqle) {
            System.out.println("Error Inesperado en MysqlConnect" + sqle.toString());
        }
    }
    
    /**
     *Method for connect to a database
     * @return MysqlConnect Database connection object
     */
    public static synchronized MysqlConnect getDbCon() {
        if ( db == null ) {
            try {
                db = new MysqlConnect();
                statement = db.conn.createStatement();
            } catch (SQLException ex) {
                Logger.getLogger(MysqlConnect.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.out.println("Connection to DB: OK");
        return db;
    }