Урок 34. Хранение данных. SQLite

Обсуждение уроков
Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение neoksi » 20 окт 2012, 16:46

Пора создавать статью стандартных архитектур приложений, а то страшно становиться ;)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 20 окт 2012, 17:13

rezak90 писал(а):а можно не скромный вопрос? Архитектуру приложения вы придумывали или вам просто дали задание и делай как хочешь? Просто ODBC в андроиде это извращенство. Обращаться на прямую к sqlserver'y в андроиде, та и вообще в мобильных платформах не принято. Для этого дела на сервере создаётся апи, и все функции и обращения к бд на себя берёт сервер дабы не использовать ресурсы мобильного телефона. Если в самой java odbc/jdbc это ещё круто, то в андроиде это минное поле)))
Ладно, я отклонился от темы. На сколько я понял то это вам нужно будет не стандартными способами (не так как с SQLite), так как там свои java классы, а андроид не имеет своих классов для работы с jdbc/odbc.
А дайте, пожалуйста, ссылку, где описано это более подробно? Что значит извращенство?
Все действия будет делать сервер, конено же, мне нужно лишь получить данные (курсор) и отправить данные (отправляемых будет не так много). Остальная математика будет делаться на локальной базе, храниться в локальных таблицах. На сервер будет сбрасываться конечная информация, так сказать (готовый документ).
Я под анродит никогда не писала, тяжело перестроиться, времени не дали, надо хоть как-то сделать. Потом можно будет переделать уже "по правильному" (сама так люблю, но что делать..)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 20 окт 2012, 17:26

легче всего сделать на серваке апи и обращаться к нему. Но мы не ищем лёгких путей =)
Погуглил немножко и понял что odbc драйвера под андроид нету (может я и ошибаюсь). Народ рекомендует подключаться к sqlserver'y через jtds драйвер http://stackoverflow.com/questions/7631 ... in-android
По сути если вы уже работали с Java и JDBC, то должно быть легко, так как в андроиде так же само происходит подключение.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 20 окт 2012, 19:16

rezak90 писал(а):легче всего сделать на серваке апи и обращаться к нему. Но мы не ищем лёгких путей =)
Погуглил немножко и понял что odbc драйвера под андроид нету (может я и ошибаюсь). Народ рекомендует подключаться к sqlserver'y через jtds драйвер http://stackoverflow.com/questions/7631 ... in-android
По сути если вы уже работали с Java и JDBC, то должно быть легко, так как в андроиде так же само происходит подключение.
ну так я его (JDBC) и назвала сразу (см.реплика выше), я уже это поискала.
Я не работала с джавой, а из другого языка по odbc во всю с сиквелом работали, нормально. Думаю, что тут так же..
Вы меня не пугайте сильно :shock: , а то мне все это уже неделю снится ;) , во сне какие-то планы строю, думаю как сделать)) а оно все не получается, простые вещи из рук валятся.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 20 окт 2012, 19:20

neoksi писал(а):Пора создавать статью стандартных архитектур приложений, а то страшно становиться ;)
Вы пишите, вам воздастся.
Лично я безмерно благодарна, что кто-то находится на идиотские вопросы отвечать, надеюсь, вы это чувствуете)))
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 20 окт 2012, 22:44

ну в общем пробуйте сначала драйвер подключить, если ошибок не будет то пробуйте коннектиться к серверу, а там уже будет видно. Как это делается примеров куча.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 21 окт 2012, 21:05

rezak90 писал(а):ну в общем пробуйте сначала драйвер подключить, если ошибок не будет то пробуйте коннектиться к серверу, а там уже будет видно. Как это делается примеров куча.
Я соединилась, ура! (целый выходной убила), но пока не так, как мне нужно.
Кто-нибудь подскажет, куда дальше копать?
Я пыталась соединиться, но у меня ничего ен получалось, выдается ошибка на строках

Код: Выделить всё

Connection conn = DriverManager.getConnection(
"jdbc:jtds:sqlserver://localhost:1433/baza","user", "pswrd");
Т.к. я чайник, я долго пинала этот код то под кнопочку, то под onCreate, и ничего не поняла в тех ошибках, что мне выдавал томкэт.
Я взяла и создала новый проект java (без приблуд, для винды) в эклипсе, и код мой прошел, соединение с базой есть и данные выбираются!!
Но что делать с андроидом? почему из эмулятора программа закрывается с ошибкой - не знаю :(
Я проверила манифест, там у меня вот что

Код: Выделить всё

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Библиотека подключена, ругается именно на эту строку (выше). Может быть еще что-то нужно?
Последний раз редактировалось Foenix 22 окт 2012, 21:46, всего редактировалось 1 раз.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 34. Хранение данных. SQLite

Сообщение KamiSempai » 21 окт 2012, 22:02

А где сама база находится? И почему перед словом baza стоит запятая?
И на сколько я знаю localhost в андроиде не применим, в интернете советуют использовать "10.0.2.2".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 21 окт 2012, 22:36

На localhost точно не подключитесь. Ну а что касается ошибки, так вы бы сказали что за ошибка, то что подчёркивает ту строку ни о чём не говорит, а телепаты в отпуске =)
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 21 окт 2012, 23:30

