Aller au contenu

Tutennuies - Base de données - SkQuery sans SQLibrary et les préfixes


Messages recommandés

Posté(e)

Salut !

Je réaliserai donc des tutoriels quand je m'ennuie, que ceux-ci n'existent pas et que vous en avez besoin ! :)

 

Un sujet que pas mal de skripter aimerait connaître mais qui n'est pas beaucoup utilisé, les bases de données.

Oui il existe 3-4 tutos sur cela mais ce n'est pas les mêmes BDD dont je vais vous parler, eux vous parlent de l'utilisation de prefixes dans vos variables pour qu'elles soient communes pour vos différents serveurs, cette techniques étant déjà dans différents tutoriels je vais vous parler d'une technique ancestrale permettant de vraiment toucher aux BDD, de réaliser de requêtes et de stocker ce que l'on veut, il est par exemple possible d'échanger un site web, stocker les logs de vos plugins de grief etc.

Pour réaliser cela il vous suffira de posséder une base de donnée, de Skript et de l'addon SkQuery.

Je vous conseille d'apprendre à utiliser les bases de la syntaxe MySQL et de connaître les différents termes tale, colonne et ligne -> C'est pas mal ici <- sachant que le SQL c'est l'anglais assez simple :)

 

Si vous ne possédez pas de base de donnée regardez ici c'est gratuit ;) -> http://freemysqlhosting.net/

 

Je vais d'abord vous présenter les différentes lignes de code qui servent à réaliser cette liaison serveur - BDD.

 

Le début, la partie options, ici vous insérez au début de votre script les informations permettant la liaison au serveur MySQL, sous cette forme:

script options:
   $ init com.mysql.jdbc.Driver
   $ db url jdbc:mysql://localhost:3306/NomDeMaBDD
   $ db username IdentifiantDeMaBDD
   $ db password MotDePasseDeMaBDD

 

Deuxième ligne de code, elle permet de récupérer dans une variable unique le premier résultat d'une requête:

set {_variable} to the first element out of objects in column "colonne" from result of query "SELECT colonne FROM table WHERE colonne1 = '%player%'" and close

 

La suivante permettant de stocker dans une variable liste toutes les données correspondantes à la requête:

add objects in column "colonne" from result of query "SELECT colonne FROM table LIMIT 1,45" and close to {_variable::*}

 

Et enfin une dernière ligne qui permet de ne faire que réaliser une requête, elle ne permet pas de récupérer des données:

update "INSERT INTO table (colonne1,colonne2, colonne3) VALUES ('%player%', '%uuid of player%', '%{rank::%player%}%')"

 

Deux trois syntaxes pratiques pour le bases:

"SELECT colonne FROM table WHERE colonne1 = '%player%' LIMIT 34,45" -> sélectionner toutes les données de la colonne 'colonne' où la valeur de la colonne 'colonne1' est '%player%' entre la 34e et la 79e ligne dans la table 'table'
"INSERT INTO table (colonne1,colonne2, colonne3) VALUES ('%player%', '%uuid of player%', '%{rank::%player%}%')" -> insérer dans la table 'table' avec les valeurs '%player%', '%uuid of player%', '%{rank::%player%}%' dans les colonnes 'colonne1', 'colonne2' et 'colonne3'
"CREATE TABLE IF NOT EXISTS table (id int(11) NOT NULL AUTO_INCREMENT, pseudo_vendeur varchar(32) NOT NULL) ;" -> créer la table 'table' avec une colonne 'id' qui sera un nombre non nulle et  pseudo_vendeur non nul une suite de caractères limités à 32

 

N'hésitez pas à me remercier, me critiquer et me conseiller ! ;)

  • J'aime 4
  • Réponses 56
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Posté(e)
Salut !

Je réaliserai donc des tutoriels quand je m'ennuie, que ceux-ci n'existent pas et que vous en avez besoin ! :)

 

Un sujet que pas mal de skripter aimerait connaître mais qui n'est pas beaucoup utilisé, les bases de données.

Oui il existe 3-4 tutos sur cela mais ce n'est pas les mêmes BDD dont je vais vous parler, eux vous parlent de l'utilisation de prefixes dans vos variables pour qu'elles soient communes pour vos différents serveurs, cette techniques étant déjà dans différents tutoriels je vais vous parler d'une technique ancestrale permettant de vraiment toucher aux BDD, de réaliser de requêtes et de stocker ce que l'on veut, il est par exemple possible d'échanger un site web, stocker les logs de vos plugins de grief etc.

