简体   繁体   English

无法通过Android Studio与Azure数据库连接

[英]Unable to connect with the azure database via android studio

I have created a database in Azure SQl with named as USERS ,and I want to access a column named as "FullName" Loaded jar: sqljtdc4.jar I have searched over internet and read documentations and finally implemented this but having this unknown error 我已经在Azure SQl中创建了一个名为USERS的数据库,并且我想访问一个名为“ FullName”的列。已加载的jar:sqljtdc4.jar我已经在Internet上进行了搜索并阅读了文档,最后实现了该错误,但是出现了这个未知错误

My Attempt: 我的尝试:

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();
        }

But getting this error: 但是得到这个错误:

 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)

It's a classic issue for Android App, you can not directly perform a networking operation in the main thread. 这是Android App的经典问题,您不能直接在主线程中执行联网操作。

There are two SO threads as below to get the same issue with yours, you can refer to them to solve it. 下面有两个SO线程与您遇到同样的问题,您可以参考它们来解决。

  1. Error StrictMode$AndroidBlockGuardPolicy.onNetwork 错误StrictMode $ AndroidBlockGuardPolicy.onNetwork
  2. How do I fix android.os.NetworkOnMainThreadException? 如何修复android.os.NetworkOnMainThreadException?

One way is as below to add the two lines. 一种方法是如下添加两行。

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

Alternatively to create a new thread to run the code in it. 或者创建一个新线程来运行其中的代码。

Hope it helps. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM