java - 无法通过android studio连接azure数据库

标签 java sql azure android-studio jtds

我在 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)

最佳答案

这是Android应用程序的一个典型问题,你不能直接在主线程中执行网络操作。

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

  1. Error StrictMode$AndroidBlockGuardPolicy.onNetwork
  2. How do I fix android.os.NetworkOnMainThreadException?

一种方法是添加这两行,如下所示。

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

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

希望有帮助。

关于java - 无法通过android studio连接azure数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57380176/

相关文章:

java - 如何使用标志来重新启动线程中的操作?

c# - 我应该选择哪种 RDBMS 和开发工具来重写基于字符的应用程序?

php - 按每年唯一的月份分组,而不仅仅是月份

azure - 能否将列设置为 Azure 逻辑应用中 SQL 插入行的可选列?

java - 导出 .apk 时出现 Joda 时间和 ProGuard 错误

java - 如何循环下移字母

Java actionlistener 变量是从内部类中访问的

java - JDBC 分页

javascript - 我们如何使用nodejs将多个blob上传到azure

c# - 使用 .net core 读取设备孪生时,程序已存在,没有记录任何异常