• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Android MSSQL Verbindung herstellen - Android Studio

T

toron

Mitglied
Hallo,

ich würde gerne eine Datenbankverbindung unter Android herstellen.
Das der bessere Weg über ein Webservice wäre ist mir zwar bewusst, ich würde das aber vorerst gerne so umsetzten.

Folgender Code funktioniert unter Eclipse (Java Desktop Applikation):
Java:
 String connectionString = "jdbc:jtds:sqlserver://127.0.0.1:58688/Android;instance=ANDROID_TEST";

      String userName = "Android";

        String password = "AndroidPass123";



        try

        {

            Class.forName("net.sourceforge.jtds.jdbc.Driver"); //specify the jtds driver



            Connection conn = DriverManager.getConnection(connectionString, userName, password); //establish connection



            System.out.println("Connection properly established");



        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

In Android Studio wir mir hiermit:

Java:
public class TestKlasse2 extends AsyncTask<Void,Void,String> {

    @Override
    protected String doInBackground(Void... voids) {

        String connectionString = "jdbc:jtds:sqlserver://10.0.2.2:58688/Android;instance=ANDROID_TEST";

        String userName = "Android";

        String password = "AndroidPass123";



        try

        {

            Class.forName("net.sourceforge.jtds.jdbc.Driver"); //specify the jtds driver



            Connection conn = DriverManager.getConnection(connectionString, userName, password); //establish connection



            System.out.println("Connection properly established");



        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

        return "test";
    }
}

aber folgender Fehler geworfen, wenn ich diese mit dem Emulator ausführe:

Code:
07-13 15:44:33.213    2144-2144/com.example.flix.datenbanktester D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
07-13 15:44:40.943    2144-2144/com.example.flix.datenbanktester I/System.out﹕ los gehts
07-13 15:44:40.993    2144-2157/com.example.flix.datenbanktester D/dalvikvm﹕ GC_FOR_ALLOC freed 134K, 12% free 2840K/3200K, paused 3ms, total 3ms
07-13 15:44:41.193    2144-2157/com.example.flix.datenbanktester D/dalvikvm﹕ GC_FOR_ALLOC freed 333K, 16% free 3020K/3580K, paused 0ms, total 0ms
07-13 15:44:41.203    2144-2157/com.example.flix.datenbanktester I/dalvikvm﹕ Could not find method org.ietf.jgss.GSSManager.getInstance, referenced from method net.sourceforge.jtds.jdbc.TdsCore.createGssToken
07-13 15:44:41.203    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY: unable to resolve static method 2633: Lorg/ietf/jgss/GSSManager;.getInstance ()Lorg/ietf/jgss/GSSManager;
07-13 15:44:41.203    2144-2157/com.example.flix.datenbanktester D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0001
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester I/dalvikvm﹕ Could not find method org.ietf.jgss.GSSContext.initSecContext, referenced from method net.sourceforge.jtds.jdbc.TdsCore.sendGssToken
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY: unable to resolve interface method 2627: Lorg/ietf/jgss/GSSContext;.initSecContext ([BII)[B
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester D/dalvikvm﹕ VFY: replacing opcode 0x72 at 0x0008
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY: unable to resolve exception class 312 (Lorg/ietf/jgss/GSSException;)
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY: unable to find exception handler at addr 0x4c
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY:  rejected Lnet/sourceforge/jtds/jdbc/TdsCore;.sendGssToken ()V
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY:  rejecting opcode 0x0d at 0x004c
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ VFY:  rejected Lnet/sourceforge/jtds/jdbc/TdsCore;.sendGssToken ()V
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ Verifier rejected class Lnet/sourceforge/jtds/jdbc/TdsCore;
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0xb0f0f648)
07-13 15:44:41.213    2144-2157/com.example.flix.datenbanktester E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
            at java.util.concurrent.FutureTask.run(FutureTask.java:239)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.VerifyError: net/sourceforge/jtds/jdbc/TdsCore
            at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:359)
            at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
            at java.sql.DriverManager.getConnection(DriverManager.java:179)
            at java.sql.DriverManager.getConnection(DriverManager.java:213)
            at com.example.flix.datenbanktester.TestKlasse2.doInBackground(TestKlasse2.java:32)
            at com.example.flix.datenbanktester.TestKlasse2.doInBackground(TestKlasse2.java:11)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
************at java.lang.Thread.run(Thread.java:841)

Die main Activity sieht wie folgt aus:
Java:
package com.example.flix.datenbanktester;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class Homescreen extends Activity {

    Button btnConnect, btnArtikel;
    TextView errorview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_homescreen);

        btnConnect = (Button) findViewById(R.id.btnConnect);
        btnConnect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.out.println("los gehts");
                new TestKlasse2().execute();
            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.homescreen, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Hat hier jemand eine Idee dazu.

Danke
 
Zuletzt bearbeitet:
T

toron

Mitglied
Hallo,

ich hab den Fehler gefunden.
Er lag im JDTS Treiber. Die Version 1.3.1 ist wohl etwas fehlerhaft bzw. nicht richtig mit Android kompatibel. Mit Version 1.2.5 funktioniert die Verbindung.

Da muss man erst mal drauf kommen :).
 
D

Dagobert

Bekanntes Mitglied
Ich möchte dazu dringend noch eine Anmerkung los werden.
Du solltest das ganze über einen Webservice machen... und nie direkt vom Gerät aus eine Verbindung zur DB aufbauen...

lg. Dagobert
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Android TCP-Verbindung zum Server über welche Prozess auslagerung nutzen? Android & Cross-Platform Mobile Apps 1
M Problem bei Werteübergabe, MSQL verbindung Android & Cross-Platform Mobile Apps 3
H WIFI, Bluetooth und NFC Verbindung überwachen Android & Cross-Platform Mobile Apps 1
H Android 3G TCP Socket Verbindung zum PC durch NAT Android & Cross-Platform Mobile Apps 8
M Android Server-Client-Verbindung in Android-App mit Sockets aufbauen Android & Cross-Platform Mobile Apps 5
W Android HTTPS-Verbindung mit Client-Authentifizierung Android & Cross-Platform Mobile Apps 0
R Socket Verbindung AsycTask Android & Cross-Platform Mobile Apps 5
F Android USB Verbindung zu Windows Programm Android & Cross-Platform Mobile Apps 3
U Android Https-Verbindung Android & Cross-Platform Mobile Apps 2
K Java ME Bluetooth verbindung parameter Android & Cross-Platform Mobile Apps 3
N Java ME Server-Client Verbindung über Wifi Android & Cross-Platform Mobile Apps 6
A Problem mit HTTP- Verbindung Android & Cross-Platform Mobile Apps 4
N Handy -PC Verbindung Android & Cross-Platform Mobile Apps 2
N Blutooz-Verbindung ... ich schaffs nicht Android & Cross-Platform Mobile Apps 5
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
G Bluetooth Verbindung zwischen Handy und PC Android & Cross-Platform Mobile Apps 5
G Bluetooth Verbindung Android & Cross-Platform Mobile Apps 2
O Bluetooth Verbindung zwischen 2 Handys Android & Cross-Platform Mobile Apps 5
K HTTP-Verbindung mit J2ME.... Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben