java - 无法通过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)
解决方案
这是Android App的经典问题,不能直接在主线程中进行联网操作。
下面有两个 SO 线程可以解决与您相同的问题,您可以参考它们来解决它。
一种方法如下添加两行。
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
或者创建一个新线程来运行其中的代码。
希望能帮助到你。
推荐阅读
- python - 将多选答案拆分到 Excel 或 Python 中的不同列
- kubernetes - 将流量从 Kubernetes pod 转发到本地服务器
- react-native - 防止 ScrollView 位于顶部,从安装内容略微滚动以避免状态栏
- mysql - MySQL:如果第一列在一个范围内,如何对多列索引进行排序?
- sql-server - SQL Server:如何从两个表中选择列并显示第二个表中最接近日期的相同值
- swift - SwiftUI View 文本字段未绑定到 ViewModel 属性
- azure-active-directory - 尝试使用 MSAL 在 SPO 中对用户进行身份验证时出现 401 未经授权的错误
- jquery - .attr () 方法是否添加或更改数据索引?
- python - Python NLTK ResolutionProver 在实际上没有解决方案时找到了解决方案
- python - 熊猫与平均值的百分比差异