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

    • Guest Nikitos
      By Guest Nikitos
      Ребят, у меня на сервере есть система включения X2DAY.
      Так вот, там каждый час дают только 2 exp.
      Помогите пожалуйста сделать так, что бы давалось не только 2 exp.
      Но ещё и зарплата была удвоенна в 2 раза.
      Пожалуйста помогите. Буду каждому очень сильно благодарен.
      Поставлю лайк и подпишусь!
    • Keynig
      By Keynig
      Все приветствую! Столкнулся с  такой проблемой .Захотелось сделать что бы на сервере был пикап при входе на который за определенную сумму появлялся скутер и персонаж на нем. Помогите, кому не сложно.
      Заранее СПАСИБО!