Skocz do zawartości
januszcis9

Zdalny sqlite

    Rekomendowane odpowiedzi

    Mam pytanie. Chciałem się połączyć z mysql i poczytałem troche w guglach i niby jest to skoplikowane i mało bezpieczny. Jednak na swoim serwerze mam możliwość zainstlowania sqlite. Czy można się z androida podłączyć do zdalnego sqlite??

    Edytowane przez januszcis9

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    to powinno wyglądać mniej więcej tak:

    Connection conn = null;
    try {
    Class.forName("SQLite.JDBCDriver");
    conn = DriverManager.getConnection("jdbc:sqlite:/");
    } catch (java.sql.SQLException e) {
    Log.w("SQLException", e);
    } catch (ClassNotFoundException e) {
    Log.w("ClassNotFoundException", e);
    }

    ale na Androidzie nigdy tego nie próbowałem, szczerze nie wiem czy zadziała z tym sterownikiem zdalnie bez odpowiedniego transportu ale konstrukcja powinna działać

    Edytowane przez zawadaki

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Wiecie, ze SQLite to NIE jest serwer? Klient musi mieć dostęp do PLIKU z bazą danych. Robienie zdalnego dostępu do bazy SQLite jest jeszcze głupsze niż robienie zdalnego dostępu do MySQL.

    Czy napisanie paru linijek kodu w czymś tam, co jest na serwerze jest aż takim wyzwaniem, że trzeba robić takie dziwne konstrukcje?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Wiecie, ze SQLite to NIE jest serwer? Klient musi mieć dostęp do PLIKU z bazą danych. Robienie zdalnego dostępu do bazy SQLite jest jeszcze głupsze niż robienie zdalnego dostępu do MySQL.

    Czy napisanie paru linijek kodu w czymś tam, co jest na serwerze jest aż takim wyzwaniem, że trzeba robić takie dziwne konstrukcje?

    wiesz ze korzystając z transportu np CIFS lub NFS można zrobić go zdalnym ? :facepalm1:

    użytkownik ma problem to użytkownik ma rozwiązanie głupie czy nie ale jest

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Wiem, że (prawdopodobnie) można - tyle, że samo wystawienie serwera bazy danych w internecie jest już wystarczająco, jak by to powiedzieć aby nikogo nie urazić - "ekstrawaganckie". Wystawienie pliku po jakimś tam protokole (mniejsza z tym jakim) jest już pomysłem albo genialnym, albo szalonym. Zakładając, że tabela zajmie tylko 1MB, przecież, żeby puścić na tym zapytanie idące na scanie (bez indeksu) konieczne jest ściągnięcie całej tabeli na telefon. Jak wystawiamy plik, to pewnie też po to, żeby kilku userów mogło jednocześnie korzystać z możliwości odczytu / zapisu - wiemy, że SQLite się do tego nadaje jak pięść do nosa.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    użycie SQLite i transportu CIFS jest jak najbardziej możliwe , wiem to bo w Java takie pisałem symultaniczny dostęp nie był wymagany a jedynie koncentracja danych, w Androidzie takie coś raczej nie jest możliwe no chyba ze ktoś zamontuje siebie SMB, ale co mnie to obchodzi, jak autor tematu już to odkryje to wróci z pytaniem o inne rozwiązanie a wtedy zaproponuje użycie MySQL bo jest na bank możliwe i jest w dość proste, ewentualnie zaproponuje użycie pośrednika w postaci skryptu PHP z prostą autoryzacją i połączenie SSL, ale przecież nie będę układał treści problemu za autor tematu

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Chyba zbyt osobiście to traktujesz. I ty i ja wiemy, że rozwiązanie jest kompletnie idiotyczne, powodów można wymieniać naprawdę dużo, zalet brak. A że pytanie trzeba umieć zadać, to też racja ;)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Co do sqlite wiem ze to nie jest serwer tylko plik plik. Latwo mozna tam podejrzec dane. Ale jesli mowicie ze mozna poloczyc sie z mysql to prosze o podanie przykladoego kody jak odczytac rekord i zapisac oraz jak to odswierzeac x razy na sekunde.

    BTW

    W sqllite chcialem zastosowac pare zabezpieczen.

    1 Szyfrowanie - nie 256bitowe ale naprzyk'ad 16 albo szyfrem cezara

    2 Plik nie yl by dostepny przez www. Nie sa to wymyslne zabezpieczenia , ale jesli ktos sie chce wlamac to sie wlamie.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Co do sqlite wiem ze to nie jest serwer tylko plik plik. Latwo mozna tam podejrzec dane. Ale jesli mowicie ze mozna poloczyc sie z mysql to prosze o podanie przykladoego kody jak odczytac rekord i zapisac oraz jak to odswierzeac x razy na sekunde.

    BTW

    W sqllite chcialem zastosowac pare zabezpieczen.

    1 Szyfrowanie - nie 256bitowe ale naprzyk'ad 16 albo szyfrem cezara

    2 Plik nie yl by dostepny przez www. Nie sa to wymyslne zabezpieczenia , ale jesli ktos sie chce wlamac to sie wlamie.

    bezpośrednie połączenie z MySQL wygląda tak jak podałem wyżej ale zmienia się URI i sterownik

    Class.forName("com.mysql.jdbc.Driver");

    DriverManager.getConnection("jdbc:mysql://localhost/");

    problem tkwi z sterowniku którego Android nie posiada trzeba go dostarczyć z programem w postaci załączonych bibliotek JAR, biblioteki można pobrać z MySQL Connectors

    to było by na tyle ale nie próbowałem tego na Androidzie ;)

    lepiej jak zrobisz pośrednik PHP który będzie odbierał zapytanie, wykonywał i odsyłał wynik, wszystko korzystając z transportu HTTPS dane wynikowe serializowane przy użyciu JSON lub czegoś innego zależnie czy będą to dane ASCII czy binarne

    Edytowane przez zawadaki

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Znalazłem coś takiego. Connecting to MySQL database | Hello Android

    I sam kod wywala mi błąd.

            String result = "";
         //the year data to send
         ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
         nameValuePairs.add(new BasicNameValuePair("year","1980"));
    
         //http post
         try{
                 HttpClient httpclient = new DefaultHttpClient();
                 HttpPost httppost = new HttpPost("http://example.com/getAllPeopleBornAfter.php");
                 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                 HttpResponse response = httpclient.execute(httppost); 
                 HttpEntity entity = response.getEntity();
                 InputStream is = entity.getContent();
         }catch(Exception e){
                 Log.e("log_tag", "Error in http connection "+e.toString());
         }
         //convert response to string
         try{
    
                 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                 StringBuilder sb = new StringBuilder();
                 String line = null;
                 while ((line = reader.readLine()) != null) {
                         sb.append(line + "\n");
                 }
                 is.close();
    
                 result=sb.toString();
         }catch(Exception e){
                 Log.e("log_tag", "Error converting result "+e.toString());
         }
    
         //parse json data
         try{
                 JSONArray jArray = new JSONArray(result);
                 for(int i=0;i<jArray.length();i++){
                         JSONObject json_data = jArray.getJSONObject(i);
                         Log.i("log_tag","id: "+json_data.getInt("id")+
                                 ", name: "+json_data.getString("name")+
                                 ", sex: "+json_data.getInt("sex")+
                                 ", birthyear: "+json_data.getInt("birthyear")
                         );
                 }
    
         }
       catch
       (JSONException e){
                 Log.e("log_tag", "Error parsing data "+e.toString());
       }

    Eclipse nie pasuje:

    InputStream is = entity.getContent();

    i

    (JSONException e)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x