Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Интеграция с базой данных MySQL

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dexel, 8 июн 2017.

  1. Автор темы
    Dexel

    Dexel Активный участник Пользователь

    Баллы:
    76
    Skype:
    the_osirius
    Добрый день. Spigot 1.11.2. 1.12 пока не брал :)

    В Интернете есть множество туториалов по этой теме. Обидно, но ни один мне не помог.
    Сперва я работал с локальной бд, потом взял db4free. Тем не менее, возникает такая ошибка.

    Вот я подключаюсь к бд:
    Код:
    try {
                String url = "jdbc:mysql://db4free.net:3306/dbname";
                connection = DriverManager.getConnection(url, "login", "pass"); // Сделаем вид, что url, логин и пароль верны
    } catch (SQLException e) {
            e.printStackTrace();
    }
    Вот я создаю таблицу:
    Код:
    String sql = "CREATE TABLE IF NOT EXISTS anotherTable(Name varchar(32));";
    PreparedStatement stmt = connection.prepareStatement(sql);
    stmt.executeUpdate();
    И когда я захочу туда занести какую-то инфу,
    Код:
    String sql = "INSERT INTO anotherTable(Name) VALUES ('11101');";
    try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, "Name");
            stmt.executeUpdate();
    } catch (SQLException e) {
            e.printStackTrace();
    }
    На строке с setString в консоли появляется SQLException с сообщением "Parameter index out of range (1 > number of parameters, which is 0)".
    Если я поменяю параметры setString на 0, Name, то всё равно получу стек с сообщением вида "0 < 1".

    Прошу помочь :)
     
  2. Хостинг MineCraft
    <
  3. AtomicInteger

    AtomicInteger Активный участник Пользователь

    Баллы:
    46
    PreparedStatement работает примерно так:
    Ты создаешь шаблон(SQL-запрос) и позже сможешь вставить в него нужные динамические данные на место знака вопроса.В твоем запросе знаков "?" нет, соотв. и вставлять некуда.Вот пример:
    Код:
    String insertQuery = "INSERT INTO blocks (location) VALUES (?);";
    PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);
    preparedStatement.setString(1, location);
    preparedStatement.executeUpdate();
    В строке insertQuery у меня заготовлен шаблон(который кстати может кешироваться).В этом шаблоне у меня есть знак ? на месте того значения, которое я хочу вставить.Позже, после подготовки шаблона я записываю в него нужную мне переменную(location) на позицию №1(В моем шаблоне только 1 знак "?", а все плейсхолдеры(знаки "?") индексируются с 1).В итоге, получается шаблон, в который уже вставлены нужные мне данные, и дальше этот запрос пойдёт на выполнение.
     

Поделиться этой страницей