подключение java классов к базе данных - PullRequest
1 голос
/ 07 мая 2020

Попытка использовать переменную conn для всех классов для подключения и выполнения моих запросов

У меня есть класс для подключения

Db. java:

public class DB {
    private final String userName = "root";
    private final String password = "";
    private final String dbName = "myDB";

    public Connection con;

    public DB() {
        try {
            //Loading the jdbc driver
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
            //Get a connection to database
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + dbName, userName, password);
        } catch (Exception e) {
            System.err.println("DATABASE CONNECTION ERROR: " + e.toString());
        }
    }
    public Connection getConn(){
        if(con == null || con.isClosed)
            con = DriverManager.getConnection(server, user, pass);
        return con;
    }
}

Теперь, если у меня есть класс Student, который расширяется от класса Person

, я не смогу расширить класс DB для подключения к базе данных, потому что в java не может расширяться из более одного класса.

так что есть идеи, что мне делать, чтобы подключить все классы к базе данных?

1 Ответ

1 голос
/ 08 мая 2020

(следуя моему предыдущему комментарию) ниже дает вам представление о том, как будет выглядеть дизайн, и это только классы скелетов: enter image description here

public interface Connection {
    Statement createStatement(String sql);

}
public interface DbConnectionManager {

    Connection getConnection(String dbDriverName);
}

public class MySqlConnection implements Connection {
    @Override
    public Statement createStatement(String sql) {
        return null;
    }
}
public class PostgresConnection implements Connection {
    @Override
    public Statement createStatement(String sql) {
        return null;
    }
}

public class Statement {

    Result executeQuery() {
        return new Result() {
            //...use sql here
            //...
        };
    }
}
public abstract class Result<T> {
}
public class Person {
}
public class Student extends Person {
}
public class MyTestDbManager implements DbConnectionManager {

    private final Connection connection;

    public MyTestDbManager(String dbDriverName) {
        connection = getConnection(dbDriverName);
    }

    public static void main(String[] args) {
        MyTestDbManager myManager = new MyTestDbManager("postgresql");
        Result result = myManager.connection.createStatement("SELCET * FROM MY_TABLE").executeQuery();
    }

    @Override
    public Connection getConnection(String dbDriverName) {
        PostgresConnection postgresDb = new PostgresConnection();
        // postgresDb set all configs here
        return postgresDb;
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...