myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 

> Mysql, win32 - API 2 | Самая распространённая база данных

Рейтинг 5 V
Setuper
сообщение 9.3.2009, 19:37
Сообщение #61


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




DLL библиотека для работы с базой данных MySQL 5.

Версия lua: 5.1
Версия API: 2
Разрядность ОС: 32
Протестировано на PtokaX 0.4.1.1

Копирайт: Copyright © 2003-2007 Kepler Project
LuaSQL is a simple interface from Lua to a DBMS
Версия: LuaSQL 2.1.1


В связи с непонятной работой sqlite предлагаю перейти на стабильную и отчасти более функциональную базу данных.
Хоть преимуществом sqlite и является работа на локальном компьютере и легкая переносимость, однако весь мир использует mysql и надо отдать должное - mysql великолепен!


Теперь о содержимом библиотеки.
Я прикладываю rar архив. В нём dll файл libmysql.dll и папка luasql с dll файлом mysql.dll. Обе эти дллелки нужны для работы бд.
Распаковываем архив в папку, где лежит файл ptokax.exe (или в папку libs), и ничего никуда не перемещаем.
После этого запускаем скрипт для тестирования.




Основные функции для работы с mysql в lua

  • Подключение драйвера (библиотеки):
    Код
    require"luasql.mysql"

  • Инициализация драйвера (библиотеки):
    Код
    env = luasql.mysql()

  • Деинициализация драйвера (библиотеки):
    Код
    env:close()
    Возвращает true в случае успешного закрытия, false в случае, если закрытие уже было сделано до этого.




Объект - соединение (conn)

  • Метод вызова соединения с базой данных:
    Код
    conn = env:connect([имя_базы], [имя_пользователя], [пароль], [хост], [порт])
    Обязательным является только первый параметр, остальные параметры в случае отсутствия берутся по умолчанию: [имя_пользователя] = "root", [пароль] = "", [хост] = "localhost", [порт] = 3306

  • Метод закрытия соединения с базой данных:
    Код
    conn:close()
    Закрытие может быть успешным только в случае если все курсоры закрыты. Возвращает true в случае успеха, false - в случае неудачи.

  • Метод выполнения (завершения, совершения) текущей транзакции:
    Код
    conn:commit()
    Возвращает true в случае успеха, false - в случае, когда транзакция не может быть завершина или база данных не поддерживает транзакции (поддержка транзакции в mysql осуществляется с версии 4.0).

  • Метод выполнения SQL запроса к базе данных:
    Код
    conn:execute("запрос")
    В случае правильности запроса, для запросов типа SELECT возвращает курсор, для остальных запросов возвращает число столбцов или строк, успешно обработанных запросом. В случае неверного синтаксиса, или несуществующих таблиц, или несуществующих полей возвращается два значения: первое - nil, второе - сообщение с содержанием ошибки.

  • Метод отката на предыдущую транзакцию:
    Код
    conn:rollback()
    Возвращает true в случае успеха, false - в случае, когда операция не может быть выполнена или база данных не поддерживает транзакции (поддержка транзакции в mysql осуществляется с версии 4.0).

  • Метод включения/отключения автоматических транзакций:
    Код
    conn:setautocommit(boolean)
    Эта функция не может работать на базах, на которых не осуществляются транзакции. На базах данных, на которых нет понятия режима автоматических транзакций, этот механизм осуществляется драйвером. Метод возвращает true в случае успеха, и false - в случае невыполнимости или неосуществимости (поддержка транзакции в mysql осуществляется с версии 4.0).



Объект - курсор (cur)

  • Метод закрытия курсора:
    Код
    cur:close()
    Возвращает true в случае успешного закрытия, false - в случае, если этот курсор уже закрыт.

  • Метод извлечения результатов:
    Код
    cur:fetch([table[,modestring]])
    Извлекает следующий столбец с результатами. Если метод вызывается без параметров, то результаты возвращаются непосредственно вызывающему оператору. Если в первом параметре метода указана таблица, то результаты помещаются в эту таблицу, и методом возвращается эта таблица, при этом может быть использован второй параметр. Второй параметр - это строка, которая указывает на то, как создавать результирующую таблицу:
    "n" - результирующая таблица будет содержать целочисленные индексы (это значение по умолчанию);
    "a" - результирующая таблица будет содержать словесные индексы.
    Целочисленные индексы являются номерами полей в SELECT запросе. Словесные индексы являются названиями полей в SELECT запросе. Дополнительный табличный параметр является таблицей, которую нужно использовать для сохранения следующей строки запроса. В частности, это допускает использование одной уникальной таблицы для всех выборок, и такой механизм может улучшить общее выполнение выборки в целом. Нет гарантии того, что извлечённые результаты будут преобразовываться в нужные в lua типы (в зависимости от содержания), то есть это говорит о том, что возвращаемые результаты всегда представляются в виде строковых значений будь это строка или число. Метод возвращает результирующую таблицу или nil, в случае если достигнута конечная строка. Здесь нужно отметить, что этот метод может возвращать nil, но тем не менее запрос будет выполнен правильно.

  • Метод, возвращающий таблицу с именами столбцов для данного курсора:
    Код
    cur:getcolnames()

  • Метод, возвращающий таблицу с типами столбцов для данного курсора:
    Код
    cur:getcoltypes()

  • Метод, возвращающий число строк, полученных в результате запроса:
    Код
    cur:numrows()




