Can you help me with SQL

Discussion in 'Plugin Development' started by xF_DareK, Oct 29, 2015.

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

    xF_DareK

    Hi,
    First, sorry for my english i'm french.
    I'm a new plugin dev and I create a friend plugin and I have a problem, i have make a connection with my mysql database with this class;
    Code:
    ackage com.darek.friends;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SQL {
    
        private static Connection connection;
        private static String url_base = "jdbc:mysql://", host = "localhost", username = "root", password = "123456789";
       
        public static Connection getDb(){
            return connection;
        }
       
        public static boolean isConnected(){
            try{
                if((connection == null) || (connection.isClosed())){
                    return false;
                }else{
                    return true;
                }
            }catch(SQLException e){
                e.printStackTrace();
            }
            return false;
        }
       
        public static void connection(){
            if(!isConnected()){
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                } catch (ClassNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                try {
                    connection = DriverManager.getConnection(url_base+host+"/mine", username, password);
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
       
        public static void deconnection(){
            if(isConnected()){
                try{
                    connection.close();
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
    
    and a function for insert data into mysql in my main class:
    Code:
    public static void insert(String p, String friend){
            SQL.connection();
            PreparedStatement sts;
            try {
                sts = SQL.getDb().prepareStatement("INSERT INTO friends (player, friend) VALUES ('?', '?')");
                sts.setString(1, p);
                sts.setString(2, friend);
                sts.execute();
                sts.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            SQL.deconnection();
        }
    and i use this like that:
    Code:
    SQL.connection();
                    PreparedStatement sts;
                        try {
                            sts = SQL.getDb().prepareStatement("INSERT INTO friends (player, friend) VALUES ('?', '?')");
                            sts.setString(1, p.getName());
                            sts.setString(2, friend.getName());
                            sts.executeUpdate();
                            sts.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    SQL.deconnection();
    but i don't see the problem, the console show:
    Code:
    [00:08:52 WARN]: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
    [00:08:52 WARN]:        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    [00:08:52 WARN]:        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    [00:08:52 WARN]:        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    [00:08:52 WARN]:        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    [00:08:52 WARN]:        at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3709)
    [00:08:52 WARN]:        at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3693)
    [00:08:52 WARN]:        at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4544)
    [00:08:52 WARN]:        at com.darek.friends.ShowFriendsCommand.onCommand(ShowFriendsCommand.java:29)
    [00:08:52 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    [00:08:52 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
    [00:08:52 WARN]:        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13)
    [00:08:52 WARN]:        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    [00:08:52 WARN]:        at java.util.concurrent.FutureTask.run(Unknown Source)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654)
    [00:08:52 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557)
    [00:08:52 WARN]:        at java.lang.Thread.run(Unknown Source)
    If you know the solution can you help me,
    Thank you
     
  2. Offline

    RoboticPlayer

    @xF_DareK I don't know why, but I can tell you that your error is at ShowFriendsCommand.java on line 29.
     
  3. Offline

    xF_DareK

    I gonna see if the send data are String

    Apparently that does not come of it because p.getName() is a string

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Oct 29, 2015
  4. Offline

    Hawktasard

    @xF_DareK
    Make it ?, ? instead of '?', '?'. What you did will literally insert ? and ? into friends.
     
    HeyAwesomePeople likes this.
  5. Offline

    Scimiguy

    @Hawktasard
    Maybe he wasn't sure if he had friends
    lol

    But seriously why are you putting ? ? as your record
     
Thread Status:
Not open for further replies.

Share This Page