我在 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线程与您的问题相同,您可以引用它们来解决它。
- Error StrictMode$AndroidBlockGuardPolicy.onNetwork
- 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/