|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
|
Java sqlite android and jdbc multithreading client server30.08.2017, 08:58. Показов 2257. Ответов 14
Всем здравствуйте!
Пишу клиент-серверное приложение на Java с использованием socket`ов и разбираюсь с sqlite базой данных. Я хочу сделать архитектуру клиент-серверного приложения многопоточной. Клиенты - это Java приложения со встроенным механизмом работы с sqlite (Android) На стороне сервера из Java работаю с sqlite базой данных через JDBC интерфейс (Windows) Если позволите, несколько вопросов сразу в этом топике: 1. Никак не могу разобраться какие функции мне предоставляет "из коробки" sqlite и как ими пользоваться из java через jdbc и под Android для достижения многопоточного доступа к базе. Искал в сети, но ничего внятного не нашел ... одни упоминания, что есть несколько режимов работы с sqlite, которые можно включить при компиляции, либо при создании подключения к базе, но как их задействовать из Java я не понял. Я думал использовать пул соединений с sqlite. И пул потоков. То есть, создать заранее несколько открытых соединений с sqlite и несколько потоков и когда "придет" клиент, отдать уже существующее соединение с базой в уже созданном отдельном потоке. Сейчас при попытке обращения из нескольких потоков с разными соединениями ИНОГДА получаю сообщение о том, что база занята и файл заблокирован. (Например, один поток делает INSERT INTO ... , а другой SELECT * ... ) Я хочу понять, должен ли я средствами Java обеспечивать блокировку потоков при обращении к базе, или же можно как то на уровне драйвера решить этот вопрос ? Интуиция подсказывает, что раз база данных это просто файл, то как то так должно и быть ... то есть, файл блокируется при записи на уровне файловой системы операционки. Тогда, мне не понятно, о каких режимах многопоточного доступа идет речь ??? И в целом такая архитектура имеет право на жизнь или же она изначально не состоятельна? Где каждый клиент может иметь несколько подключений к базе и где на сервере с этой базой данных имеется пул соединений и пул потоков для обслуживания запросов от этих самых клиентов. И еще вопрос: 2. Как лучше сделать вставку SELECT`ом сразу нескольких строк в таблицу в sqlite ? Через циклы for\while со statement.executeUpdate(sql) внутри цикла получается долго. В библиотеке под Android есть объект ContentValues и функция db.insert() которая поддерживает множественную вставку. А как тут добиться быстродействия ? То есть, как собрать запрос к базе в цикле в String переменную, например, а потом в каком нибудь preparedSatement его отдать базе? ( Голова квадратная от многопоточности и не могу сообразить ... ) Буду рад любому мнению и совету, может, кто сталкивался и знает как это все правильно готовить. Единственная просьба, другой инструментарий не предлагать, нужна именно связка sqlite + java. Сам знаю, что глупость полная использовать sqlite для сервера, но надо
0
|
|
| 30.08.2017, 08:58 | |
|
Ответы с готовыми решениями:
14
client/server для android phone <-> pc на java Socket Android Client and Java Socket Server Android, client-server |
| 30.08.2017, 11:32 | ||||
|
так как в пункте 1 нет вопроса по существу, отвечу так
рекомендую кроме книжки по SQLITE открыть книжку по SQL
0
|
||||
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
||||
| 30.08.2017, 11:51 [ТС] | ||||
|
уставшибыл, опечатка ![]() Добавлено через 2 минуты Не нашел я толкового описания какими именно функциями переключать режимы БД. Если не сложно, дайте ссылку или кусок кода с кратким описанием. Добавлено через 1 минуту
0
|
||||
| 30.08.2017, 11:56 | ||||
|
по поводу вставки - в SQL есть одна конструкция для вставки - INSERT
она вставляет одну строку как вам добиться быстродействия в рамках конкретного языка - это вопрос на знание языка не забывайте про блокировки и ожидания по поводу справки ЗЫ почему бы вам сразу не сказать что вам нужно? в первом сообщении нужно описывать что у вас есть что нужно получить какие проблемы появились Добавлено через 1 минуту
0
|
||||
|
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
|
||
| 30.08.2017, 12:39 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
|||||||
| 30.08.2017, 13:26 [ТС] | |||||||
|
Тут описывается несколько вариантов работы с БД sqlite. Я про эти режимы ![]() Как это менять с помощью методов из Java под Android или через JDBC интерфейс. У меня есть приложение под Android (client) и сейчас я пишу приложение на Java под Windows (server). Общаются они через сокеты (tcp socket). Проблему описал. Разруливается ли многопоточный доступ средствами sqlite или же нужно это делать на уровне языка, в данном случае Java ? Не в один же поток писать в sqlite ... можно, скажем, писать в базу в один поток и читать в несколько. Мне нужно понять как использовать для этого средства самой БД. Добавлено через 1 минуту Добавлено через 12 минут Не по теме: Раз, и тема переехала ))) Волшебство :)
0
|
|||||||
| 30.08.2017, 16:27 | |||||
|
например MSSQL имеет свои средства
0
|
|||||
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
||||
| 30.08.2017, 16:39 [ТС] | ||||
|
insert into <название таблицы> values (<Значение>,...) insert into <название таблицы> select <имя столбца>,... from <название таблицы> insert into <название таблицы> set <имя столбца1> = <значение2>, <имя столбца2> = <значение2>... ... Чеснто стащил из Вики Добавлено через 1 минуту Руками писать такое, хм, сложновато ))) Добавлено через 2 минуты
0
|
||||
| 30.08.2017, 16:40 | ||
![]() в делфи пробовал многопоточную запись в SQLIte - 300 строк в 6 потоков. работает правда размер подрастает, но у меня и так БД была маленькая если делать серьезный проект, то нужны тесты на максимальную нагрузку
0
|
||
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
|||
| 30.08.2017, 16:42 [ТС] | |||
![]() Добавлено через 1 минуту
0
|
|||
| 30.08.2017, 16:43 | ||
|
во втором "как лучше" это не вопрос, один тебе скажет так, а другой по другому - и оба будет правы так как условия отличные.
0
|
||
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
|||
| 30.08.2017, 16:48 [ТС] | |||
|
Добавлено через 2 минуты А что касается "как лучше", то это то же конкретный вопрос. Каждый может поделиться опытом и мнением, я сделаю выборку по своему критерию SELECT ... и получу нужный результат ))) Добавлено через 52 секунды Или нужно голосование сделать с выбором вариантов ?)))) Как в ЕГ )
0
|
|||
|
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
|
|
| 30.08.2017, 19:02 | |
|
teapotpro, это плохо шарить бд наружу, она должна быть доступна максимум в интрасети, пиши приложение, которое будет работать с бд и сделай в нем rest api, которое будет использоваться в клиентских приложениях
1
|
|
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
|
||
| 30.08.2017, 20:05 [ТС] | ||
|
В этом есть плюсы, спасибо, за совет, LeX. Чуть позже задумаюсь над этим.
0
|
||
|
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
|
||
| 30.08.2017, 20:41 | ||
|
0
|
||
| 30.08.2017, 20:41 | |
|
Помогаю со студенческими работами здесь
15
Android client <-Wi FI-> PC server Client(android) - Server (PC) Client(Android) - Server(Delphi) Client(android) - Server (PC) - Delphi
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|