Pour réaliser cela il vous suffira de posséder une base de donnée, de Skript et de l'addon SkQuery.

Je vous conseille d'apprendre à utiliser les bases de la syntaxe MySQL et de connaître les différents termes tale, colonne et ligne -> C'est pas mal ici <- sachant que le SQL c'est l'anglais assez simple :)

 

Je vais d'abord vous présenter les différentes lignes de code qui servent à réaliser cette liaison serveur - BDD.

 

Le début, la partie options, ici vous insérez au début de votre script les informations permettant la liaison au serveur MySQL, sous cette forme:

script options:
   $ init com.mysql.jdbc.Driver
   $ db url jdbc:mysql://localhost:3306/NomDeMaBDD
   $ db username IdentifiantDeMaBDD
   $ db password MotDePasseDeMaBDD

 

Deuxième ligne de code, elle permet de récupérer dans une variable unique le premier résultat d'une requête:

set {_variable} to the first element out of objects in column "colonne" from result of query "SELECT colonne FROM table WHERE colonne1 = '%player%'" and close

 

La suivante permettant de stocker dans une variable liste toutes les données correspondantes à la requête:

add objects in column "colonne" from result of query "SELECT colonne FROM table LIMIT 1,45" and close to {_variable::*}

 

Et enfin une dernière ligne qui permet de ne faire que réaliser une requête, elle ne permet pas de récupérer des données:

update "INSTERT INTO table (colonne1,colonne2, colonne3) VALUES ('%player%', '%uuid of player%', '%{rank::%player%}%')"

 

Deux trois syntaxes pratiques pour le bases:

"SELECT colonne FROM table WHERE colonne1 = '%player%' LIMIT 34,45" -> sélectionner toutes les données de la colonne 'colonne' où la valeur de la colonne 'colonne1' est '%player%' entre la 34e et la 79e ligne dans la table 'table'
"INSTERT INTO table (colonne1,colonne2, colonne3) VALUES ('%player%', '%uuid of player%', '%{rank::%player%}%')" -> insérer dans la table 'table' avec les valeurs '%player%', '%uuid of player%', '%{rank::%player%}%' dans les colonnes 'colonne1', 'colonne2' et 'colonne3'
"CREATE TABLE IF NOT EXISTS table (id int(11) NOT NULL AUTO_INCREMENT, pseudo_vendeur varchar(32) NOT NULL) ;" -> créer la table 'table' avec une colonne 'id' qui sera un nombre non nulle et  pseudo_vendeur non nul une suite de caractères limités à 32

 

N'hésitez pas à me remercier, me critiquer et me conseiller ! ;)

GG tu m'as "piqué" le tutoriel à la bouche on peut dire, gg ^^

Posté(e)
GG tu m'as "piqué" le tutoriel à la bouche on peut dire, gg ^^

xD

Comme je le dis, je me faisais chier, un mec me demandait de l'aide pour ça et pas grand monde sait s'en servir :')

Posté(e)

Tu pourrais juste me faire deux trois lignes pour un système de Coins:

Juste avec un:

  • /coins add [player] [amount]
  • /coins remove [player] [amount]
  • /coins check [<player>]

J'ai beau essayé m'ai j'y arrive toujours pas

Posté(e)

Merci beaucoup, sa me permet de faire un system de coins pour mon BungeeCord :)

Posté(e)

script options:
   $ init com.mysql.jdbc.Driver
   $ db url jdbc:mysql://localhost:3306/OnlineStaff
   $ db username monuser
   $ db password monmdp

on load:
   broadcast "&cSysteme de Stastiques V2 activé !"
   update "CREATE TABLE IF NOT EXISTS table (id int(11) NOT NULL AUTO_INCREMENT, pseudo_vendeur varchar(32) NOT NULL) ;"

 

La table ne se créé pas :/ que faire

Posté(e)

Je te déconseille tout d'abord d'utiliser 'table' comme nom de table, de plus si tu as des problèmes avec la création c'est que ou tu as des erreurs dans la console par rapport à la connexion ou ton event n'est pas enclenché :)

Posté(e)
Je te déconseille tout d'abord d'utiliser 'table' comme nom de table, de plus si tu as des problèmes avec la création c'est que ou tu as des erreurs dans la console par rapport à la connexion ou ton event n'est pas enclenché :)

 

Le probleme c'est que j'ai 0 erreurs dans la console xD

Posté(e)

EDITED :

 

J'ai mis à jour vers la dernière version de SkQuery mais j'obitens 2 erreurs :

