【问题标题】:How to connect Android Studio with SQL Server database?如何将 Android Studio 与 SQL Server 数据库连接起来?
【发布时间】:2017-02-15 11:00:12
【问题描述】:

我们目前遇到了与这里相同的问题:How to connect Android Studio with SQL Server database,但尚未得到答复。

我们也在 Eclipse 上成功连接,使用 sqljdb4.jar 文件,我们在 android 上尝试了与 Eclipse 相同的代码,但它仅适用于 Eclipse。

我们还尝试了另一个驱动程序jtds1.3.1.jar,但它也不起作用

我们将登录名和密码替换为 x 和 y ;)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_flux_sequence);

    String url = "jdbc:jtdc:sqlserver://vps342074.ovh.net/IZY309";
    //String url = "jdbc:jtdc:sqlserver://vps342074.ovh.net/MSSQLSERVER;databaseName=IZY309";
    //String url = "jdbc:sqlserver://vps342074.ovh.net\\MSSQLSERVER;databaseName=IZY309";
    String user = "x";
    String pass = "y";

    try {
        //TextView textViewToChange = (TextView) findViewById(R.id.textViewCol5);
        //textViewToChange.setText("Hello");
        Class.forName("net.sourceforge.jtds.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, user, pass);

        Statement statement = con.createStatement();
        ResultSet resultat = statement.executeQuery("SELECT CATEGORIE FROM dbo.PPROFIL WHERE CATEGORIE = 'ac' ");
        while (resultat.next()) {

            String result = resultat.getString(1);
            TextView textViewToChange = (TextView) findViewById(R.id.textViewCol5);
            textViewToChange.setText(result);
            Log.d("My Custom Tag", result);


        }resultat.close();
        statement.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

private static void close(Connection con) {
    // TODO Auto-generated method stub
    close(con);

}

这里是返回的错误:

W/System.err: java.sql.SQLException: No suitable driver
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:186)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:213)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at 
com.example.gaetan.fluxsequence.flux_sequence.onCreate(flux_sequence.java:32)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.Activity.performCreate(Activity.java:6876)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.ActivityThread.access$1100(ActivityThread.java:222)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.os.Looper.loop(Looper.java:158)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7229)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • 您尝试过的所有方法究竟是如何不起作用的?它崩溃了吗?给出例外?如果是,异常堆栈跟踪在哪里?
  • 您的网址格式错误。正确的应该是String url = "jdbc:jtds:sqlserver://[SERVER_ADDRESS]/[DB_NAME]";
  • 感谢您的帮助! @Prera​​k Sola:这种语法不会改变我们的想法,但我们有以下错误开始(@Vlad Matvienko):W/System.err:java.sql.SQLException:没有合适的驱动程序 02-15 14:34: 01.896 4180-4180/com.example.gaetan.fluxsequence W/System.err:在 java.sql.DriverManager.getConnection(DriverManager.java:186) 02-15 14:34:01.896 4180-4180/com.example.gaetan .fluxsequence W/System.err: at java.sql.DriverManager.getConnection(DriverManager.java:213) 02-15 14:34:01.896 4180-4180/com.example.gaetan.fluxsequence 你有什么建议吗?跨度>
  • @mhyeah 您缺少指定驱动程序的 URL 中的 jtds 部分。没有它就行不通。此外,我在代码中没有看到任何有关驱动程序注册的信息,例如Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
  • 我们只是在帖子中添加返回的错误。如果你看到其他问题。当我们在“try”循环中添加您的行时,它会返回一个未经处理的异常: java.lang.ClassNotFoundException 您怎么看?比你,真的

标签: java android sql-server database connection


【解决方案1】:

在建立连接之前,必须添加两行代码:

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

完整代码为:(可能)

package com.ipvsoft.sendsms.utility;

import android.os.StrictMode;
import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class SQLConnection {
    private static final String LOG = "DEBUG";
    private static String ip = "192.168.3.85";
    private static String port = "1433";
    private static String classs = "net.sourceforge.jtds.jdbc.Driver";
    private static String db = "THTData";
    private static String un = "sa";
    private static String password = "admin";
    public static Connection connect() {
        Connection conn = null;
        String ConnURL = null;
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        try {
            Class.forName(classs);
            ConnURL = "jdbc:jtds:sqlserver://" + ip +":"+port+";"
                    + "databaseName=" + db + ";user=" + un + ";password="
                    + password + ";";
            conn = DriverManager.getConnection(ConnURL);
        } catch (SQLException e) {
            Log.d(LOG, e.getMessage());
        } catch (ClassNotFoundException e) {
            Log.d(LOG, e.getMessage());
        }
        return conn;
    }
}

【讨论】:

    【解决方案2】:

    你得到的错误是因为你错过了Class.forName("net.sourceforge.jtds.jdbc.Driver");这一行

    在建立数据库连接之前添加它,所以它在你的代码中看起来像这样:

    String url = "jdbc:jtdc:sqlserver://vps342074.ovh.net/IZY309";
    try {
        //TextView textViewToChange = (TextView) findViewById(R.id.textViewCol5);
        //textViewToChange.setText("Hello");
        Class.forName("net.sourceforge.jtds.jdbc.Driver");
    
        Connection con = DriverManager.getConnection(url, user, pass);
    
        Statement statement = con.createStatement();
        ResultSet resultat = statement.executeQuery("SELECT CATEGORIE FROM dbo.PPROFIL WHERE CATEGORIE = 'ac' ");
        while (resultat.next()) {
    
            String result = resultat.getString(1);
            TextView textViewToChange = (TextView) findViewById(R.id.textViewCol5);
            textViewToChange.setText(result);
            Log.d("My Custom Tag", result);
        }
        resultat.close();
        statement.close();
    
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    【讨论】:

    • 您确定 URL 中的“jdbc:jtdc”和 Class.forName() 中的“jtds.jdbc”吗?
    • 好的。我们做到了,但它也返回“没有合适的驱动程序”。或许您还有其他想法?
    • 能否用最新的代码更新您的问题?
    • 您是否已成功将 JAR 添加到您的项目中?错误也可能是由于这个原因。
    • 还有这个红色错误:02-15 15:33:14.181 28899-28899/com.example.gaetan.fluxsequence E/ViewSystem: ViewRootImpl #2 Surface is not valid.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多