Можно ли подключить MySQL и SQL Server, чтобы получить таблицы в нем? - PullRequest
1 голос
/ 19 февраля 2011

Пользователь не должен указывать тип, является ли это ms sql или моим sql? Я хочу сделать это в NetBeans? Если нет, есть ли способ?

Спасибо

1 Ответ

3 голосов
/ 19 февраля 2011

РЕДАКТИРОВАТЬ

Я почему-то подумал, что вы хотите знать, как разработать приложение, которое может обрабатывать несколько баз данных.Так что это шаблон, который может помочь вам в этом.Но чтобы на самом деле запросить вашу базу данных и получить из нее все необходимые данные, вам нужно использовать соответствующие API.( JDBC для вашего приложения Java, например).Прочитайте до конца этого ответа, я только что добавил пример использования JDBC с реальной базой данных Sql Server.

(Первая часть: как управлять постоянством layer)

У вас должна быть многоуровневая архитектура для вашей программы.Одним из этих уровней должен быть постоянный уровень, который будет запрашивать / извлекать данные из ваших баз данных.Отныне я собираюсь обсуждать только этот уровень персистентности.

Один из способов сделать это - использовать интерфейсы Java.

public interface DataService
{
   connect();
   close();
   ArrayList<IUser> retrieveUserDatas(..);
   // other expected operations
   .... 
}

И затем иметь один класс реализации этого интерфейса.для каждого типа базы данных.Таким образом, у вас будет:

class SqlServer implements DataService
{
   // Implementation of your operations using Sql Server drivers
}

class Mysql implements DataService
{ 
   // Implementation of your operations using Mysql drivers
}

И тогда у вас может быть менеджер, который решит, какую из баз данных вы хотите использовать:

class Manager
{
   DataService dataService;
   public Manager(string databaseType)
   {
       if(databaseType.equals("sqlserver"))
       {
          dataService = new SqlServer();
       }

       else if(databaseType.equals("mysql"))
       {
          dataService = new Mysql();
       }
   }
}

Так что на ваших верхних уровнях вы будетеиметь возможность создать менеджера для вашего уровня персистентности с подходящей системой баз данных:

Manager manager = new Manager("mysql"); // I want to manage my database layer with mysql

Теперь атрибут dataService от вашего менеджера будет экземпляром класса Mysql, и вы сможетеиспользовать операции этого класса.Это всего лишь одна строка кода, которую нужно менять каждый раз, когда вы добавляете новую базу данных в вашу систему (+ класс, реализующий интерфейс и использующий конкретные драйверы вашей базы данных).

FYI, это brige design-pattern !

(Вторая часть: работа с JDBC)

Например, вот что реализует класс для базы данных Sql Serverможет выглядеть так:

public class SqlServerAccess implements IDataServerAccess {

    static final String url= "jdbc:sqlserver://localhost:1433;databaseName="NAME OF YOUR DATABASE";integratedSecurity=true;";
    Connection connector;


    public void connection() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
            connector = DriverManager.getConnection(url, "root", "");
        } catch (Exception ex) {
            Logger.getLogger(SqlServerAccess.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


    @Override
    public void close() {
        try {
            if(connector != null){
                connector.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(SqlServerAccess.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

В методе connection() вы можете видеть, что я ссылался на драйвер Sql Server: com.microsoft.sqlserver.jdbc.SQLServerDrive

Так что для каждой базы данных у вас будетконкретный драйвер для загрузки (.jar) и указания в вашем классе реализации.

Наконец, вот как выглядит вставка:

public void insertData(Data data) {
        try {
            Statement st = dataServerAccess.connect().createStatement();
            st.execute("INSERT INTO DATA(bla, bla, bla, bla, created_at)"
                                + "VALUES('" + data.bla()
                                + "', '" + ..
                                + "', '" + ..
                                + "', '" + ..
                                + "','"  + getTodayTimestamp() +"')");
        } catch (SQLException ex) {

        } finally {
            dataServerAccess.close();
        }
    }

Надеюсь, это объяснение поможет вам построить то, что выхочу.Возможно, вам придется погуглить все эти ключевые слова (например, JDBC, слой базы данных, и вы можете пойти дальше с JPA, который является Object-Relational-Mapper. В любом случае, Ключевые слова проверять в Google!).Например, вот некоторая документация , которая поможет вам использовать JDBC с mysql.

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