Принятие SQL-запросов из внешнего текстового файла в Java - PullRequest
0 голосов
/ 20 октября 2019

Мне было поручено создать Java-программу, которая будет принимать запросы SQL из текстового файла строка за строкой, строка 1 - имя драйвера, строка 2 - URL-адрес, строка 3 и 4 - имя пользователя и пароль соответственно, а строка 5это запрос. Так, например, мой текстовый файл будет иметь следующее:

org.apache.derby.jdbc.ClientDriver
jdbc:derby://localhost:1527/STUDENTDB
app
app
SELECT * FROM StudentDb WHERE STUDENT_NAME = ?
Jesse

А вот код:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import static java.lang.Boolean.parseBoolean;
import static java.lang.Integer.parseInt;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;

public class TestPreparedStatement {
      public static void main (String args[]) throws FileNotFoundException, IOException {
    try {
      BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\PCUSER\\info.txt"));
      String driver = br.readLine();
      Class.forName(driver);
      System.out.println("LOADED DRIVER  ---> " + driver);

      String url = br.readLine();
      Connection con = DriverManager.getConnection (url, br.readLine(), br.readLine());
      System.out.println("CONNECTED TO   ---> "+ url);

            String queryStr = br.readLine();
            PreparedStatement ps = con.prepareStatement(queryStr);
            String argu = br.readLine();
            ps.setString(1, argu);

            String queryStr2 = br.readLine();

            ResultSet rs = ps.executeQuery();
            System.out.println("EXECUTED QUERY ---> " + queryStr);
            System.out.println("\nPROCESSING RESULTS:\n");
            while (rs.next()) 
            {
                System.out.println("Name: " + rs.getString("STUDENT_NAME").trim());
                System.out.println("Student Number: " + rs.getString("STUDENT_NUMBER").trim()); 
                System.out.println("Course: " + rs.getString("COURSE").trim()); 
            }

        rs.close();
        ps.close();
        con.close();
    } 

    catch (SQLException e) {
        e.printStackTrace();
    } 

    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
  }

}

Команда SELECT мне удалось заставить его работать, но я не уверенкак я могу реализовать другие команды запроса, такие как INSERT INTO и DELETE. Как, например, если я хотел вставить или если я хотел обновить или удалить . По сути, мне нужна помощь в возможности использовать другие команды, кроме SELECT.

1 Ответ

1 голос
/ 20 октября 2019

Вы запускаете executeUpdate вместо executeQuery, остальное точно так же. Проверьте это на примеры. Вы должны были бы обнаружить, если вы имеете дело с оператором select или другим способом, который также прост: queryStr.trim().toUpperCase().startsWith("SELECT ")

Я параноидален по поводу ввода, это может быть хорошо, как "ВЫБРАТЬ ИЗB "или не очень приятно" выбрать a из b ", который по-прежнему является действительным sql, но простой запуск не будет. trim () удаляет начальные пробелы, toUpperCase делает его заглавным;)

Чтобы определить правильное количество параметров («?» в запросах), я бы порекомендовал не выводить его из запроса, а изостальная часть вашего вклада. В запросе могут быть также строковые значения, содержащие вопросительные знаки (INSERT INTO TABLE (COMMENT, GRADE), VALUES("To be or not to be?", ?)), что делает его немного сложным.

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