java 。在类之间共享 MySQL 连接

标签 java

我是 Java 新手。

我想创建一个小型应用程序,它连接到 MySQL 并执行一些查询。

我真正的问题 - 连接到 mysql,并为其他类保留此连接,而不需要一次又一次打开连接。

我阅读了有关 MVC 和 OOP 的文档。但我仍然不明白如何解决这个问题。

正如我想象的那样,我应该在模型中继承一个数据库类,例如来自mypackageusermessages。但我无法想象它应该是什么样子。

我已经尝试在谷歌中搜索一些示例,但我发现只包含一个主类和数据库类的简单示例。

所以,我需要有人能为我解释一下

如果有任何帮助,我将不胜感激

用户类别

package mypackage;
class user {
    public String getName() {
        // return value from mysql
    }
}

消息类

package mypackage;
class messages {
    public String getMessage() {
        // return value from mysql
    }
}

数据库类

package database;
class db {
        private String dbUri = "jdbc:mysql://";
    private String dbDriver = "com.mysql.jdbc.Driver";
    private Connection connection;

    public boolean connect(String host, String base, String user, String pass)
    {
        try {
            Class.forName(dbDriver);
            String uri = dbUri + host + '/' + base;
            connection = DriverManager.getConnection(uri, user, pass);
            return true;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return false;
            // Could not find the database driver
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
            // Could not connect to the database
        }
    }
}

主类

import mypackage.*;
import database.*;

class main
{
    public static void main(String[] args)
    {
        database db = new database();
                user usr = new user();
                System.out.println(usr.getName());
                messages msg = new messages();
                System.out.println(msg.getMessage());
    }
}

最佳答案

您的数据库类已经存储连接,因此只需创建方法即可检索它:

package database;
class Database {
    private String dbUri = "jdbc:mysql://";
    private String dbDriver = "com.mysql.jdbc.Driver";
    private Connection connection;

    public boolean connect(String host, String base, String user, String pass)  {
       try {
            Class.forName(dbDriver);
            String uri = dbUri + host + '/' + base;
            connection = DriverManager.getConnection(uri, user, pass);
            return true;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return false;
            // Could not find the database driver
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
            // Could not connect to the database
        }
    }

    public Connection getConnection() {
        return connection;
    }
}

在你的主要部分:

class Main
{
    public static void main(String[] args)
    {
        Database db = new Database();
        if (db.connect(/* parameters for database connection here */)) {
            final Connection conn = db.getConnection();
            // you can use conn for your queries. If they are in other classes, pass connection as parameter.
        }
    }
}

我试图使其变得简单,但您实际上应该使用工厂和单例模式来创建和存储连接,一旦创建,然后在应用程序中静态检索它。一旦您对这个概念感到满意,您还应该研究connection pooling作为 在评论中建议,例如使用 BoneCP .

关于 java 。在类之间共享 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23290039/

相关文章:

java - 如何从 rar 存档直接读取所需文件到 InputStream(无需提取整个存档)?

java - Java中的大量常量

java - 如何使用 Sikuli(Java) 从屏幕上的特定位置获取值?

java - 单元测试应该如何处理预期和意外的异常?

java - JMock 意外调用

Java spring-rest/Jersey 如何使用过滤器保护休息路线

java - 如何将 contains() 与 char 一起使用?

java - 在 Java 中链接方法调用时遇到问题

java - 在字符串中查找重复模式

java构造方法重载与多重匹配