我正在使用android studio开发应用程序并使用Azure Sql Server来托管我的数据库。问题是我能够在SQL服务器上连接到我的数据库,但它在我的数据库中找不到Object的错误。
我发现它可能连接到我的master数据库而不是我希望它连接到的数据库。有什么解决方案可以解决这个问题吗?
package com.example.lenovo.testing1;
import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;
import java.sql.*;
public class ConnectionClass {
String hostName = "haozailai.database.windows.net";
String dbName = "haozailai";
String user = "username";
String password = "password";
@SuppressLint("NewApi")
public Connection CONN() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String ConnURL;
Connection conn = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
String url = String.format("jdbc:jtds:sqlserver://haozailai.database.windows.net:1433;database=haozailai;user=username;password=password;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;");
conn = DriverManager.getConnection(url);
}catch (SQLException se)
{
Log.e("error here 1 : ", se.getMessage());
}
catch (ClassNotFoundException e)
{
Log.e("error here 2 : ", e.getMessage());
}
catch (Exception e)
{
Log.e("error here 3 : ", e.getMessage());
}
return conn;
}
}
答案 0 :(得分:0)
我尝试通过java jdbc连接我的sqlserver,但没有重现你的问题。
我可以成功连接到我的应用程序db。
我的测试代码:
import java.sql.*;
public class Test {
public static final String url = "jdbc:sqlserver://***.database.windows.net:1433;database=***;user=***password=***;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
public static final String name = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static Connection conn = null;
public static PreparedStatement pst = null;
public static Statement stmt = null;
public static ResultSet rs = null;
public static void main(String[] args) {
try {
String SQL = "select * from dbo.Student";
Class.forName(name);
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println(rs.getString("name"));
}
close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void close() {
try {
conn.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
经过一些研究,我发现这是因为你的连接网址。
您需要修改您的连接网址:
jdbc:jtds:sqlserver://haozailai.database.windows.net:1433/<your application db name> ...
您可以参考以下页面了解更多详情。
https://sourceforge.net/p/jtds/discussion/104389/thread/a672d758/
更新答案:
我对您的连接URL稍作调整,可以正常连接到我的应用程序数据库。
try {
String SQL = "select * from dbo.Student";
Class.forName("net.sourceforge.jtds.jdbc.Driver");
String url = String.format("jdbc:jtds:sqlserver://***.database.windows.net:1433/<your database name>;user=***;password=***;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;");
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println(rs.getString("name"));
}
close();
} catch (Exception e) {
e.printStackTrace();
}
请注意,请删除database=***
并在主机字符串后添加"/<your database name>"
。
请参考上面的代码再试一次。有任何疑虑,请告诉我。
希望它对你有所帮助。
答案 1 :(得分:0)
我知道这个答案太迟了,但是我发现这个视频完全可以使用:https://www.youtube.com/watch?v=WJBs0zKGqH0
问题是,您必须下载一个jtds jar,视频中的那个家伙说您可以从中获得它,并且,您还需要在连接URL的“ sqlserver”之前添加“ jtds”,并编辑“ databe”写在连接网址中,如下所示: jdbc: jtds :sqlserver://serverName.database.windows.net:portNr: DatabaseName = dbName; user = ....