SQLServerException: недопустимое имя столбца «A», когда я пытаюсь выполнить SQL запрос вставки - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь выполнить запрос вставки по jframe и Jtext, но получаю эту ошибку:

com.microsoft.sqlserver.jdb c .SQLServerException: недопустимое имя столбца «A».

Я вставляю значения имя = A, город = B, улица = c, телефон = 0542223.

private static final String SQL2 = "insert into Hospital (name,city,street,phone) values (";
private static final String CONN_URL = "jdbc:sqlserver://localhost:1433;databaseName=MedicalDB;integratedSecurity=true;";
          JLabel name = new JLabel("name");
      JTextField name1 = new JTextField();
      name1.setPreferredSize(new Dimension(100, 30));

      JLabel city = new JLabel("city");
      JTextField city1 = new JTextField();
      city1.setPreferredSize(new Dimension(100, 30));

      JLabel street3 = new JLabel("the street");
      JTextField street4 = new JTextField();
      street4.setPreferredSize(new Dimension(100, 30));

      JLabel Phone = new JLabel("Phone num");
      JTextField Phone1 = new JTextField();
      Phone1.setPreferredSize(new Dimension(100, 30));

      String name = name1.getText();
      String city = city1.getText();
      String street = street4.getText();
      String phone = Phone1.getText();

      Statement stmt1 = con.createStatement();
      System.out.println(phone);

      String theString = SQL2 + name + "," +  city + "," + street +"," + phone + ");";
      stmt1.executeUpdate(theString);
    }
    catch (Exception e1) {
        e1.printStackTrace();
        System.out.println("here5");
    }
}

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Вы не цитируете строковые переменные, которые пытаетесь вставить, поэтому база данных интерпретирует их как имена столбцов, а затем терпит неудачу, так как эти столбцы не существуют.

Учебное пособие, позволяющее избежать как этой проблемы, так и уязвимости для SQL инъекционных атак, заключается в использовании PreparedStatement:

private static final String INSERT_SQL =
    "insert into Hospital (name, city, street, phone) values (?, ?, ?, ?)";

try (ps = con.prepareStatement(INSERT_SQL)) {
    ps.setString(1, name);
    ps.setString(2, city);
    ps.setString(3, street);
    ps.setString(4, phone);
    ps.executeUpdate();
}
1 голос
/ 11 апреля 2020

После проверки я понял: я только что изменил свой код с:

String theString = SQL2 + name + "," +  city + "," + street +"," + phone + ");";

на:

String theString = SQL2 + "'"+name+"','"+city+"','"+street+"','"+phone+"'" + ")";
...