Как работать с таблицами для достижения большей производительности

  1. По возможности все поля декларировать как NOT NULL. Это сделает работу с таблицами более быстрой и сохранит 1 бит на каждое такое поле.
  2. Применять значения по умолчанию (DEFAULT). При вызове запроса INSERT в таблицу будут записываться только те поля, значения которых отличаются от DEFAULT.
  3. Используйте настолько малые типы INT, насколько это возможно. Например, применять MEDIUMINT намного лучше, чем обычный INT.
  4. Если у вас нет записей с переменной длиной ( ни одного поля с типом VARCHAR, BLOB или TEXT), то таблица сохраняется в формате " постоянной длиной записи ". Это несколько расходует память, но намного повышает скорость работы.
  5. При использовании нескольких последовательных INSERT запросов, лучше все данные указать в одном INSERT, чем делать несколько INSERT.
  6. При загрузке данных в таблицу лучше использовать LOAD DATA INFILE, чем INSERT, такой метод в 20 раз быстрее.
  7. Для увеличения скорости LOAD DATA INFILE и INSERT нужно увеличить значение переменной key_buffer.
  8. Если ожидается много запросов INSERT или UPDATE, работающих одновременно, то для большей скорости рекомендуется приметь LOCK TABLES.
  9. Время от времени нужно дефрагметировать таблицы. Это делается утилитой isamchk с опциями - evi.



--------------------

Если у вас нет mysql сервера, то качаем его, например отсюда: http://www.mysql.ru/download/ (файл mysql-5.0.67-win32.zip)
Для удобного администрирования там же можно скачать утилиту mysqlgui-win32-static
MySQL распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор.


Архив с библиотеками под PtokaX 0.4.*.*: Прикрепленный файл  mysql.rar ( 541.42 килобайт ) Кол-во скачиваний: 1673

Скрипт примера работы с MySQL в LUA: Прикрепленный файл  mysql_test.lua ( 1.63 килобайт ) Кол-во скачиваний: 458
Go to the top of the page
+Quote Post
4 страниц V  « < 2 3 4  
Начать новую тему
Ответов
Setuper
сообщение 7.5.2011, 20:08
Сообщение #62


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Эта либа собрана на билдере 6, в котором отсутствует возможность собрать под x64.

Однако выход есть: юзать 32 разрядную птоху, тогда и либы будут подключаться big_smile.gif
Go to the top of the page
+Quote Post
mariner
сообщение 7.5.2011, 23:57
Сообщение #63


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




а илья, ты говорил есть вариант у тебя собирать на 64 бита теперь. Собери эту либу. А то у меня что-то не выходит.
Go to the top of the page
+Quote Post
Setuper
сообщение 8.5.2011, 10:17
Сообщение #64


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Я же написал, что при помощи борландовского билдера под win64 собрать не могу
Go to the top of the page
+Quote Post
mariner
сообщение 8.5.2011, 11:24
Сообщение #65


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




а студии у тебя нет, так?
Go to the top of the page
+Quote Post
Setuper
сообщение 8.5.2011, 12:05
Сообщение #66


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ага Borland Developer Studio у меня нету, да и ставить эту штуку нет желания.
Go to the top of the page
+Quote Post
mariner
сообщение 8.5.2011, 12:43
Сообщение #67


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




нене, я про VS
Go to the top of the page
+Quote Post
Setuper
сообщение 8.5.2011, 15:54
Сообщение #68


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




vs не может компилить борландовские omf либы, vs компилит coff либы, а птоха использует именно omf либы, ибо птоха собрана борландовским компилятором
Go to the top of the page
+Quote Post
mariner
сообщение 8.5.2011, 16:43
Сообщение #69


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




а что тогда может 64х битные omf либы
Go to the top of the page
+Quote Post
Setuper
сообщение 8.5.2011, 18:01
Сообщение #70


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Borland Developer Studio
Go to the top of the page
+Quote Post
Sergey613
сообщение 8.10.2012, 17:05
Сообщение #71


