Sign in to follow this  
Followers 0
DEST

Учимся работать с SQLite (функции)

1 post in this topic

Для начала следует определиться, а что такое SQLite?

SQLite - это встраиваемая кроссплатформенная БД, которая поддерживает достаточно полный набор команд SQL и доступна в исходных кодах (на языке C).

Ну а теперь перейдем к функциям:

Спойлер

Данная фукция открывает указанную базу данных.

Пример использования:


// Открываем базу данных, находящуюся в файле "example.db"
new DB:db = db_open("example.db");  

 

 


Спойлер

Данная функция закрывает указанную базу  данных.

Пример использования:


// Работа с БД завершена, закрываем ее для сохранения данных на диск
db_close(db);

 

 


Спойлер

Посылает SQL-запрос указанной базе данных.

Пример использования:


new DB:db = db_open("example.db");
 
db_query(db, "CREATE TABLE users (name VARCHAR(24), kills INTEGER, deaths INTEGER, money INTEGER)");
db_query(db, "INSERT INTO users VALUES('Vasya_Pupkin', 100, 50, 300000)");
 
db_close(db);

 

 


Спойлер

Удаляет из памяти результат того или иного запроса к БД, выполненного посредством db_query.

Пример использования:


new DB:db = db_open("example.db");
new DBResult:dbresult;
  
dbresult = db_query(db, "SELECT * FROM my_table ");
  
// Далее следуют какие-то манипуляции с данными
// ...
  
db_free_result(dbresult);
  
db_close(db); 

 

 


Спойлер

Позволяет узнать количество строк результата запроса.

Пример использования:


new DB:db = db_open("example.db");
new DBResult:dbresult;
new rows;
  
dbresult = db_query(db,"SELECT * FROM my_table");
rows = db_num_rows(dbresult);
printf("В таблице %d строк", rows);
  
db_free_result(dbresult);
db_close(db);  

 

 


Спойлер

Позволяет узнать количество полей результата запроса.

Пример использования:


new DB:db = db_open("example.db");
new DBResult:dbresult;
new fields;
  
dbresult = db_query("SELECT * FROM my_table");
fields = db_num_fields(dbresult);
printf("В таблице %d полей", fields);
  
db_free_result(dbresult);
db_close(db);

 

 


Спойлер

Выполняет переход к следующей строке результата SQL-запроса.

Пример использования:


public OnPlayerCommandText(playerid, cmdtext[])
{
    if (!strcmp(cmdtext, "/topkillers", true, 11))
    {         
        new DB:userdb;
        new DBResult:result;
        new message[50];
        userdb = db_open("users.db");
        result = db_query(userdb, "SELECT * FROM `users` ORDER BY `kills` DESC LIMIT 10");
        SendClientMessage(playerid, 0x00FFFFFF, " Топ 10 игроков по количеству убийств:");
        for (int i; i < 10; i++)
        {
            db_get_field_assoc(result, "name", message, sizeof(message));
            format(message, sizeof(message), "   %d. %s", i + 1, message);
            SendClientMessage(playerid, 0xFFFFFFFF, message);
            db_next_row(result);
        }
        db_free_result(result);
        db_close(userdb); 
        return 1;
    }
    return 0;
}

 

 


Спойлер

Позволяет узнать название поля результата по его порядковому номеру.

Пример использования:


new DB:userdb = db_open("users.db");
new DBResult:dbresult;
new fields;
new name[30];
  
dbresult = db_query(userdb, "SELECT * FROM `users`");
fields = db_num_fields(dbresult);
  
// Выводим названия всех полей таблицы 'users'
for (new i; i < fields; i++)
{
    db_field_name(dbresult, i, name, sizeof(name));
    printf("поле №%d: %s", i, name);
}
  
db_free_result(dbresult);
db_close(userdb);

 

 


Спойлер

Позволяет узнать содержимое поля результата по его порядковому номеру.

Пример использования:


