Как отправить и получить необработанную строку из MySQL - PullRequest
0 голосов
/ 01 июля 2018

Я работаю над приложением, похожим на SQL Developer, в котором пользователь вводит некоторую команду SQL, и результат с сервера отображается в <div> на веб-странице.

Проблема в том, что пользователь может ввести ЛЮБУЮ строку, допустимый SQL или нет, например, если пользователь отправляет select * from employees; Я хочу получать и отображать в <div> текст точно так, как показано ниже:

+---------+----------+---------------+----------+
| user_id | username | full_name     | password |
+---------+----------+---------------+----------+
|       1 | john     | John Doe      | admin    |

И когда он вводит неверную строку SQL, сообщение <div> должно быть стандартными строками ошибок MySQL, например:

mysql> select * from usrsss;
ERROR 1146 (42S02): Table 'mydb.usrsss' doesn't exist

Я знаю о риске безопасности, на данный момент мне все равно.

Можно ли это сделать, поскольку я не могу контролировать синтаксис строки SQL, отправляемый пользователем?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Если вы используете java.sql.Connection,

  • сначала создайте выписку, используя .createStatement().
  • используйте .executeQuery() для поиска
  • и .executeUpdate() для вставки, обновления и удаления

При поиске укажите количество столбцов для создания таблицы.

ResultSet rs = statement.executeQuery(String sql);
ResultSetMetaData metaData = rs.getMetaData();

В ResultSetMetaData,

  • .getColumnCount() даст вам количество столбцов.
  • в цикле for создайте столбцы, а при создании .getColumnName(int index) вы получите имя столбца.

После создания таблицы выполните итерации ResultSet,

while (rs.next()) {
    rs.getString(int columnIndex);
}

используйте вышеуказанный метод для получения значений и добавления строк в таблицу.

Не забудьте окружить блок кода

try{

} catch(Exception e){
     e.getMessage();
}

так что если что-то пойдет не так, вы можете получить SQLException. Это будет включать в себя сообщение, вероятная причина ошибки.

Проложи свой путь ... Наслаждайся!

0 голосов
/ 01 июля 2018

Прежде всего, приглашение, которое вы видите там mysql>, представляет MySQL Shell . Это не SQL или JDBC, а интерфейс командной строки, предоставляемый MySQL.

Эта оболочка MySQL позволяет выполнять:

  • операторы SQL.
  • Различные другие операторы, которые НЕ являются частью SQL.

API JDBC, который вы хотите использовать, позволит вам запускать первую группу операторов - операторы SQL. К сожалению, он не позволит запустить второй, так что вам не повезло.

Кроме того, для первой группы JDBC API предоставит коды ошибок и сообщения об ошибках, которые не совсем те, которые вы видите при использовании MySQL Shell.

В итоге, вы можете смоделировать некоторые из этих команд, но это будет не совсем то, что вы, вероятно, ожидаете.

Однако ... и это большой вопрос, почему вы хотите сделать это в первую очередь? Один из моих разработчиков спросил меня, может ли он сделать это, поскольку это не сложно реализовать; таким образом, мы могли бы легко запустить любую команду SQL с веб-страницы. Большой? Ну нет. Это ОГРОМНЫЙ РИСК БЕЗОПАСНОСТИ . Если кто-нибудь взломает вашу веб-страницу, вы подвергнете всю базу данных.

Другими словами, не развертывать этот код в рабочей среде.

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