SQLite databank locked

Discussion in 'Plugin Development' started by #define, Apr 1, 2012.

Thread Status:
Not open for further replies.
  1. Hi, i'm having trouble with SQLite.

    I'm making an annoucer witch reads the message's from the database.

    I also gona let my admins add message's with the /addmsg command

    This is the problem, when I do the /addmsg command it give's me a database locked error.

    Can any of you guys help?

    Code:
    package com.cj4.mbroker;
     
    import java.io.File;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Logger;
     
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class MBroker extends JavaPlugin {
        public static Logger log;
        private boolean broking = true;
        public Connection con;
        private ResultSet set;
        private Statement stmt;
        private File f;
        private int iCount = 1;
        public int count = 1;
        private ResultSet rs;
        private Statement sc;   
     
       
       
        @Override
        public void onEnable(){
            log = this.getLogger();
            log.info("|| MBroker enabled ||");
            addCommand cmdexe;
     
     
     
            try {
                cmdexe = new addCommand(this);
                getCommand("addMsg").setExecutor(cmdexe);
                connectDB();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace(); 
            } catch (IOException e) {
     
                e.printStackTrace();
            }
            if(broking){
                log.info("Were live!");
     
                this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {
     
                    public void run() {
                            roll();
                    }
     
     
                }, 60L, 60L);
            }
        }
        @Override
        public void onDisable(){
            try {
                log.info("|| MBroker disabled! ||");
                log.info("|| DB connection Closed!||");
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("Error closing database!");
            }
        }
     
        public void onPlayerJoin(PlayerJoinEvent event){
            Player p = event.getPlayer();
     
     
            this.getServer().broadcastMessage("Welkom" + p.getName() + ".");
     
     
        }
     
        public void connectDB() throws SQLException, ClassNotFoundException, IOException {
            f = new File("msg.db3");
            if (!f.exists()){
                f.createNewFile();
            }else{
     
     
                log.info("DB Connection made");
            }
     
     
     
        }
     
        public void roll(){
            if(!addCommand.updating)
            try{
                Class.forName("org.sqlite.JDBC");
                con = DriverManager.getConnection("jdbc:sqlite:msg.db3");
                stmt = con.createStatement();
                rs = stmt.executeQuery("SELECT * FROM msg WHERE id='" + iCount + "'");
                while(rs.next()){
                    int color  = rs.getInt("color");
                    iCount++; 
                    log.info("ICount:" + iCount);
                    if(color == 1){
                        getServer().broadcastMessage(ChatColor.WHITE + rs.getString("msg"));
                    }
                    if(color == 2){
                        getServer().broadcastMessage(ChatColor.RED + rs.getString("msg"));
                    }
                    if(color == 3){
                        getServer().broadcastMessage(ChatColor.BLUE + rs.getString("msg"));
                    }
                    if(color == 4){
                        getServer().broadcastMessage(ChatColor.AQUA + rs.getString("msg"));
                    }
                    if(color == 5){
                        getServer().broadcastMessage(ChatColor.GOLD + rs.getString("msg"));
                    }
     
     
                    sc = con.createStatement();
                set =  sc.executeQuery("SELECT COUNT(id) as count FROM msg");
                    count = set.getInt("count");
                    set.close();
                    sc.close();
                    log.info("Rows:"+ count);
     
     
                }
                if (iCount == count + 1){
                    iCount= 1 ;
                }
                rs.close();
                stmt.close();
                con.close();
     
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
     
     
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                try {
                    rs.close();
                    stmt.close();
                    con.close();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            } else{
           
            try {
                set.close();
             
            rs.close();
       
            stmt.close();
            sc.close();
           
            con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        }
        }
     
     
    }
    
    ^This is my MBroker (main broker) class



    Code:
    package com.cj4.mbroker;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public class addCommand implements CommandExecutor {
            private MBroker broker;
            private Connection con;
            public static boolean updating = false;
        public addCommand(MBroker mb) throws ClassNotFoundException, SQLException{
            this.broker = mb;
            Class.forName("org.sqlite.JDBC");
            con = DriverManager.getConnection("jdbc:sqlite:msg.db3");
        }
       
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String lbl,
                String[] args) {
               
           
            if((sender instanceof Player)){
                if (args.length == 2 ){
                    updating =true;
                    try {
                       
                        int id = broker.count + 1;
                        Statement stmt = con.createStatement();
                    boolean result =  stmt.execute("INSERT INTO msg(id,color,msg) VALUES('" + id + "','" + args[1] + "','" + args[0] + "')");
                        if(!result){
                            MBroker.log.info("Message inserted!");
                            sender.sendMessage("Bericht ontvangen!");
                           
                            updating = false;
                        }
                        stmt.close();
                        con.close();
                       
                        broker.roll();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else {
                    sender.sendMessage(ChatColor.RED + "Je hebt 2 argumenten nodig: /addMsg [Message] [Color]");
                }
            }else {
                sender.sendMessage(ChatColor.RED + "Woops, je moet een speler zijn om dit commando uit te voeren!");
                return false;
            }
            // TODO Auto-generated method stub
            return false;
        }
     
    }
    
    this is where the addmsg is handeld.

    Hope some of you programming gods can help me ;)
     
  2. Offline

    anerach

    If I recall correctly, SQLite allows one connection to update the database and at that moment it "locks" the database.
    I also had this issue. You could fix this by using only one connection in your main class and passing it on to the listeners and commands.
     
    #define likes this.
  3. Thanks, but when I do that I get a nullpointer exception:

    Code:
    package com.cj4.mbroker;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public class addCommand implements CommandExecutor {
            private MBroker broker;
        public addCommand(MBroker mb) throws ClassNotFoundException, SQLException{
            this.broker = mb;
     
        }
     
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String lbl,
                String[] args) {
             
         
            if((sender instanceof Player)){
                if (args.length == 2 ){
         
                    try {
                     
                        int id = broker.count + 1;
                        Statement stmt = broker.con.createStatement();
                /at this line!        stmt.executeQuery("INSERT INTO msg(id,color,msg) VALUES('" + id + "','" + args[1] + "','" + args[0] + "')");
                   
                        stmt.close();
                     
                     
                        broker.roll();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else {
                    sender.sendMessage(ChatColor.RED + "Je hebt 2 argumenten nodig: /addMsg [Message] [Color]");
                }
            }else {
                sender.sendMessage(ChatColor.RED + "Woops, je moet een speler zijn om dit commando uit te voeren!");
                return false;
            }
            // TODO Auto-generated method stub
            return false;
        }
     
    }
    
    where the /at this line! stands I get the nullpointer exception :)
     
  4. Offline

    anerach

    Did you assign a value to con in the main class?
     
  5. in the roll() function I assign a value to con :)

    Here is the updated code:

    Code:
    package com.cj4.mbroker;
     
    import java.io.File;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Logger;
     
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class MBroker extends JavaPlugin {
        public static Logger log;
        private boolean broking = true;
        public Connection con;
        private ResultSet set;
        private Statement stmt;
        private File f;
        private int iCount = 1;
        public int count = 1;
        private ResultSet rs;
        private Statement sc;   
     
       
       
        @Override
        public void onEnable(){
            log = this.getLogger();
            log.info("|| MBroker enabled ||");
            addCommand cmdexe;
            try {
                Class.forName("org.sqlite.JDBC");
                con = DriverManager.getConnection("jdbc:sqlite:msg.db3");
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
     
     
            try {
                cmdexe = new addCommand(this);
                getCommand("addMsg").setExecutor(cmdexe);
                connectDB();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace(); 
            } catch (IOException e) {
     
                e.printStackTrace();
            }
            if(broking){
                log.info("Were live!");
     
                this.getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {
     
                    public void run() {
                            roll();
                    }
     
     
                }, 60L, 60L);
            }
        }
        @Override
        public void onDisable(){
            try {
                log.info("|| MBroker disabled! ||");
                log.info("|| DB connection Closed!||");
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("Error closing database!");
            }
        }
     
     
        public void connectDB() throws SQLException, ClassNotFoundException, IOException {
            f = new File("msg.db3");
            if (!f.exists()){
                f.createNewFile();
            }else{
     
     
                log.info("DB Connection made");
            }
     
     
     
        }
     
        public void roll(){
            try{
                stmt = con.createStatement();
                rs = stmt.executeQuery("SELECT * FROM msg WHERE id='" + iCount + "'");
                while(rs.next()){
                    int color  = rs.getInt("color");
                    iCount++; 
                    log.info("ICount:" + iCount);
                    if(color == 1){
                        getServer().broadcastMessage(ChatColor.WHITE + rs.getString("msg"));
                    }
                    if(color == 2){
                        getServer().broadcastMessage(ChatColor.RED + rs.getString("msg"));
                    }
                    if(color == 3){
                        getServer().broadcastMessage(ChatColor.BLUE + rs.getString("msg"));
                    }
                    if(color == 4){
                        getServer().broadcastMessage(ChatColor.AQUA + rs.getString("msg"));
                    }
                    if(color == 5){
                        getServer().broadcastMessage(ChatColor.GOLD + rs.getString("msg"));
                    }
     
     
                    sc = con.createStatement();
                set =  sc.executeQuery("SELECT COUNT(id) as count FROM msg");
                    count = set.getInt("count");
                    set.close();
                    sc.close();
                    log.info("Rows:"+ count);
     
     
                }
                if (iCount == count + 1){
                    iCount= 1 ;
                }
                rs.close();
                stmt.close();
                con.close();
     
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                try {
                    rs.close();
                    stmt.close();
                    con.close();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
           
        }
    }
     
     
    
    MBROKER

    Code:
    package com.cj4.mbroker;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
     
    public class addCommand implements CommandExecutor {
            private MBroker broker;
        public addCommand(MBroker mb) throws ClassNotFoundException, SQLException{
            this.broker = mb;
     
        }
       
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String lbl,
                String[] args) {
               
           
            if((sender instanceof Player)){
                if (args.length == 2 ){
           
                    try {
               
                        int id = broker.count + 1;
                        Statement stmt = broker.con.createStatement();
                        stmt.executeQuery("INSERT INTO msg(id,color,msg) VALUES('" + id + "','" + args[1] + "','" + args[0] + "')");
                     
                        stmt.close();
                       
                       
                        broker.roll();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else {
                    sender.sendMessage(ChatColor.RED + "Je hebt 2 argumenten nodig: /addMsg [Message] [Color]");
                }
            }else {
                sender.sendMessage(ChatColor.RED + "Woops, je moet een speler zijn om dit commando uit te voeren!");
                return false;
            }
            // TODO Auto-generated method stub
            return false;
        }
     
    }
    
    Addmsg handeler.

    This is the stack trace:
    Code:
    2012-04-01 20:31:01 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'addmsg' in plugin MBroker v0.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:473)
        at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:821)
        at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:781)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:764)
        at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:33)
        at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113)
        at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:490)
    Caused by: java.lang.NullPointerException
        at org.sqlite.Stmt.executeQuery(Stmt.java:121)
        at com.cj4.mbroker.addCommand.onCommand(addCommand.java:33)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
        ... 12 more
    2012-04-01 20:31:01 [SEVERE] java.lang.NullPointerException
    2012-04-01 20:31:01 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 20:31:01 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 20:31:01 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 20:31:01 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 20:31:01 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 20:31:04 [SEVERE] java.lang.NullPointerException
    2012-04-01 20:31:04 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 20:31:04 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 20:31:04 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 20:31:04 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 20:31:04 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 20:31:07 [SEVERE] java.lang.NullPointerException
    2012-04-01 20:31:07 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 20:31:07 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 20:31:07 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 20:31:07 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 20:31:07 [SEVERE]    at java.lang.Thread.run(Unknown Source)

    Can you help?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 25, 2016
  6. Offline

    anerach

    Try assigning con in onEnable
     
    #define likes this.
  7. I do that And then i got a new error also posted updated code :)
     
  8. Offline

    anerach

    Just open the connection in the onEnable and close it in the onDisable, that works fine for me.
     
  9. I got a new stacktrace:
    Code:
    2012-04-01 21:26:31 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:31 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:31 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:31 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:31 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:31 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 21:26:33 [INFO] Arno [/5.94.193.253:47802] logged in with entity id 515 at ([world] 191.8832706792984, 78.0, -335.30000001192093)
    2012-04-01 21:26:34 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:34 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:34 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:34 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:34 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:34 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 21:26:37 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:37 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:37 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:37 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:37 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:37 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 21:26:39 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'addmsg' in plugin MBroker v0.1
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:473)
        at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:821)
        at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:781)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:764)
        at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:33)
        at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
        at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113)
        at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:490)
    Caused by: java.lang.NullPointerException
        at org.sqlite.Stmt.executeQuery(Stmt.java:121)
        at com.cj4.mbroker.addCommand.onCommand(addCommand.java:33)
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
        ... 12 more
    2012-04-01 21:26:40 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:40 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:40 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:40 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:40 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:40 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 21:26:43 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:43 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:43 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:43 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:43 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:43 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 21:26:46 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:46 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:46 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:46 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:46 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:46 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    2012-04-01 21:26:49 [SEVERE] java.lang.NullPointerException
    2012-04-01 21:26:49 [SEVERE]    at org.sqlite.Stmt.executeQuery(Stmt.java:121)
    2012-04-01 21:26:49 [SEVERE]    at com.cj4.mbroker.MBroker.roll(MBroker.java:104)
    2012-04-01 21:26:49 [SEVERE]    at com.cj4.mbroker.MBroker$1.run(MBroker.java:67)
    2012-04-01 21:26:49 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftWorker.run(CraftWorker.java:34)
    2012-04-01 21:26:49 [SEVERE]    at java.lang.Thread.run(Unknown Source)
    the code didn't change.
     
  10. Offline

    anerach

    You did some extremely weird things in your code. I cleaned it up abit
    Try this.
    Code:java
    1. package com.cj4.mbroker;
    2.  
    3. import java.io.File;
    4. import java.io.IOException;
    5. import java.sql.Connection;
    6. import java.sql.DriverManager;
    7. import java.sql.ResultSet;
    8. import java.sql.SQLException;
    9. import java.sql.Statement;
    10. import java.util.logging.Logger;
    11.  
    12. import org.bukkit.ChatColor;
    13. import org.bukkit.entity.Player;
    14. import org.bukkit.event.player.PlayerJoinEvent;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16.  
    17. public class MBroker extends JavaPlugin {
    18. public static Logger log;
    19. private boolean broking = true;
    20. public Connection con;
    21. private Statement stmt;
    22. private File f;
    23. private int iCount = 1;
    24. public int count = 1;
    25. private ResultSet rs;
    26.  
    27.  
    28.  
    29. @Override
    30. public void onEnable(){
    31. log = getLogger();
    32. log.info("|| MBroker enabled ||");
    33.  
    34. try {
    35. Class.forName("org.sqlite.JDBC");
    36. con = DriverManager.getConnection("jdbc:sqlite:msg.db3");
    37. e.printStackTrace();
    38. } catch (SQLException e) {
    39. e.printStackTrace();
    40. }
    41.  
    42. getCommand("addMsg").setExecutor(addCommand(this));
    43. connectDB();
    44.  
    45. if(broking){
    46. log.info("Were live!");
    47. getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {
    48. public void run() {
    49. roll();
    50. }
    51. }, 60L, 60L);
    52. }
    53. }
    54. @Override
    55. public void onDisable(){
    56. try {
    57. log.info("|| MBroker disabled! ||");
    58. log.info("|| DB connection Closed!||");
    59. con.close();
    60. } catch (SQLException e) {
    61. e.printStackTrace();
    62. System.out.println("Error closing database!");
    63. }
    64. }
    65.  
    66.  
    67. public void connectDB() {
    68. f = new File(getDataFolder(), "msg.db3");
    69. if(!f.exists()) {
    70. f.createNewFile();
    71. } else {
    72. log.info("DB Connection made");
    73. }
    74. }
    75.  
    76. public void roll(){
    77. try{
    78. stmt = con.createStatement();
    79. rs = stmt.executeQuery("SELECT * FROM msg WHERE id='" + iCount + "'");
    80. while(rs.next()){
    81. int color = rs.getInt("color");
    82. iCount++;
    83. log.info("ICount:" + iCount);
    84. if(color == 1)
    85. getServer().broadcastMessage(ChatColor.WHITE + rs.getString("msg"));
    86. else if(color == 2)
    87. getServer().broadcastMessage(ChatColor.RED + rs.getString("msg"));
    88. else if(color == 3)
    89. getServer().broadcastMessage(ChatColor.BLUE + rs.getString("msg"));
    90. else if(color == 4)
    91. getServer().broadcastMessage(ChatColor.AQUA + rs.getString("msg"));
    92. else if(color == 5)
    93. getServer().broadcastMessage(ChatColor.GOLD + rs.getString("msg"));
    94.  
    95. Statement sc = con.createStatement();
    96. ResultSet rs = sc.executeQuery("SELECT COUNT(id) as count FROM msg");
    97. count = rs.getInt("count");
    98. rs.close();
    99. sc.close();
    100. log.info("Rows:"+ count);
    101.  
    102.  
    103. }
    104. if (iCount == count + 1){
    105. iCount= 1 ;
    106. }
    107. rs.close();
    108. stmt.close();
    109. } catch (SQLException e) {
    110. e.printStackTrace();
    111. }
    112.  
    113. }
    114. }


    onCommand method

    Code:java
    1. @Override
    2. public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
    3. Player player = null;
    4.  
    5. if (sender instanceof Player)
    6. player = (Player) sender;
    7.  
    8. if(!cmd.getName().equalsIgnoreCase("addmsg"))
    9. return true;
    10.  
    11. if (player == null) {
    12. sender.sendMessage("Deze command kan alleen uitgevoerd worden door een speler");
    13. return true;
    14. }
    15.  
    16. if(args.length != 2)
    17. return false;
    18.  
    19. try {
    20. int id = broker.count + 1;
    21. Statement stmt = broker.con.createStatement();
    22. stmt.executeQuery("INSERT INTO msg(id,color,msg) VALUES('" + id + "','" + args[1] + "','" + args[0] + "')");
    23. stmt.close();
    24. broker.roll();
    25. return true;
    26. } catch (SQLException e) {
    27. e.printStackTrace();
    28. }
    29. return false;
    30. }
     
    #define likes this.
  11. WHAT????
    Your accesing some bukkit methodes known as be not thread safe from not the server threa? you know thtat this is realy bad behaver, this can lead to onexceptiod errors, update your roll methode to be called from the server threead only to fix
     
Thread Status:
Not open for further replies.

Share This Page