连接到同一DBMS上的“外部”数据库

令我惊讶的是,JDBC使我可以从具有相同特权的同一个DBMS上的“外部”数据库中的表中进行透明选择,而无需显式连接到外部数据库。这是MySQL应该采用的方式,还是只是JDBC的怪癖?

详细信息:
我在DBMS上创建了两个数据库:stkovrflo_1和stkovrflo_2。我从MySQL World数据库填充了这些数据库中的表

CREATE TABLE stkovrflo_1.Country
SELECT name, region FROM world.Country;

CREATE TABLE stkovrflo_2.City
SELECT world.City.name, world.Country.name AS country
FROM world.City INNER JOIN world.Country ON world.City.CountryCode = world.Country.code;

在JDBC中,我可以stkovrflo_2.City通过与stkovrflo_1数据库的连接选择表的条目我对这两个数据库都有SELECT访问权限。

这是我的JDBC代码:

import java.sql.*;

public class JDBCExample {
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost/stkovrflo_1";

    public static void main(String[] args) throws Exception{
        
        String uid = args[0];
        String pswd = args[1];
        
        if(pswd.toUpperCase().equals("NULL"))
            pswd = null;

        Connection conn = null;
        conn = DriverManager.getConnection(DB_URL,uid,pswd);
        
        processTableSameDB(conn);
        System.out.println("\n\n");
        processTableDifferentDB(conn);
        
        if(conn != null)
            conn.close();
    }

    protected static void processTableSameDB(Connection conn) throws Exception {
        Statement stmt = null;
        String tableName = "Country";

        try{
            Class.forName("com.mysql.jdbc.Driver");

            System.out.println("Retrieving from table in same database...");

            stmt = conn.createStatement();
            String sql;
            sql = "SELECT * FROM " + tableName + " LIMIT 10";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                String name = rs.getString("name");
                String region = rs.getString("region");

                System.out.print("Name: " + name);
                System.out.println(", Region: " + region);
            }
            rs.close();
        }
        catch(SQLException se){
            se.printStackTrace();
        }
        finally{
            if(stmt!=null)
                stmt.close();
        }
    }

    protected static void processTableDifferentDB(Connection conn) throws Exception {
        Statement stmt = null;
        String tableName = "stkovrflo_2.City";

        try{
            Class.forName("com.mysql.jdbc.Driver");

            System.out.println("Retrieving from table in different database...");

            stmt = conn.createStatement();
            String sql;
            sql = "SELECT * FROM " + tableName + " LIMIT 10";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                String name = rs.getString("name");
                String country = rs.getString("Country");

                System.out.print("Name: " + name);
                System.out.println(", Country: " + country);
            }
            rs.close();
        }
        catch(SQLException se){
            se.printStackTrace();
        }
        finally{
            if(stmt!=null)
                stmt.close();
        }
    }
}  

JDBC输出如下:

Retrieving from table in same database...
Name: Aruba, Region: Caribbean
Name: Afghanistan, Region: Southern and Central Asia
Name: Angola, Region: Central Africa
Name: Anguilla, Region: Caribbean
Name: Albania, Region: Southern Europe
Name: Andorra, Region: Southern Europe
Name: Netherlands Antilles, Region: Caribbean
Name: United Arab Emirates, Region: Middle East
Name: Argentina, Region: South America
Name: Armenia, Region: Middle East



Retrieving from table in different database...
Name: Oranjestad, Country: Aruba
Name: Kabul, Country: Afghanistan
Name: Qandahar, Country: Afghanistan
Name: Herat, Country: Afghanistan
Name: Mazar-e-Sharif, Country: Afghanistan
Name: Luanda, Country: Angola
Name: Huambo, Country: Angola
Name: Lobito, Country: Angola
Name: Benguela, Country: Angola
Name: Namibe, Country: Angola
比尔·卡温

阅读https://dev.mysql.com/doc/refman/8.0/zh-CN/identifier-qualifiers.html

这很正常。只要数据库位于同一个MySQL实例上,并且您对该数据库具有特权,那么哪个是“默认”数据库就没有关系。您可以引用任何databasename.tablename

默认数据库类似于外壳程序中的当前工作目录(cwd)。您始终可以通过提供路径来引用另一个目录中的文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将不同设备上的同一应用程序连接到同一数据库

