java - Android Studio 无法连接到 Azure sql server 中的数据库

标签 java android sql-server azure jtds

我正在使用 android studio 开发应用程序并使用 Azure Sql Server 托管我的数据库。问题是我能够连接到 SQL Server 上的数据库,但出现错误:在我的数据库中找不到对象。

我发现它可能正在连接到我的主数据库,而不是我希望它连接到的数据库。有什么办法可以解决这个问题吗?

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;


    }
}

Picture of my database structure

最佳答案

我尝试通过 java jdbc 连接我的 sqlserver,但没有重现您的问题。

我可以成功连接到我的应用程序数据库。

我的测试代码:

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> ...

您可以引用以下页面了解更多详情。

  1. https://sourceforge.net/p/jtds/discussion/104389/thread/a672d758/

  2. how to connect sql server using JTDS driver in Android

<小时/>

更新答案:

我对您的连接 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>"在您的主机字符串之后。

请引用上面的代码并重试。如有任何疑问,请告诉我。

希望对您有帮助。

关于java - Android Studio 无法连接到 Azure sql server 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202540/

相关文章:

android - 获取属于特定组的联系人列表

Java Android : Make a word (from a paragraph) into a button

android - 自定义 Alertdialog 宽度大于布局 xml 中显示的宽度

python - 在 MySQL Workbench 中调用 Python 模块函数时出错

java - 数字金字塔,初学递归追踪难吗?

java - JPA BigInteger 正在映射到 MySQL 的十进制?

java - 为什么我的表单没有在 spring boot 中传递信息

java - Swagger CodeGen 生成带有多个 try catch 的代码 ApiController.java

sql - 插入选择和插入选择之间的区别?

c# - 在使用 WebMatrix 环境的 C#.NET 网页中跨范围使用 GetLastInsertId() 是否安全?