Autore Topic: Utilizzo di sqljdbc4.jar  (Letto 1022 volte)

Offline C_l_a_u_d_i_o

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung ACE
  • Sistema operativo:
    Windows 8
Utilizzo di sqljdbc4.jar
« il: 16 Dicembre 2013, 12:45:10 CET »
0
Ciao a tutti. Mi sta capitando una cosa che non riesco a comprendere. Ho scaricato dal sito Microsoft la libreria sqljdbc4.jar per la connessione a database SQL Server. Ho importato il file jar in AndroidStudio e tutto è avvenuto correttamente. Vale a dire che:

1 - Ho copiato il file sqljdbc4.jar nella cartella build/libs del progetto;

2 - Ho modificato il file build.gradle dell'applicazione includendo la libreria nella sezione dependencies:
dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile files('build/libs/sqljdbc4.jar')
}

3 - Ho modificato il file settings.gradle nel seguente modo
include ':UGHO',':UGHO:build:libs:sqljdbc4.jar'

4 - Ho eseguito il "Sync Project with Gradle Files"

Il risultato è stato che nella struttura del progetto ora sono presenti:

1) in .idea->libraries il file sqljdbc4.xml contenente il seguente codice:

<component name="libraryTable">
  <library name="sqljdbc4">
    <CLASSES>
      <root url="jar://$PROJECT_DIR$/UGHO/build/libs/sqljdbc4.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</component>

2)Nelle External Library la cartella sqljdbc4 contenente la libreria sqljdbc4.jar <library> con al suo interno:
- il package com.microsoft.sqlserver.jdbc
- la cartella META.INF
- la cartella microsoft.sql

Inoltre, dopo queste operazioni, aggiungendo nel progetto la seguente riga di codice
import com.microsoft.sqlserver.jdbc.SQLServerDriver;
l'IDE non mi segnala nessuna incongruenza.

Il problema nasce nell'esecuzione delle brevi righe di codice della classe visibili nell'allegato MainActivity.java. In sostanza, come si può vedere dal LogCat allegato in pdf, la chiamata alla Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); genera un eccezione ( ClassNotFoundException e ).
Dopo vari tentativi falliti, ho provato a replicare ed eseguire il medesimo codice in una classe java eseguita fuori dall'IDE. Per intenderci compilando con Javac ed eseguendo con java in un box dos. E' stato sufficiente impostare la variabile d'ambiente CLASSPATH, includendo il path alla classe e alla libreria per vedere il tutto funzionare correttamente, la connessione al DB è andata a buon fine e i dati dalle tabelle sono stati letti in modo corretto. La prova mi è servita per avere la certezza che il codice java e le librerie fossero corrette. In allegato il file TestJavaPack.java contenente la definizione della classe. Per ulteriore verifica ho implementato anche l'uso della libreria "net.sourceforge.jtds.jdbc.Driver" che ha dato esito positivo.
Ho quasi l'impressione che ne sull'emulatore nè sul dispositivo Samsung collegato via USB, vengano trasferite le librerie necessarie chiamate dalla Class.forName()quando eseguo il RUN del progetto. L'applicazione comunque parte e sia nell'emulatore che sul dispositivo appare la schermata "HelloWorld", quindi l'applicazione viene trasferita ed eseguita.
Io non conosco AndroidStudio e quindi non so se le librerie che sto usando devono essere caricate sul dispositivo e nell'emulatore espressamente o se ci pensa l'IDE. Tantomeno conosco il metodo per trasferirle espressamente.

Allegati
1 - LogCat.txt completo;
2 - MainActivity.txt (la classe implementata in AndroidStudio e che da il problema);
3 - StructureProject.jpg (screen shot dell'IDE per la struttura del progetto e AVD Manager con virtual device usato per le prove);
4 - TestJavaPack.txt (la classe in codice Java di verifica compilata ed eseguita fuori dall'IDE);

P.S.
 Ho impostato un filtro nel LogCat alla sola applicazione il cui risultato è il seguente:
12-14 23:25:01.893    2799-2799/com.elementware.lunghi.com D/LIFECYCLE﹕ ACTIVITY_B -> ON_CREATE
12-14 23:25:01.893    2799-2799/com.elementware.lunghi.com D/LIFECYCLE﹕ MySQL Connect Example.
12-14 23:25:01.893    2799-2799/com.elementware.lunghi.com D/LIFECYCLE﹕ Prima di Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver)
12-14 23:25:01.893    2799-2799/com.elementware.lunghi.com D/LIFECYCLE﹕ Non va ClassNotFoundException : com.microsoft.sqlserver.jdbc.SQLServerDriver;

Riporto il contenuto di build.gradle del progetto per fornirvi maggiori info:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

dependencies {
   compile 'com.android.support:appcompat-v7:+'
    compile files('build/libs/sqljdbc4.jar')
}


Ho provato anche a collegare via USB il mio Samsung ACE, ma il risultato è lo stesso.
Si tratta di
Modello : Samsung GT-S5830
Versione Android : 2.3.5
Versione build: GINGERBREAD

IDE Android Studio 0.3.2
IRE 1.7.0_45

S.O. Win8Pro 64Bit

HW
Dell inspiron
Intel Core i7-3632QM CPU @2.20GHz
8GB RAM

Spero di avere fornito informazioni chiare e sufficienti affinché qualcuno possa gentilmente fornirmi un aiuto.

Grazie e buon lavoro a tutti :-)




Offline C_l_a_u_d_i_o

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung ACE
  • Sistema operativo:
    Windows 8
Re:Utilizzo di sqljdbc4.jar
« Risposta #1 il: 20 Dicembre 2013, 23:39:37 CET »
0
Dopo vari tentativi ho risolto cancellando i seguenti file

$PROJECT_DIR$/[NomePrj]/build\apk\[NomePrj]-debug-unaligned.apk
$PROJECT_DIR$/[NomePrj]/build\libs\[NomePrj]-debug.ap_
$PROJECT_DIR$/[NomePrj]/build\libs\[NomePrj]-debug.dex

Ricompilato il progetto, Android Studio li ha ricreati ed ora la chiamata Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
viene eseguita senza problemi.



Offline uelfox

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet mediacom 8" MP842M
  • Sistema operativo:
    Win 7
Re:Utilizzo di sqljdbc4.jar
« Risposta #2 il: 12 Aprile 2014, 11:50:36 CEST »
0
Ciao Claudio,
ho seguito i passi per inserire la libreria sqljdbc4.jar, per potermi connettere al mio database SQL sul pc local, ma incontro non tanti problemi! Mi puoi dare un aiuto?
- Ho scaricato la libreria da MS, e ho estratto il file sqljdbc4.jar
- Ho trascinato il file nella cartella libs del mio progetto e poi ho aggiunto le dependiences nel file build.gradle cosi: compile files('libs/sqljdbc4.jar')
- Ho aggiunto anche in setting.gradle: include ':libs'
- Ho compilato e mi trovo nella situazione come da screen shot img1.png allegato;

Se però provo a mettere nella funzione ConnectSQL i comandi:
Codice: [Seleziona]
String drivers;
drivers = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(drivers);
mi genera l'errore ClassNotFoundException...
Dove o sbagliato?

Post unito: 12 Aprile 2014, 20:50:42 CEST
Ho risolto x l'errore 'ClassNotFoundException'.
Bastava mettere il tutto sotto try-catch.

Ora però, devo capire quale stringa utilizzare per connettermi al DB SQL su local e comunicare con esso.
Qualcuno ha le info necessarie?
« Ultima modifica: 12 Aprile 2014, 20:50:42 CEST da uelfox, Reason: Merged DoublePost »