Как вставить байтовые массивы в SQL через Java? - PullRequest
0 голосов
/ 13 сентября 2018

Итак, я знаю, что этот вопрос задавали в нескольких разных местах, но я не смог получить убедительный ответ. Итак, я пытаюсь сохранить имена пользователей, идентификаторы, соли и хэши, и поэтому я только что создал учетную запись, и мне нужно вставить данные в базу данных. Я думал, просто сделай это так: int newResults = statement.executeUpdate("INSERT INTO data VALUES (1, 'CyanCoding', " + hash + ", " + salt + ")");

Точно так же, как вы знаете, все хорошо, кроме как в БД, кроме хэша и соли, и эти переменные - БИНАРНЫЕ (16) в БД и просто байтовый массив в программе Java.

Итак, я запустил его и получил «У вас ошибка в синтаксисе SQL» (очень полезно). Поэтому я посмотрел его, и люди в других ответах предложили сделать это так: int newResults = statement.executeUpdate("INSERT INTO data VALUES (1, 'CyanCoding', @hash, @salt)");

И все прошло нормально, но когда я проверил значения в базе данных, оба хеша и соли были null. Итак, игнорируя тот факт, что я, вероятно, неправильно использовал @hash, как мне вставить свои байтовые массивы в таблицу SQL?

1 Ответ

0 голосов
/ 13 сентября 2018

Предполагая, что вы выполняете типичное обновление JDBC с подготовленным оператором, ваш код должен выглядеть примерно так:

String query = "INSERT INTO data (col1, col2, col3, col4) ";
query += "VALUES (1, 'CyanCoding', ?, ?)";    // ? are placeholders
PreparedStatement statement = conn.prepareStatement(query);
statement.setBytes(1, hash);
statement.setBytes(2, salt);
statement.executeUpdate();

Это предполагает, что ваш хэш и соль существуют в виде байтовых массивов в Javaкод.Если хеш - просто строка, используйте вместо этого setString.

Обратите внимание, что я включил имена столбцов в оператор INSERT, что считается наилучшей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...