Wątek przeniesiony 2020-11-17 14:54 z C# i .NET przez cerrato.

Dostęp do bazy danych (SQLite) na urządzeniu mobilnym po USB

0

Witam.
Czy jestem w stanie uzyskać dostęp do bazy danych SQLite (własnej aplikacji mobilnej) za pomocą aplikacji napisanej w C# podłączając urządzenie po USB? Mam dziwne przeczucie, że Androidowe uprawnienia mnie pokonają i nie będzie to takie proste. Jest to w ogóle możliwe?

1

Wydaje mi się, że to zależy, gdzie ta baza jest trzymana.
Jeśli gdzieś w pamięci wbudowanej albo na karcie pamięci, to pewnie by się dało do tego dostać - tak samo, jak np. do zdjęć po podłączeniu telefonu kablem i ustawieniu trybu połączenia na "pamięć masowa".

Ale jeśli chodzi o takie "typowe" korzystanie z SQL przez apkę to kiepsko to widzę - https://developer.android.com/training/data-storage/sqlite#kotlin :

Just like files that you save on the device's internal storage, Android stores your database in your app's private folder. Your data is secure, because by default this area is not accessible to other apps or the user.

Raczej bym pomyślał na Twoim miejscu o wystawieniu jakiegoś, nawet bardzo prostego, API, które zapewni podstawowe funkcje - typu SELECT, INSERT itp. W sensie ze baza będzie nadal bazą prywatną na potrzeby tej aplikacji, a do tego po prostu dodasz jakiś pomost, który udostępni dane na zewnątrz - niekoniecznie po kablu, ale np. po WiFi.

0

Czyli musiałbym trzymać bazę danych w folderach publicznych, a nie prywatnych i może jest szansa, że będę w stanie coś z tej bazy wyczytać. Ogólnie problem polega na tym, że @jacek.placek w innym wątku zapytał mnie czy mam coś mobilnego do Optimy i przypadkiem wpadłem na pomysł, aby zrobić synchronizator w C#, który po podłączeniu do USB do PC wczytał by operacje zrobione na telefonie i użytkownik mógłby wybrać jaką akcję chce w tym momencie wykonać.

3

Nie wiem, czy nie lepiej będzie jednak trzymać bazę nie na telefonie, ale na jakimś serwerze, z którym telefon będzie się łączyć.

1

To jest możliwe, ale nie polecam, jeśli da się to objeść. Musiałbyś skorzystać z ContentProvidera. Wtedy po ADB mógłbyś wyciągnąć dane. Prościej robić to po sieci i tak się synchronizować, jeśli możesz sobie na to pozwolić.

0

Jakieś API jest zdecydowanie najlepszy rozwiązaniem, ale wdrożenie tego jest zdradliwe i czasochłonne. Co jeśli chciałbym taką aplikację wrzucić na sklep play? Nikt przecież sobie sam API nie postawi i nie zrobi pełnej konfiguracji. Jest jeszcze opcja żeby zrobić self-hosted API w usłudze i opakować w instalator, ale skąd aplikacja będzie wiedziała gdzie ma się łączyć? Zrobię konfiguracje w aplikacji mobilnej ale skąd użytkownik będzie wiedział co tam wpisać? Za dużo jest rzeczy, które wymagają nas, "techników"...

1

Przy USB na Androidzie jest też trudność w postaci obsługi kilku sytuacji, np. przerzucenie procesu na tło, odebranie uprawnień do USB czy połączenie przychodzące. Jest to trochę zabawy. Warto jeśli apka byłaby wykorzystywana na większą skalę. Tymczasem praca wlożona w obsługę takiego rozwiązania może być nie warta efektów.

1

Czyli, biorąc pod uwagę to, co napisali @PerlMonk i @Michał Sikora - chyba najlepiej będzie postawić jakiegoś zewnętrznego SQL w firmie, a następnie do niego się dobijać zarówno z Twojej aplikacji w C, jak i z komórki.

0

Ale ja nie mam bazy danych klienta u siebie. Klient ma swoją optime, swoją bazę, swojego SQLa albo na osobnej maszynie (serwer) albo na tym samym komputerze na którym wystawia dokumenty i pracuje codziennie.

1
cerrato napisał(a):

