SQLITE - Storing player names and dates

Discussion in 'Plugin Development' started by SigmaRS, Mar 24, 2019.

Thread Status:
Not open for further replies.
  1. Offline

    SigmaRS

    My intent is to store player names and account creation dates(I'll find out the dates using mojang API)

    But I'm getting this error:
    Code:
    [MCPriorities] [SQLITE_ERROR] SQL error or missing database (no such column: DeltaHL)
    I know this is a SQLite Syntax Error, but I can't find out the problem..
    What do you guys think?

    This is my plugin code as of now:
    CODE (open)

    Code:
    package io.github.sigmars.mcpriorities;
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerLoginEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.io.File;
    import java.sql.*;
    
    public final class mcpriorities extends JavaPlugin implements Listener {
        private void playerDatabase(File database, Player player){
            Connection conn = null;
            try {
                conn = DriverManager.getConnection("jdbc:sqlite:" + database.getPath());
                getLogger().info("Database connection estabilished.");
                Statement operation = conn.createStatement();
                String sql = String.format("INSERT INTO players VALUES(null, %s, %d);", player.getPlayerListName(), 1);
                operation.execute(sql);
            } catch (SQLException error) {
                getLogger().warning(error.getMessage());
            } finally {
                try {
                    if (conn != null) {
                        getLogger().info("Player info saved.");
                        conn.close();
                    }
                } catch (SQLException error){
                    getLogger().warning(error.getMessage());
                }
            }
        }
    
        private void createDatabase(File database) {
            database.getParentFile().mkdirs();
            try (Connection conn = DriverManager.getConnection("jdbc:sqlite:" + database.getPath())) {
                if (conn != null){
                    DatabaseMetaData meta = conn.getMetaData();
                    getLogger().info(meta.getDriverName());
                    getLogger().info("Database created.");
                }
            } catch (SQLException error){
                getLogger().warning(error.getMessage());
            }
        }
    
        private void setupDatabase(File database) {
            Connection conn = null;
            try {
                conn = DriverManager.getConnection("jdbc:sqlite:" + database.getPath());
                getLogger().info("Database connection estabilished.");
                String sql = "CREATE TABLE IF NOT EXISTS players(id INT PRIMARY KEY, name text, date integer);";
                Statement operation = conn.createStatement();
                operation.execute(sql);
            } catch (SQLException error) {
                getLogger().warning(error.getMessage());
            } finally {
                try {
                    if (conn != null) {
                        getLogger().info("Database connection closed.");
                        conn.close();
                    }
                } catch (SQLException error){
                    getLogger().warning(error.getMessage());
                }
            }
    
        }
    
        @Override
        public void onEnable() {
            // Plugin startup logic
            getLogger().info("Loading database...");
            // Load database
            File databaseFile = new File("plugins/MCPriorities/mcpriorities.db");
            if (databaseFile.exists()) {
                getLogger().info("Database already exists, skipping creation.");
            } else{
                createDatabase(databaseFile);
            }
            setupDatabase(databaseFile);
            getServer().getPluginManager().registerEvents(this, this);
    
        }
    
        @EventHandler
        public void onJoin(PlayerLoginEvent event) {
            File databaseFile = new File("plugins/MCPriorities/mcpriorities.db");
            playerDatabase(databaseFile, event.getPlayer());
        }
    }
    
     
  2. Offline

    timtower Administrator Administrator Moderator

    @SigmaRS You never select a database to use
     
Thread Status:
Not open for further replies.

Share This Page