首页 > 解决方案 > 无法通过android studio连接天蓝色数据库

问题描述

我在 Azure SQl 中创建了一个名为 USERS 的数据库,我想访问一个名为“FullName”的列加载的 jar:sqljtdc4.jar 我在互联网上搜索并阅读了文档并最终实现了这个,但出现了这个未知错误

我的尝试:

String hostName = "ABC.database.windows.net"; 
        String dbName = "myfirst"; 
        String user = "username"; 
        String password = "abcde"; 

        String url = String.format("jdbc:sqlserver://%s:1433;database=%s;user=%s;password=%s;encrypt=true;"
                + "hostNameInCertificate=*.database.windows.net;loginTimeout=30;", hostName, dbName, user, password);

//I have tried this replacing database  with databaseName/Database/DatabaseName

        Connection connection = null;

        try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
            connection = DriverManager.getConnection(url);
            String SQL = "select * from dbo.USERS";


            try (Statement statement = connection.createStatement();
                 ResultSet resultSet = statement.executeQuery(SQL)) {

                // Print results from select statement
                while (resultSet.next())
                {
                    Toast.makeText(this,resultSet.getString("FullName"), Toast.LENGTH_SHORT).show();
                }
                connection.close();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

但收到此错误:

 W/System.err:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
2019-08-06 21:27:52.400 15125-15125/com.abc.abc W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:117)
2019-08-06 21:27:52.400 15125-15125/com.abc.abc W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:105)
2019-08-06 21:27:52.401 15125-15125/com.abc.abc W/System.err:     at java.net.InetAddress.getByName(InetAddress.java:1108)
2019-08-06 21:27:52.401 15125-15125/com.abc.abc W/System.err:     at java.net.InetSocketAddress.<init>(InetSocketAddress.java:235)
2019-08-06 21:27:52.401 15125-15125/com.abc.abc W/System.err:     at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:356)
2019-08-06 21:27:52.402 15125-15125/com.abc.abc W/System.err:     at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1034)
2019-08-06 21:27:52.402 15125-15125/com.abc.abc W/System.err:     at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833)
2019-08-06 21:27:52.403 15125-15125/com.abc.abc W/System.err:     at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716)
2019-08-06 21:27:52.403 15125-15125/com.abc.abc W/System.err:     at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
2019-08-06 21:27:52.404 15125-15125/com.abc.abc W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:569)
2019-08-06 21:27:52.404 15125-15125/com.abc.abc W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:237)

标签: javasqlazureandroid-studiojtds

解决方案


这是Android App的经典问题,不能直接在主线程中进行联网操作。

下面有两个 SO 线程可以解决与您相同的问题,您可以参考它们来解决它。

  1. 错误 StrictMode$AndroidBlockGuardPolicy.onNetwork
  2. 如何修复 android.os.NetworkOnMainThreadException?

一种方法如下添加两行。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

或者创建一个新线程来运行其中的代码。

希望能帮助到你。


推荐阅读