Nie wiem, czy nie lepiej będzie jednak trzymać bazę nie na telefonie, ale na jakimś serwerze, z którym telefon będzie się łączyć.

Zdecydowanie tzreba tak zrobić, **Z **mobilka **DO **serwera, choć pierwotne pytanie sugeruje co innego.

0

Ale ja nie mam bazy danych klienta u siebie. Klient ma swoją optime, swoją bazę, swojego SQLa albo na osobnej maszynie (serwer) albo na tym samym komputerze na którym wystawia dokumenty i pracuje codziennie.

Nie rozumiemy się ;)

Najpierw pisałeś, że chcesz korzystać z SQLIte na komórce - czyli i tak chciałeś dołożyć jakąś bazę, poza "głównym" SQL na którym śmiga Optima. Tylko chciałeś to zrobić na Androidzie, a potem podłączyć tego Androida kablem do kompa i tam się dostać do tej bazy z poziomu aplikacji desktopowej własnego autorstwa. Przynajmniej tak zrozumiałem to, o czym pisałeś Jeśli coś przekręciłem/źle zrozumiałem to proszę o sprostowanie.

W każdym razie - zakładając, że jednak dobrze zrozumiałem o co Ci chodzi, to moim zdaniem lepiej będzie postawić tego "dodatkowego" SQL nie na komórce, ale na jakimś serwerze w ramach firmy (albo dostępnym online - to zależy od potrzeb). Wtedy komórka, zamiast korzystać ze swojego "wewnętrznego" SQLite, to będzie się łączyć z tym "dodatkowym" SQL. A apka desktopowa także będzie się łączyć z tą bazą (zamiast próbować się dobić do SQLite na Androidzie przez kabel).

Plus jeszcze kwestia bezpieczeństwa. Jak telefon padnie albo ktoś coś nawciska i skasuje dane to mamy problem. A "prawdziwego" SQL na jakimś serwerze możesz sobie backupować o wiele łatwiej, więc masz tez większą pewność odnośnie danych tam trzymanych.

jeśli chciałbym taką aplikację wrzucić na sklep play? Nikt przecież sobie sam API nie postawi i nie zrobi pełnej konfiguracji

Ale z drugiej strony raczej żadna firma sobie sama Optimy nie stawia, tylko się zleca to jakiejś firmie wdrożeniowej, która się na tym zna. Więc możesz po prostu stworzyć apkę, a potem przygotować instrukcję z wymogami dla wdrożeniowca - że apka potrzebuję jakąś instancję MSSQL (bo Optima chyba na tym chodzi). Wdrożeniowiec przygotowuje gołą bazę, a Ty tworzysz skrypt albo aplikację, która na tej bazie tworzy tabele. indeksy i przygotowuje do pracy. Samo zainstalowanie bazy plus zmiana kilku ustawień nie powinny być problemem dla człowieka, który się zajmuje typowo Optimą, a resztę sobie sam dopieścisz.

0

Android w ogóle jest w stanie się połączyć bezpośrednio do bazy danych na zewnątrz?

1

Ostatnio jak sprawdzałem to nie mógł i wychodzi na to, że było to dawno.

Reasumując, wszystko wskazuje na to, że gra nie jest warta świeczki. Powiedzmy, że przykładowo chce zrobić aplikację mobilną do inwentaryzacji albo do przyjmowania towaru, coś na zasadzie kolektora. Na telefonie tworzy sobie dokument i "pika" wszystko podając ilość. Podchodzi do komputera, podpina telefon pod USB, a aplikacja okienkowa wyłapuję, że został telefon podłączony, szuka odpowiedniego pliku z bazą i dokumentem i wczytuje go w odpowiednie miejsce w Optimie. Aplikację mobilną można by było pobrać ze sklepu play, a aplikację okienkową od nas. Mobilki nie trzeba konfigurować, a okienkowa może się sama automatycznie skonfigurować, a użytkownik ewentualnie tylko potwierdzi.