来自分类Dev

连接到SQL Server;连接到同一数据库的两个网站

来自分类Dev

我想连接到外部数据库

来自分类Dev

Elixir / Phoenix-连接到外部数据库

来自分类Dev

耶拿连接到外部数据库

来自分类Dev

将 MongoDB shell 连接到外部数据库

来自分类Dev

如何连接到另一个域上的MySQL数据库?

来自分类Dev

可以从 docker 容器外部连接到数据库,但不能从内部连接到数据库(在 laravel 中)

来自分类Dev

连接到网络上的Excel工作表(数据库)

来自分类Dev

连接到LAN网络位置上的数据库

来自分类Dev

无法连接到在AWS上运行的MySQL数据库

来自分类Dev

无法连接到Windows上的MySQL数据库

来自分类Dev

无法连接到Android KivyMD上的mysql数据库

来自分类Dev

无法连接到在AWS上运行的MySQL数据库

来自分类Dev

在AWS上为Django设置并连接到数据库

来自分类Dev

AWS ElasticBeantaslk上的Sidekiq未连接到数据库

来自分类Dev

连接到Amazon Elastic Beanstalk上的数据库

来自分类Dev

无法连接到 Docker 上的 SQL 数据库

来自分类Dev

在Kubernetes cron作业中运行的应用程序未连接到同一Kubernetes集群中的数据库

来自分类Dev

想要连接到同一个数据库表但具有不同的值

来自分类Dev

无法连接到本地网络上另一台PC上的MySQL数据库。[视窗]

来自分类Dev

从Rails连接到外部Azure数据库以导入数据

来自分类Dev

在连接到数据库上另一个表的表中插入新行

来自分类Dev

从另一个驱动器上的文档根连接到 XAMPP MySQL 数据库

来自分类Dev

如何从Google App Maker作为外部mysql数据库连接到Google Cloud SQL数据库?

来自分类Dev

MSSQL-连接表,位于同一服务器上的不同数据库中

来自分类Dev

使用SQLAlchemy连接到数据库

来自分类Dev

pyodbc无法连接到数据库

来自分类Dev

连接到Oracle数据库

Related 相关文章

  1. 1

    将不同设备上的同一应用程序连接到同一数据库

  2. 2

    连接到SQL Server;连接到同一数据库的两个网站

  3. 3

    我想连接到外部数据库

  4. 4

    Elixir / Phoenix-连接到外部数据库

  5. 5

    耶拿连接到外部数据库

  6. 6

    将 MongoDB shell 连接到外部数据库

  7. 7

    如何连接到另一个域上的MySQL数据库?

  8. 8

    可以从 docker 容器外部连接到数据库,但不能从内部连接到数据库(在 laravel 中)

  9. 9

    连接到网络上的Excel工作表(数据库)

  10. 10

    连接到LAN网络位置上的数据库

  11. 11

    无法连接到在AWS上运行的MySQL数据库

  12. 12

    无法连接到Windows上的MySQL数据库

  13. 13

    无法连接到Android KivyMD上的mysql数据库

  14. 14

    无法连接到在AWS上运行的MySQL数据库

  15. 15

    在AWS上为Django设置并连接到数据库

  16. 16

    AWS ElasticBeantaslk上的Sidekiq未连接到数据库

  17. 17

    连接到Amazon Elastic Beanstalk上的数据库

  18. 18

    无法连接到 Docker 上的 SQL 数据库

  19. 19

    在Kubernetes cron作业中运行的应用程序未连接到同一Kubernetes集群中的数据库

  20. 20

    想要连接到同一个数据库表但具有不同的值

  21. 21

    无法连接到本地网络上另一台PC上的MySQL数据库。[视窗]

  22. 22

    从Rails连接到外部Azure数据库以导入数据

  23. 23

    在连接到数据库上另一个表的表中插入新行

  24. 24

    从另一个驱动器上的文档根连接到 XAMPP MySQL 数据库

  25. 25

    如何从Google App Maker作为外部mysql数据库连接到Google Cloud SQL数据库?

  26. 26

    MSSQL-连接表,位于同一服务器上的不同数据库中

  27. 27

    使用SQLAlchemy连接到数据库

  28. 28

    pyodbc无法连接到数据库

  29. 29

    连接到Oracle数据库

热门标签

归档