2017-02-15 23 views
0

У нас в настоящее время есть такая же проблема, как здесь: How to connect Android Studio with SQL Server database, но на нее не ответил.Как подключить Android Studio к базе данных SQL Server?

Мы также добились успеха в подключении к Eclipse, используя файл sqljdb4.jar, мы пробовали на android тот же код, что и в Eclipse, но он работает только на Eclipse.

Мы также попробовали другой драйвер, jtds1.3.1.jar, но это не сработало

Мы заменили логин и пароль по х и у;)

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) 
+2

Как точно все, что вы пробовали, не работает? Он падает? дает исключения? Если это так, где исключение stacktrace? –

+1

Ваш адрес неправильного формата. Правильный должен быть 'String url =" jdbc: jtds: sqlserver: // [SERVER_ADDRESS]/[DB_NAME] ";' –

+0

Благодарим за помощь! @Prerak Sola: Этот синтаксис не меняет ничего, что мы думаем, но мы должны начинать следующие ошибки (@Vlad Matvienko): W/System.err: java.sql.SQLException: Нет подходящего драйвера 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 Do у вас есть советы? – mhyeah

ответ

0

Ошибка, которую вы получаете, потому что вам не хватает строки 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(); 
} 
+0

Вы уверены, что с помощью «jdbc: jtdc» в URL-адресе и «jtds.jdbc» в Class.forName()? – mhyeah

+0

Да. Также обновите свой URL так, как он есть в ответе. –

+0

Хорошо. Мы сделали это, но он также возвращает «нет подходящего драйвера». Может быть, у вас есть другие идеи? – mhyeah

0

Перед тем, как установить соединение, необходимо добавить 2 строки кода:

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; 
    } 
}