Активный участник
***

Группа: Пользователи
Сообщений: 71
Регистрация: 8.4.2009
Пользователь №: 2 982
Спасибо сказали: 1 раз




Синтаксис error loading module 'luasql.mysql' from file 'C:\Users\GSG\Downloads\0.4.2.0-x64\luasql\mysql.dll':
%1 не является приложением Win32.
Go to the top of the page
+Quote Post
Alexey
сообщение 8.10.2012, 21:47
Сообщение #72


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Версия Lua: 5.1/5.2
Версия API: 2
Разрядность ОС: 32/64
Версия: LuaSQL 2.3.0
Совместимость: PtokaX 0.4.2.0 build 376 и новее

Выложенные ранее в этой теме библиотеки не будут работать на PtokaX 0.4.2.0 и новее. Для работы с MySQL на PtokaX 0.5.0.0 нужны вот эти:
Прикрепленный файл  LuaSQL_2.3.0_git9.4.2012__MySQL_5.5.22.7z ( 1.03 мегабайт ) Кол-во скачиваний: 27
Прикрепленный файл  LuaSQL_2.3.0_git9.4.2012__MySQL_5.5.22_x64.7z ( 1.01 мегабайт ) Кол-во скачиваний: 23
Go to the top of the page
+Quote Post
darkangel17
сообщение 20.2.2013, 14:50
Сообщение #73


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 1.3.2009
Из: Bratsk
Пользователь №: 2 421
Спасибо сказали: 0 раз




На 0.5.0.0 с этими библиотеками ошибки в скриптах Webstats и ChatLogsMySQL

[20:06:47] Синтаксис G:\Ptokax_new\scripts\stats.lua:12: attempt to index global 'luasql' (a nil value)
[20:06:58] Синтаксис G:\Ptokax_new\scripts\chatlogsmysql.lua:77: attempt to index global 'luasql' (a nil value)

Если переместить из папки tests файл mysql.lua получаем такую ошибку при запуске обоих скриптов

[20:29:35] Синтаксис G:\Ptokax_new\scripts\luasql\mysql.lua:8: bad argument #1 to 'insert' (table expected, got nil)
Go to the top of the page
+Quote Post
Alexey
сообщение 20.2.2013, 18:26
Сообщение #74


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Замени в тех скриптах код подключения библиотеки
Код
require "luasql.mysql"

на
Код
local luasql = require"luasql.mysql"


Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 4.3.2014, 0:31
Сообщение #75


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 141
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 3 раза




Создавая новую БД командой:
Код
CREATE DATABASE IF NOT EXISTS `имя_базы`;

получаю только названия БД строчными буквами.
Вопрос: как создать БД в названии которой имеются и прописные буквы (например, такое название "PeopleNames", но не "peoplenames")?
Go to the top of the page
+Quote Post
HackFresse
сообщение 4.3.2014, 10:42
Сообщение #76


Продвинутый участник
****

Группа: Пользователи
Сообщений: 155
Регистрация: 11.1.2009
Пользователь №: 1 772
Спасибо сказали: 29 раз




Рекомендуется использовать имена таблиц именно в нижнем регистре (таблицы хранятся в файлах, а имена файлов регистрозависимы в *nix), для разруливания этого есть параметр lower_case_table_names , http://dev.mysql.com/doc/refman/5.1/en/ide...ensitivity.html



Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 26.3.2014, 10:33
Сообщение #77


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 141
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 3 раза




Чем грозит незакрытие курсора cur:close() – ведь работает и так?..
Мне не совсем очевидна необходимость его закрытия.
Go to the top of the page
+Quote Post
Setuper
сообщение 26.3.2014, 15:40
Сообщение #78


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




К сожалению в отличие от Lua, в котором есть GC, СИ не может похвастаться такой фичей, поэтому для освобождения памяти нужно вызывать со стороны Lua закрытие курсора.
На пару вызовов закрытие практически никак не скажется, но если курсор юзать в каком-нибудь цикле, то может рано или поздно закончиться память big_smile.gif


Спасибо сказали:
Go to the top of the page
+Quote Post
Alexey
сообщение 2.6.2014, 15:11
Сообщение #79


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Библиотека для работы с базой данных MySQL на PtokaX 0.5.0.2:
Прикрепленный файл  LuaSQL_2.3.0_MySQL_5.6.15.7z ( 1.27 мегабайт ) Кол-во скачиваний: 6
Прикрепленный файл  LuaSQL_2.3.0_MySQL_5.6.15_x64.7z ( 1.27 мегабайт ) Кол-во скачиваний: 8

