+ Antworten
Ergebnis 1 bis 6 von 6
  1. #1
    Landwirt Avatar von Kocacola97
    Registriert seit
    24.07.2011
    Beiträge
    50
    Minecraft
    Kocacola97

    [HILFE] Bukkit Plugin Programmierung SQLite

    Hey,

    ich habe versucht mit Hilfe von SQLibrary ein kleines Plugin zu schreiben, dass mit einer SQLite-Datenbank funktioniert. Leider haut das ganze nicht wirklich hin. Ich finde den Fehler einfach nicht.
    Ich hoffe ihr könnt mir helfen und bedanke mich im Voraus für jede Antwort!

    Main:
    Code:
    package me.kocacola97.realmail;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import lib.PatPeter.SQLibrary.SQLite;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class main extends JavaPlugin
    {
      static final Logger log = Bukkit.getLogger();
      private SQLite sqlite;
      
      public void onEnable()
      {
        sqlite = new SQLite(log, "RealMail", "mailbox", "plugins/RealMail");
        
        if (!sqlite.checkTable("mailbox")) 
        {
            sqlite.createTable("CREATE TABLE IF NOT EXIST mailbox (id INTEGER PRIMARY KEY AUTOINCREMENT, userText TEXT);");
        }
        
      }
    
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
      {
    	  
            if (cmd.getName().equalsIgnoreCase("add"))
            { 	
            	if(sender instanceof Player) {
          		  	String message = "";
          		  	for(String s : args) {
          		  		
          		  		message = message + s + " ";
          		  	}
          		  	message = message.replace("'", "");
          		  	sqlite.query("INSERT INTO mailbox (userText) VALUE ("+message+")");
          		  	sender.sendMessage("Danke fuer deinen Eintrag");
    
            }else{
          	  try
          	  {
          	  int id = Integer.parseInt(args[0]);
          	  ResultSet result = sqlite.query("SELECT * FROM mailbox WHERE id = " + id);
          	  if(result != null) 
          	  {
          		  try{
              		  result.next();  
              		  String text = result.getString("userText");
              		  sender.sendMessage("Inhalt von "+id+" ist: "+text);
              		  result.close();
              		  return true;
          		  }catch(SQLException ex) 
          		  {
          			  Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
          		  }
    
          	  }
          	  }catch(java.lang.NumberFormatException ex){
          		  sender.sendMessage("Das ist keine Zahl!");
          		  return true;
          		  
          	  }
            }
        	
    
      }
            return true;
      }
    
    }
    Fehlermeldung beim Starten des Servers:
    Code:
    00:23:35 [SCHWERWIEGEND] Error occurred while enabling RealMail v0.0.2 (Is it up
     to date?)
    java.lang.NullPointerException
            at lib.PatPeter.SQLibrary.SQLite.checkTable(SQLite.java:199)
            at me.kocacola97.realmail.main.onEnable(main.java:24)
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:374)
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:381)
            at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:266)
            at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:248
    )
            at org.bukkit.craftbukkit.CraftServer.reload(CraftServer.java:574)
            at org.bukkit.Bukkit.reload(Bukkit.java:183)
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    21)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:16
    8)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:4
    98)
            at org.bukkit.craftbukkit.CraftServer.dispatchServerCommand(CraftServer.
    java:490)
            at net.minecraft.server.DedicatedServer.ai(DedicatedServer.java:249)
            at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:214)
            at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:473)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:405)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
    Die Plugin.yml ist Standard, glaube die muss hier nicht noch gepostet werden

    Lg Koca


  2. #2
    Minecraft.de oldie Avatar von X39
    Registriert seit
    25.07.2010
    Beiträge
    2.121
    Minecraft
    KillerX39
    ... Bitte benutze in der Zukunft www.pastebin.com für sourceCode (das forum stellt es einfach hässlich dar und es wird teils unlesbar!)

    Ich vermute das dein sqllite objekt nicht korrekt initialisiert ist (weil z.b. es nicht möglich war die datenbank zu betreten/erstellen)
    folglich ein mal mit !=null prüfen (normalerweise müsste das in ein tryCatch weil es eine dateioperation darstellt und daher ein throwing haben sollte ... nunja dort wurde scheinbar eine andere lösung genutzt)


    Das TS3 auf dem ich mich öfters rumwusle:
    78.47.181.16:9999

    TAUZIEHEN REGELWERK


  3. #3
    Diamantensucher Avatar von Panjab
    Registriert seit
    28.04.2012
    Beiträge
    702
    Minecraft
    Panjab
    Ich würde dir empfehlen MySQL zu nutzen und nicht SQLite, da es um einiges einfacher ist



  4. #4
    Gelöschter Benutzer
    Zitat Zitat von Panjab Beitrag anzeigen
    Ich würde dir empfehlen MySQL zu nutzen und nicht SQLite, da es um einiges einfacher ist
    Schwachsinn.

    @Kocacola97 : Du führst erst das Query aus und prüfst dann ob die Tabelle vorhanden ist. Du kannst CREATE TABLE IF NOT EXIST direkt an den Anfang setzen und dann das Query übermitteln. Deine If-Abfrage macht dort keinen Sinn.

    Und wenn ihr in Java entwickelt, warum nutzt ihr nicht direkt eine Datenbank Engine welche auch in Java geschrieben wurde? Würde das nicht mehr Sinn machen?
    Geändert von tr4st (17.10.2012 um 10:33 Uhr)

  5. Mag ich X39 mag diesen Beitrag
  6. #5
    Diamantensucher Avatar von Panjab
    Registriert seit
    28.04.2012
    Beiträge
    702
    Minecraft
    Panjab
    Zitat Zitat von tr4st Beitrag anzeigen
    Schwachsinn.

    @Kocacola97 : Du führst erst das Query aus und prüfst dann ob die Tabelle vorhanden ist. Du kannst CREATE TABLE IF NOT EXIST direkt an den Anfang setzen und dann das Query übermitteln. Deine If-Abfrage macht dort keinen Sinn.

    Und wenn ihr in Java entwickelt, warum nutzt ihr nicht direkt eine Datenbank Engine welche auch in Java geschrieben wurde? Würde das nicht mehr Sinn machen?
    Ich spreche aus meinen Erfahrungen, und MySQL ist für mich um einiges einfacher



  7. #6
    Gelöschter Benutzer
    Der Unterschied besteht darin, dass die MySQL Engine eine Server Anbindung benötigt und SQLite nicht. Die Sprache SQL ist an sich immer gleich, es gibt nur Interpretations Unterschiede in den Übergabe-Parametern der Queries.

  8. Mag ich X39 mag diesen Beitrag
+ Antworten