You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

xXAlex10Xx

User / Kunde

  • "xXAlex10Xx" is male
  • "xXAlex10Xx" started this thread

Posts: 818

Location: Nirgends

Occupation: 'Schüler' - ist n' Insider

Thanks: 8

  • Send private message

1

Wednesday, December 5th 2012, 8:06pm

[Java Klasse: MySQL] Eine MySQL-Klasse damit auch Trottels wie ich MySQL nutzen können

Hey,
da ich lange nach einer solchen Klasse gesucht hab & nix gefunden hab, dachte ich mir ich lad hier mal eine voll funktionsfähige MySQL-Klasse hoch.

Spoiler Spoiler

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package xy.deineDevName.DeinPLuginName// Mit der Package deines Plugins ersetzen

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQL {
    public DeinPLuginName plugin// DeinPLuginName mit der Hauptklasse deines Plugins ersetzen
    public Connection con;
    public String resultString;
    public int resultInt;
    
    public MySQL(DeinPLuginName plugin) { // DeinPLuginName mit der Hauptklasse deines Plugins ersetzen
        this.plugin plugin;
    }
    
    public void connect(String hostString portString databaseString userString password) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch(ClassNotFoundException e) {
            System.err.println("Konnte den MySQL-Driver nicht finden!");
        }
        
        try {
            con DriverManager.getConnection("jdbc:mysql://" host ":" port "/" database "?user=" user "&password=" password);
            if(!(con.isClosed())) {
                System.out.println("Erfolgreich mit MySQL verbunden!");
            }
        } catch(SQLException e) {
            System.err.println("Konnte nicht mit MySQL verbinden! Error: " e.getMessage());
        }
    }
    
    public void close() {
        try {
            if(con != null || (!(con.isClosed()))) {
                con.close();
                if(con.isClosed()) {
                    System.out.println("MySQL-Verbindung geschlossen!");
                }
            }
        } catch(SQLException e) {
            System.err.println("Fehler beim schliessen der Verbidnung: " e.getMessage());
        }
    }
    
    public String getString(String sqlint row) {
        try {
            Statement stmt con.createStatement();
            ResultSet rs stmt.executeQuery(sql);
            while(rs.next()) {
                resultString rs.getString(row);
            }
    
        } catch(SQLException e) {
            System.err.println("Konnte das Query nicht ausführen!");
        }
        return resultString;
    }
    
    public int getInt(String sqlint row) {
        try {
            Statement stmt con.createStatement();
            ResultSet rs stmt.executeQuery(sql);
            while(rs.next()) {
                resultInt rs.getInt(row);
            }
        } catch(SQLException e) {
            System.err.println("Konnte das Query nicht ausführen!");
        }
        return resultInt;
    }
    
    public void doQuery(String sql) {
        try {
            Statement stmt con.createStatement();
            stmt.executeQuery(sql);
        } catch(SQLException e) {
            System.err.println("Konnte das Query nicht ausführen!");
        }
    }
}


Und jetzt dazu wie die Hauptklasse aussehen sollte:

Spoiler Spoiler

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package xy.deineDevName.DeinPLuginName// mit deiner package ersetzen

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class DeinPLuginName extends JavaPlugin  implements Listener //mit dem namen deiner Hauptklasse ersetzen
    public MySQL db = new MySQL(this);
    
    public void onEnable() {
        db.connect("deinhost.de""3306""bukkit""root""mysql");
    }
    
    public void onDisable() {
        db.close();
    }
    
    public boolean onCommand(CommandSender senderCommand cmdString labelString[] args) {
        if(cmd.getName().equalsIgnoreCase("myid")) {
            int id db.getInt("SELECT * FROM `ids` WHERE `username` = '" sender.getName() + "'"0);
            sender.sendMessage("Deine ID ist: " id);
        }
        
        if(cmd.getName().equalsIgnoreCase("killer")) {
            String killer db.getString("SELECT * FROM `killers` WHERE `killed` = '" sender.getName() + "' LIMIT 0, 1"0);
            sender.sendMessage("Du wurdest zuletzt von " killer " gekillt!");
        }
    }
    
    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e) {
        Player p = ((Playere).getPlayer();
        Player killer p.getKiller();
        String killername killer.getName();
        String killedname p.getName();
        
        db.doQuery("INSERT INTO `killers` (`user`, `killer`) VALUES ('" killedname "', '" killername "')");
    }
}


So das wars schon =) Ich hoffe ihr könnt damit was anfangen :DD

MfG Alex
:thumbsup:

This post has been edited 1 times, last edit by "xXAlex10Xx" (Dec 5th 2012, 8:12pm)


4 registered users thanked already.

Users who thanked for this post:

Tacker2 (05.12.2012), Stuppsman (07.12.2012), jonas4345 (23.12.2012), Reiby2012 (27.03.2013)

BananaCraftingLP

User / Kunde

Posts: 836

Thanks: 51

  • Send private message

2

Wednesday, December 5th 2012, 8:48pm

Vielen Dank :D Werde ich morgen gleich mal einbauen!
PS: Mach mal den Bedankomat an :D