Posté(e)

Donc, quand je met SQuery 3 j'ai plein de message dans ma console, quand je met skQuery 4, j'ai le screen que je tes montrer en haut :/

Posté(e)
Donc, quand je met SQuery 3 j'ai plein de message dans ma console, quand je met skQuery 4, j'ai le screen que je tes montrer en haut :/

Il te faut SkQuery3, après essaie de corriger tes erreurs :')

Posté(e)

[14:19:21] [skript update thread/INFO]: [0;37;22m[[0;33;22mSkript[0;37;22m][m You're currently running a [3mbeta[m version of Skript, and no new [3mstable[m version is available. Please note that you have to update to newer beta versions manually![m
[14:19:24] [server thread/INFO]: [0;37;22m[[0;33;22mSkript[0;37;22m][m Reloading [0;33;22mbdd.sk[m...[m
[14:19:26] [server thread/INFO]: [0;32;1mScieeences Plugins Activer ![m
[14:19:26] [server thread/WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect table definition; there can be only one auto column and it must be defined as a key
[14:19:26] [server thread/WARN]:     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[14:19:26] [server thread/WARN]:     at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
[14:19:26] [server thread/WARN]:     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
[14:19:26] [server thread/WARN]:     at java.lang.reflect.Constructor.newInstance(Unknown Source)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.Util.getInstance(Util.java:382)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
[14:19:26] [server thread/WARN]:     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
[14:19:26] [server thread/WARN]:     at com.w00tmast3r.skquery.elements.effects.EffSQLUpdate.execute(EffSQLUpdate.java:32)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.lang.Effect.run(Effect.java:54)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:63)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:91)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.lang.Trigger.execute(Trigger.java:53)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.events.EvtScript.register(EvtScript.java:63)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.ScriptLoader.loadScript(ScriptLoader.java:516)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.ScriptLoader.loadScripts(ScriptLoader.java:268)
[14:19:26] [server thread/WARN]:     at ch.njol.skript.SkriptCommand.onCommand(SkriptCommand.java:155)
[14:19:26] [server thread/WARN]:     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[14:19:26] [server thread/WARN]:     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[14:19:26] [server thread/WARN]:     at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:642)
[14:19:26] [server thread/WARN]:     at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:628)
[14:19:26] [server thread/WARN]:     at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:404)
[14:19:26] [server thread/WARN]:     at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:368)
[14:19:26] [server thread/WARN]:     at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:657)
[14:19:26] [server thread/WARN]:     at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:560)
[14:19:26] [server thread/WARN]:     at java.lang.Thread.run(Unknown Source)
[14:19:26] [server thread/INFO]: [0;37;22m[[0;33;22mSkript[0;37;22m][m Successfully reloaded [0;33;22mbdd.sk[m.[m

 

0 erreurs dans le skript mais sa dans la console :/

Posté(e)

Faut suivre le tutoriel à la lettre aussi ! xD

Déjà je t'ai dit de ne pas mettre "table" comme nom de table -> 1 problème résolu

Ensuite tu as oublié "primary key(id)" à la fin

Ce qui donne:

CREATE TABLE IF NOT EXISTS autreChose (id int(11) NOT NULL AUTO_INCREMENT, pseudo_vendeur varchar(32) NOT NULL, primary key(id))

Posté(e)
Faut suivre le tutoriel à la lettre aussi ! xD

Déjà je t'ai dit de ne pas mettre "table" comme nom de table -> 1 problème résolu

Ensuite tu as oublié "primary key(id)" à la fin

Ce qui donne:

 

Effectivement sa fonctionne maintenant :) je ten remercis :p

Posté(e)

Je voudrais créer une table, ça je sais faire, mais je sais pas ou mettre le pseudo du joueur avec ses coins dans la table.

 

Pour que je puisse ajouter des coins et en supprimer.

Posté(e)
Je voudrais créer une table, ça je sais faire, mais je sais pas ou mettre le pseudo du joueur avec ses coins dans la table.

 

Pour que je puisse ajouter des coins et en supprimer.

Mon tuto n'est pas un tuto sur le langage SQL, je l'ai pourtant écrit, j'ai donné un lien pour cela, tu pourras ensuite créer facilement ;)

Mais sinon tu peux les mettre n'importe où :3

Posté(e)

J'ai lu tout le tutoriel de haut en bas plusieurs fois, et je comprends toujours pas.

Le tutoriel et pour lire une donnée, ça je sais faire mais c'est pas pour définir des données.

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.