public OnPlayerCommandText(playerid, cmdtext[])
{
    if (!strcmp(cmdtext, "/stats", true, 6))
    {
        new DB:userdb = db_open("users.db");
        new DBResult:dbresult;
        new name[MAX_PLAYER_NAME];
        new buffer[100];
  
        GetPlayerName(playerid, name, MAX_PLAYER_NAME);
        format(buffer, sizeof(buffer), "SELECT `kills`,`deaths`,`money` FROM `users` WHERE name=lower('%s')", name);         
        dbresult = db_query(userdb, buffer);
  
        // Узнаем значения каждого из 3х запрошенных полей: kills, deaths, money
        // Их нумерация начинается с нуля
        db_get_field(dbresult, 0, buffer, sizeof(buffer));
        format(buffer, sizeof(buffer), " Убийств: %d", strval(buffer));
        SendCLientMessage(playerid, 0x00FF00FF, buffer);
        db_get_field(dbresult, 1, buffer, sizeof(buffer));
        format(buffer, sizeof(buffer), " Смертей: %d", strval(buffer));
        SendCLientMessage(playerid, 0x00FF00FF, buffer);
        db_get_field(dbresult, 2, buffer, sizeof(buffer));
        format(buffer, sizeof(buffer), " Всего денег: %d", strval(buffer));
        SendCLientMessage(playerid, 0x00FF00FF, buffer);
  
        db_free_result(dbresult);
        db_close(userdb);
    }
}

 

 


Спойлер

Позволяет узнать содержимое поля результата по его имени.

Пример использования:


public OnPlayerCommandText(playerid, cmdtext[])
{
    if (!strcmp(cmdtext, "/topkillers", true, 11))
    {         
        new DB:userdb;
        new DBResult:result;
        new message[50];
        userdb = db_open("users.db");
        result = db_query(userdb, "SELECT * FROM `users` ORDER BY `kills` DESC LIMIT 10");
        SendClientMessage(playerid, 0x00FFFFFF, " Топ 10 игроков по количеству убийств:");
        for (int i; i < 10; i++)
        {
            db_get_field_assoc(result, "name", message, sizeof(message));
            format(message, sizeof(message), "   %d. %s", i + 1, message);
            SendClientMessage(playerid, 0xFFFFFFFF, message);
            db_next_row(result);
        }
        db_free_result(result);
        db_close(userdb); 
        return 1;
    }
    return 0;
}

 

На этом все! Автор: samp-wiki & Amfy

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • NNN
      By NNN
      Поставил эту http://pawno-rus.ru/topic/1034-sistema-reporta/ систему репорта со всеми доработками, в компиляторе высвечиваются эти ошибки:
      loose indentation error 017: undefined symbol "AddMessage" warning 215: expression has no effect error 001: expected token: ";", but found "]" error 029: invalid expression, assumed zero fatal error 107: too many error messages on one line первое предупреждение из за корявости скрипта (loose indentation) а вот с остальными не знаю)
    • Leo_Carter
      By Leo_Carter
      Такая проблема то что я пишу мод с нуля и когда почти мод был готов, я решил его залить на хостинг, ну там есть подключение к mysql и всё подобное, только вот залил на хостинг, запускаю и у меня вот такие дебаги вылезают и сервер Unknown

       
      Loaded log file: "server_log.txt". ---------- SA-MP Dedicated Server ---------------------- v0.3.7-R2, (C)2005-2015 SA-MP Team [18:54:42] filterscripts = "" (string) [18:54:42] [18:54:42] Server Plugins [18:54:42] -------------- [18:54:42] Loading plugin: mysql_static.so [18:54:42] >> plugin.mysql: R39-2 successfully loaded. [18:54:42] Loaded. [18:54:42] Loading plugin: pawncmd.so [18:54:42] Pawn.CMD plugin v3.1.4 by urShadow loaded [18:54:42] Loaded. [18:54:42] Loading plugin: pawnregex.so [18:54:42] Pawn.Regex plugin v1.1 by urShadow loaded [18:54:42] Loaded. [18:54:42] Loading plugin: crashdetect.so [18:54:42] CrashDetect v4.18.1 is OK. [18:54:42] Loaded. [18:54:42] Loading plugin: streamer.so [18:54:42] *** Streamer Plugin v2.8.2 by Incognito loaded *** [18:54:42] Loaded. [18:54:42] Loading plugin: sscanf.so [18:54:42] [18:54:42] =============================== [18:54:42] sscanf plugin loaded. [18:54:42] Version: 2.8.1 [18:54:42] (c) 2012 Alex "Y_Less" Cole [18:54:42] =============================== [18:54:42] Loaded. [18:54:42] Loaded 6 plugins. [18:54:42] [18:54:42] Filterscripts [18:54:42] --------------- [18:54:42] Loaded 0 filterscripts. [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int [18:54:42] Script[gamemodes/project.amx]: Run time error 19: "File or function is not found" [18:54:42] Number of vehicle models: 0 [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int