Zaś wasza propozycja zmusza użytkownika do bycia technicznym. Są mądre głowy, które potrafią sobie same Optimę zainstalować, zwłaszcza taką co też instaluje SQL Server i wszystko dzieje się automatycznie ale to jest ułamek ludzi i można ich policzyć na palcach jednej ręki. I teraz analogicznie do przykładu wyżej. Taki człowiek miałby sobie sam zainstalować postgresa i skonfigurować aplikację mobilną, aby się do tego postgresa połączyć, a co gorsze, to w dalszym ciągu potrzebuje na komputerze pośrednika, który te dane z postgresa wrzuci do Optimy. Trzy razy więcej roboty, trzy razy więcej możliwych pomyłek, trzy razy więcej telefonów do nas z pretensjami "czemu to nie działa".

Szkoda, że android nie pozwala na taki dostęp. Mogłoby też to być jakoś zahasłowane. Większość ludzi korzysta z czytników linii papilarnych w telefonach, więc muszą ustawić PIN. Niech taki android zapyta o ten PIN, użytkownik go wpiszę i puff, dostęp do bazy jest.

1

No to możesz jeszcze inaczej podejść do tematu. Bo teraz, jak napisałeś to mam lepszy obraz tego, co chcesz uzyskać.
W takim razie możesz - jak chciałeś pierwotnie, korzystać z wbudowanego SQLite. A w aplikacji dać przycisk "synchronizuj", który skopiuje bazę z prywatnego i bezpiecznego folderu aplikacji w jakieś miejsce współdzielone (jakiś folder na karcie pamięci/pamięci urządzenia), który będzie dostępny w komputerze po podpięciu przez USB w trybie transferu plików.
Chyba to jest to, czego Ci potrzeba.

0

Można ładnie poradzić? 😍 Dzięx

0
AdamWox napisał(a):

Można ładnie poradzić? 😍 Dzięx

Można jasno podać kontekst pytania?

1

Trochę nie podoba mi się to rozwiązanie bo to jest powrót do czasów komunikacji plikami. XIX wiek.

Nie będzie problemów z synchronizacją bo 2 różne terminale np. wygenerują to samo przyjęcie towaru? Albo wygenerują to samo zapotrzebowanie 2 razy?
Od przyjęcia dostawy na terminalu do aktualizacji stanów w Optimie mogą minąć godziny.
Dodatkowo, jeśli na terminalach będą np dokumenty WZ dla magazynierów to w ogóle nie ma to sensu.

Problemy z infrastruktura da się rozwiązać. Jeśli soft na desktop jest wasz to może się zainstalować (zwykłym instalatorem) usługa komunikacyjne na self hosted api. Odnalezienie tej usługi przez terminal chyba nie jest dużym problemem. Jakiś skan po sieci na spodziewanych portach. Albo jak się usługa komunikacyjna uruchomi to wyświetla na ekranie QR z konfiguracją i terminal sobie to skanuje (adres ip, port, api key).

0

@jacek.placek: masz rację, też sugerowaliśmy inne rozwiązanie, ale OP chce to uzyskać w wersji maksymalnie bezobsługowej - bez konieczności instalowania, konfigurowania itp. Więc - biorąc pod uwagę wszystkie wytyczne, taka (troszkę prowizorka) wersja jest optymalna.

0

Ja nie patrzę na tak dużą skalę. Ja nie mam takich firm, które mogłyby zrobić dwa razy to samo przyjęcie, albo dwa razy to samo zapotrzebowanie. To już jest kwestia organizacyjna, aby niepotrzebnie nie robić tego samego, a o to w tym wątku nie pytam. Wątek jest na temat posiadania jakichś danych i możliwości "wgrania" ich do systemu ERP. Na tę chwilę nie ma znaczenia jakie dane.

Głównie interesuje mnie jak najmniej konfiguracji. W przypadku takiego synchronizowania po USB nie ma nic do konfigurowania. Podłączasz i gotowe.

0

Da się to zrobić nawet po USB, ale po co właściwie USB? Można o wiele prościej, przeci z ludzkość wymyśliła wireless. Czy USB to jakiś wymóg konieczny? Masz kontener kabli do opuchnięcia czy jak.

1

Jakiś przykład jak to miałoby działać wireless? Czy szary użytkownik (Pani Basia lat 44) poradzi sobie z tym rozwiązaniem? Co będzie musiała skonfigurować, a czego nie? Kabel USB jest zawsze w zestawie z telefonem, więc dodatkowe akcesoria nie są wymagane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1