1 registered user thanked already.

Users who thanked for this post:

jonas4345 (23.12.2012)

xXAlex10Xx

User / Kunde

  • "xXAlex10Xx" is male
  • "xXAlex10Xx" started this thread

Posts: 818

Location: Nirgends

Occupation: 'Schüler' - ist n' Insider

Thanks: 8

  • Send private message

3

Wednesday, December 5th 2012, 8:53pm

Ist doch an?

mfG
:thumbsup:

ronyzzn

User / Kunde

  • "ronyzzn" is male

Posts: 1,721

Occupation: FISI Azubi

Thanks: 21

  • Send private message

4

Wednesday, December 5th 2012, 9:06pm

Wie wärs mit Github?

xXAlex10Xx

User / Kunde

  • "xXAlex10Xx" is male
  • "xXAlex10Xx" started this thread

Posts: 818

Location: Nirgends

Occupation: 'Schüler' - ist n' Insider

Thanks: 8

  • Send private message

5

Wednesday, December 5th 2012, 9:09pm

Wieso? :D
:thumbsup:

prog266

Moderator im Ruhestand

Posts: 7,603

Thanks: 476

  • Send private message

6

Wednesday, December 5th 2012, 10:08pm

Warum nicht?
Ich finde den Code nicht besonders schön und funktionell, aber das muss jeder selber Wissen.

Aber ich denke ein Tutorial wäre besser gewesen ;)

Gruß,
prog266

BananaCraftingLP

User / Kunde

Posts: 836

Thanks: 51

  • Send private message

7

Wednesday, December 5th 2012, 10:50pm

Bin mit Handy on, da sieht man den Link nicht O.o

GitHub ist och egal, da finden es genauso viele/wenige wie hier... ...Und ob die Wörter farbig sind oder nicht ist egal ^^

PS: @prog266 Was ist denn verbesserungswürdig?

LG Banana

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

8

Thursday, December 6th 2012, 10:46am

Muss prog266 zustimmen. Dazu hättest du die Klasse auch einfacher gestalten können, indem du statt "DeinPluginName", was man ja verändern muss, einfach "JavaPlugin" hingeschieben hättest. (Schonmal was von Vererbung gehhört ;) ? ) Schließlich hast du ja keine Objekte in deiner Hauptklasse deklariert die hier nützlich wären. Aber eine gute Idee ist es allemal!
*Mad*

xXAlex10Xx

User / Kunde

  • "xXAlex10Xx" is male
  • "xXAlex10Xx" started this thread

Posts: 818

Location: Nirgends

Occupation: 'Schüler' - ist n' Insider

Thanks: 8

  • Send private message

9

Thursday, December 6th 2012, 7:14pm

Quoted from "Universum"

Schließlich hast du ja keine Objekte in deiner Hauptklasse deklariert



Nein?

public MySQL db = new MySQL(this); ? ;)

MfG
:thumbsup:

FrozenBrain

User / Kunde

  • "FrozenBrain" is male

Posts: 2,145

Thanks: 6

  • Send private message

10

Thursday, December 6th 2012, 7:26pm

Was mir auffällt:
  • "plugin" wird nie verwendet (der Konstruktor ist also unnötig)
  • Kein Schutz gegen SQLInjection (keine Pflicht, aber wünschenswert)
  • Überall fest eingeschriebene Fehler-Strings: Exceptions sind nicht ohne Grund da. Du solltest die Exceptions eher weitergeben via "throws ...Exception". Falls die Exceptions alle checked sind, notfalls eine eigene unchecked Exception werfen, damit Programmierer von dem Fehler erfahren und es nicht zu unerwartetem Verhalten kommt.
  • Exceptions werden ignoriert und es wird versucht, normal im Code fortzufahren (was zu noch mehr Fehlern führt)
  • resultInt und resultString als Attribute? Wozu?
  • getString, getInt und doQuery sind keine wirkliche Arbeitserleichterung, da man sehr oft ganze Listen von Ergebnissen haben möchte, teils auch mit mehreren Spalten
  • Geringer Funktionsumfang

Sorry, aber ich halte davon nicht viel.

Universum

User / Kunde

Posts: 959

Thanks: 6

  • Send private message

11

Thursday, December 6th 2012, 8:46pm

Quoted from "Universum"

Schließlich hast du ja keine Objekte in deiner Hauptklasse deklariert



Nein?

public MySQL db = new MySQL(this); ? ;)

MfG

Lies dir bitte meinen Beitrag noch einmal durch, und mach dich über Vererbung schlau :) !
*Mad*

xXAlex10Xx

User / Kunde

  • "xXAlex10Xx" is male
  • "xXAlex10Xx" started this thread

Posts: 818

Location: Nirgends

Occupation: 'Schüler' - ist n' Insider

Thanks: 8

  • Send private message

12

Friday, December 7th 2012, 3:06pm

Nunja... mehr Funktionen und als Library gemacht:
[Library] MySQL
:thumbsup:

1 registered user thanked already.

Users who thanked for this post:

jonas4345 (23.12.2012)

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net

Similar threads