KamiSempai писал(а):А где сама база находится? И почему перед словом baza стоит запятая?
И на сколько я знаю localhost в андроиде не применим, в интернете советуют использовать "10.0.2.2".
да, запятой там нету, конечно же. И про телепатов - это мне правильно. Вот текст ошибки.
10-21 17:50:50.457: E/AndroidRuntime(4353): FATAL EXCEPTION: main
10-21 17:50:50.457: E/AndroidRuntime(4353): android.os.NetworkOnMainThreadException
10-21 17:50:50.457: E/AndroidRuntime(4353): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
10-21 17:50:50.457: E/AndroidRuntime(4353): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:74)
10-21 17:50:50.457: E/AndroidRuntime(4353): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
10-21 17:50:50.457: E/AndroidRuntime(4353): at libcore.io.IoBridge.connect(IoBridge.java:112)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.net.Socket.startupSocket(Socket.java:566)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.net.Socket.tryAllAddresses(Socket.java:127)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.net.Socket.<init>(Socket.java:177)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.net.Socket.<init>(Socket.java:149)
10-21 17:50:50.457: E/AndroidRuntime(4353): at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:263)
10-21 17:50:50.457: E/AndroidRuntime(4353): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:318)
10-21 17:50:50.457: E/AndroidRuntime(4353): at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.sql.DriverManager.getConnection(DriverManager.java:175)
10-21 17:50:50.457: E/AndroidRuntime(4353): at java.sql.DriverManager.getConnection(DriverManager.java:209)
...
Я решила проблему, пока тут никого не было..
Дело в том, что простая подстановка 10.0.2.2 тоже не подходила. Я почитала в сети, что соединения так же не может быть из-за того, что с третьей версии ввели полиси (там в тексте ошибки видно слово AndroidBlockGuardPolicy), что нельзя соединяться с удаленной бд в главном потоке. Сделала еще один поток - запустила это дело в нем, но тоже меняла и адреса и слова - ничего не получалось.
Затем, переделала запуск под андроид 2.1 - попыталась в нем - там ошибка чуточку по-другому выдается.
10-21 19:20:49.138: W/System.err(414): java.sql.SQLException: Network error IOException: localhost/127.0.0.1:1433 - Connection refused
10-21 19:20:49.147: W/System.err(414): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:417)
10-21 19:20:49.147: W/System.err(414): at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
10-21 19:20:49.147: W/System.err(414): at java.sql.DriverManager.getConnection(DriverManager.java:191)
10-21 19:20:49.147: W/System.err(414): at java.sql.DriverManager.getConnection(DriverManager.java:226)
10-21 19:20:49.147: W/System.err(414):
Затем я еще очень хорошо подумала-подумала, что локалхосты это все-таки не очень, и заменила в эмуляторе hosts - подставила там 10.0.2.2 localhost.
И на этом все заработало - и с потоками и без!
Теперь попробую запустить на 4.0
В общем, я решила сегодня спать не ложиться пока не соединюсь, но вижу уже, что спать все-таки лягу и буду спать очень хорошо )))
Последний раз редактировалось Foenix 22 окт 2012, 21:46, всего редактировалось 1 раз.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 34. Хранение данных. SQLite

Сообщение KamiSempai » 21 окт 2012, 23:48

Olivka писал(а):И на этом все заработало - и с потоками и без!
На эмуляторе работает, а на реальном устройстве?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 21 окт 2012, 23:59

KamiSempai писал(а):
Olivka писал(а):И на этом все заработало - и с потоками и без!
На эмуляторе работает, а на реальном устройстве?
эх, да в том-то и дело, что реального устройства у меня нету..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 22 окт 2012, 00:01

