【问题标题】:Is it possible to connect mysql and sql server to get the tables present in it?是否可以连接 mysql 和 sql server 以获取其中存在的表?
【发布时间】:2011-02-19 15:15:04
【问题描述】:

用户不应该指定类型是ms sql还是my sql? 我想在netbeans中做到这一点? 如果没有,有什么办法吗?

谢谢

【问题讨论】:

标签: java mysql sql-server-2005 swing-app-framework


【解决方案1】:

编辑

不知何故,我以为您想知道如何开发一个可以处理多个数据库的应用程序。所以这是一个可以帮助你的模式。但是要真正查询您的数据库并从中获取您想要的所有数据,您将需要使用相应的 API。 (例如,JDBC 用于您的 Java 应用程序)。读到这个答案的结尾,我只是添加了一个如何将 JDBC 与实际的 Sql Server 数据库一起使用的示例。

(第一部分:如何管理你的persistence层)

您的程序应该有一个多层架构。这些层之一应该是将从数据库中查询/检索数据的持久层。从现在开始,我只讨论这个持久层。

一种方法是使用 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 类的实例,您将能够使用该类的操作。这只是每次向系统添加新数据库时需要更改的一行代码(+ 实现接口并使用数据库特定驱动程序的类)。

仅供参考,这是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 上检查关键字!)。例如here is some documentation 帮助您将 JDBC 与 mysql 一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多