Библиотека для работы с базой данных MySQL на PtokaX 0.5.0.3:
Прикрепленный файл  LuaSQL_2.3.0_MySQL_5.6.23.7z ( 1.27 мегабайт ) Кол-во скачиваний: 10
Прикрепленный файл  LuaSQL_2.3.0_MySQL_5.6.23_x64.7z ( 1.27 мегабайт ) Кол-во скачиваний: 13
Go to the top of the page
+Quote Post
Kinsler
сообщение 19.8.2017, 8:59
Сообщение #80


Абсолютный новичок


Группа: Пользователи
Сообщений: 8
Регистрация: 4.5.2013
Пользователь №: 11 499
Спасибо сказали: 11 раз




\scripts\BashMySQL.lua:46: attempt to index global 'luasql' (a nil value)
Собственно, require("luasql.mysql") библиотека подключается, но ошибка вылазиет тут: env = luasql.mysql()
Перепробовал уже разные версии птоки. Скачал 0.5.0.3 и библиотеки из поста выше. Распаковывал в папку libs - ошибка. Перекладывал рядом с Ptokax.exe - ошибка. Копировал и туда и сюда одновременно - ошибка. Менял директории расположения папки с хабом - ошибка. Установлена связка: Апач -- php -- mysql-5.0.67-win32 -- phpmyadmin
База работает, доступ через скрипт есть. Базу под скрипт создал, привилегии пользователю выставил.

Система:
WIN 7 Enterprise x64

Помогите уже чем-нибудь, сломал весь мозг, что ещё такого сотворить, чтобы скрипт подключал библиотеку?

P.S. Вопрос закрыт. Внимательность ещё раз внимательность... big_smile.gif
Go to the top of the page
+Quote Post

4 страниц V  « < 2 3 4
Ответить в данную темуНачать новую тему
9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts lua mysql
4 shadow3c 9 416 20.8.2014, 20:33 Посл. сообщение: shadow3c
No New Posts Topic has attachmentsmysql
RusHub | Библиотека базы данных mysql
8 Setuper 21 905 18.8.2014, 4:05 Посл. сообщение: shadow3c
No New Posts Mysql
Unix | База данных
11 Jaska 22 340 21.9.2013, 18:17 Посл. сообщение: KCAHDEP
No new Эффективность mysql
текстовый файл или mysql?
23 Iskandark 22 914 29.12.2011, 9:47 Посл. сообщение: mariner
No New Posts Скрипт антимат и антиреклама с базой в Mysql
1 Vizunchik 7 228 7.12.2011, 20:17 Посл. сообщение: Ksan
No New Posts RusHub and MySQL?! есть ли и как ...
вопросы про mysql, md5 hash и т.д.
4 DRUG_ADDICT 10 115 3.4.2011, 7:03 Посл. сообщение: alex82
No New Posts Topic has attachmentsCustomLocations + MySQL
Определяем провайдера по IP-адресу
0 alex82 7 150 7.3.2011, 18:39 Посл. сообщение: alex82
No New Posts Релизы/Заказы с MySQL
API 2 | MySQL
0 Kingston 5 466 6.2.2011, 10:08 Посл. сообщение: Kingston
No New Posts Topic has attachmentsУстановка и настройка Ubuntu 10.04 под PtokaX 4.1.2 с MySQL. Финал.
Инструкция для новичков в Линуксе
11 TiGRpp 29 454 2.9.2010, 5:09 Посл. сообщение: TiGRpp
No new Topic has attachmentsПоиск по TTH на MySQL
18 Lesh™ 21 644 15.8.2010, 12:40 Посл. сообщение: Lesh™
No New Posts От: Поиск по TTH на MySQL
От темы с ID: 3549
1 Lesh™ 6 697 14.7.2010, 0:30 Посл. сообщение: Lesh™
Closed Скрипт для внесени в данных в MySQL прям из чата командой.
Нужно маленький скриптик который будет экспортировать определенный тек
1 DEN 007 6 370 4.7.2010, 9:45 Посл. сообщение: Setuper
No New Posts От: Заявки на перевод скриптов под MySQL
От темы с ID: 1824
0 alev 5 393 25.4.2010, 12:05 Посл. сообщение: alev
No New Posts От: mysql
От темы с ID: 2952
3 derSpinner 6 623 13.4.2010, 11:41 Посл. сообщение: Setuper
No New Posts ВАЖНО: Topic has attachmentsЗаявки на перевод скриптов под MySQL
5 Wariner 13 832 4.4.2010, 15:18 Посл. сообщение: Accelerator

 



RSS Сейчас: 23.11.2024, 6:53