Olivka
Любая сетевая активность должна быть в отдельном потоке.
P.S. Если вы используете Tomcat, то почему бы не использовать на самом сервере jsp, и с приложение связываться со страницей jsp которая уже делает с бд что захотите. Это будет в пару строк и делается за пару минут, чем тот велосипед который вы пытаетесь изобрести. Извините если не в тему -(.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 22 окт 2012, 00:35

rezak90 писал(а):Olivka
Любая сетевая активность должна быть в отдельном потоке.
P.S. Если вы используете Tomcat, то почему бы не использовать на самом сервере jsp, и с приложение связываться со страницей jsp которая уже делает с бд что захотите. Это будет в пару строк и делается за пару минут, чем тот велосипед который вы пытаетесь изобрести. Извините если не в тему -(.
Я уже второй раз прошу -дайте ссылку, где об этом почитать, а вы все не даете.. а то в паре строк не понятно. Я так не могу оценить что лучше и что хуже. мне с удаленной базой ничего делать не нужно -только данные взять и положить. Остальное будет делаться и так на сервере, или вы что-то другое имеете ввиду?

Посмотрела в вики что такое jsp. ЭТо ж целая вебиндустрия, мне туда лезть сейчас не хочется и это для меня не две строчки кода. В любом случае, если использоваться active pages, то тогда они у нас будут точно не на джаве, а на другом "загадночном и интересном", но я не хочу к нему возвращаться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 22 окт 2012, 07:56

Ну как хотите, и как раз там всё на джаве. Ссылочку просили, но сомневаюсь что поможет: http://habrahabr.ru/post/108973/
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 22 окт 2012, 08:32

rezak90 писал(а):Ну как хотите, и как раз там всё на джаве. Ссылочку просили, но сомневаюсь что поможет: http://habrahabr.ru/post/108973/
:) это шутка?
не знаю, как может один человек в этом разобраться и за какое время - у меня оно ограничено, это ж простая программа, а не целый конгломерат по приему оплаты. Я все делаю на Андроиде его средствами, исключительно с сервера данные буду брать и туда сохранять "резервно", скажем так.
Народ командами над таким работает, а я одна тут, помочь не кому, вся ответственность на мне, поэтому выбираю то, с чем возможно смогу справиться..
Я и так тут смотрю на ошибки в Эклипсе как баран на новые ворота - одна ошибка - полэкрана красных строк..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 22 окт 2012, 09:37

Вы близко воспринимаете к сердцу это всё. У меня вчера ушло на написания такого дела 30 минут, и мне тоже нужно было всеголишь два запроса делать к бд, зато всё красиво и качественно. Ну да ладно, закрыли этот вопрос. Это я просто показываю вам что это дело можно решить на много проще.
R.id.team
Политика на форуме запрещена

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение neoksi » 22 окт 2012, 09:53

Olivka
Подключаться напрямую к удаленной базе плохо с точки зрения безопасности и на хороших серверах это запрещено администраторами.
rezak90 говорит дело, реализуйте простой web-api например на php, который уже будет реализовывать на удаленном сервере работу с сервером БД, а вы ему из своей программы отправляйте простые http запросы, так вы избежите много проблем.
П.С. У меня лично таким образом все сделано и работает просто супер, ежеминутно обрабатывается более 600 запросов синхронизаций.
Olivka писал(а):...
Народ командами над таким работает, а я одна тут, помочь не кому, вся ответственность на мне, поэтому выбираю то, с чем возможно смогу справиться..
Я и так тут смотрю на ошибки в Эклипсе как баран на новые ворота - одна ошибка - полэкрана красных строк..
В реальности над таким работают редко целыми командами, и бывалые советуют как проще, отговаривая тебя от использования прямого подключения к БД :)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 22 окт 2012, 14:30

Я не близко воспринимаю, я в данной ссылке ничего не поняла. Чтобы во всем разобраться нужна более серьезная литература, чем статья, где для меня ни одного знакомого слова. Поэтому ваше предложение, может оно и правильное, но сорри - без доказательств.
Напрямую к бд подключались и будут подключаться, не вижу причин не подключаться по вайфай, имхо тут без разницы - что из сети, что из интернета, что из вайфая - тут админы должны сказать за или против. Ни они, ни начальство не против. Более того - начальство даже настаивает на том, чтобы подключение было. А правильно или нет - я напишу, постараюсь как можно быстрее, и все - пусть что хотят то и делают. Если аргумент один - безопасность, или второй - некрасиво, то для меня это не аргумент..


Кроме того, это вебапи, насколькоя поинмаю - можно организовать на любом языке, или я не права? я об этом и писала. Они пишут там на другом языке (не веб), поэтому и мне придется, но я не хочу.
кто платит тот и музыку закаызывает.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 22 окт 2012, 14:35

Первый раз вижу что бы начальство диктовало разработчику как делать. Разработчик делает то что требует заказчик, а то как это сделать он решает сам лично, ведь ему делать а не началству. Начальство лишь должно удостоверится что вы не лепите велосипед.
Опять от темы отклонились. Ну так что получилось уже что то или нет?
R.id.team
Политика на форуме запрещена

Ответить