Самый первый вопрос здесь, поэтому я приношу свои извинения за любые ошибки и недостатки.
В основном это три файла: мой основной метод tech_supportv1, login_controller, содержащий класс, используемый для хранения множества методов, и login.java, javabean. Дело в том, чтобы проверить, существует ли определенная строка в базе данных tech_support. Для этого я пытаюсь использовать приведенный ниже код. (db_util и type - это классы, содержащие данные подключения, они протестированы и работают).
ПРОБЛЕМА: кажется, что данные из основного метода не вставлены в строку в соответствующих заполнителях, и возвращается ошибка. (Конечно, если я вручную введу строки вместо использования заполнителей, все будет работать нормально.)
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '' техников 'ГДЕ' techID 'LIKE 16' в строке 1
Я устал смотреть документы mariaDB, но весь другой синтаксис дает те же результаты.
Итак, это основной метод.
public class Tech_support_v1 {
public static void main(String[] args) {
System.out.println("Start.");
login bean = new login();
bean.setTable("technicians");
bean.setColumn("techID");
bean.setID(16);
login_controller.select(bean);
}
}
Это метод выбора (с bean в качестве аргумента, логин - это класс Javabean).
public static boolean select(login bean) {
String sql = "SELECT * FROM ? WHERE ? LIKE ?";
ResultSet rs;
try (
Connection conn = db_util.getConn(db_type.MYSQL);
PreparedStatement stmt = conn.prepareStatement(sql);
) {
stmt.setString(1, bean.getTable());
stmt.setString(2, bean.getColumn());
stmt.setInt(3, bean.getID());
rs = stmt.executeQuery();
if (rs.next()) {
System.out.println("Y");
return true;
} else {
System.err.println("N");
return false;
}
} catch (Exception e) {
System.err.println(e);
return false;
}
}
Я не буду включать класс компонента, потому что это буквально всего три переменные с относительными методами set / get. Также база данных работает с MariaDB и является MySQL.
Заранее всем спасибо.




Вы сравниваете LIKE, но устанавливаете Int. Измените LIKE на = и посмотрите, работает ли он.
У вас несколько проблем с кодом :-) Во-первых, вы не можете задавать имена таблиц или столбцов с помощью "setString" в подготовленном операторе! См. Этот вопрос: Как использовать переменную tablename для вставки подготовленного оператора java Во-вторых, как заметил Даниэль Перейра: вы пытаетесь использовать выражение «like» с помощью «setInt»! См .: https://dev.mysql.com/doc/refman/8.0/en/pattern-matching.html
Спасибо, я проверю их.
В качестве примечания: если вы используете "setString", вы всегда будете получать строки в кавычках ... так что ваш SQL будет выглядеть так: select * from "Table" where "Column" like "%a%" Это явно недопустимый синтаксис SQL.
Хорошо, я заработал! большое спасибо. Без особых изменений.
Попробуйте сделать что-нибудь вроде этого:
String sql = "SELECT * FROM :table ";
try (
Connection conn = db_util.getConn(db_type.MYSQL);
PreparedStatement stmt = conn.prepareStatement(sql);
)
{
String query = StringUtils.replace(sql, ":table", bean.getTable());
stmt.executeQuery(query);
}
Вы создаете эквивалент SELECT * FROM 'tablename', что является синтаксической ошибкой.
отредактировал мое предложение. Спасибо.
К сожалению, это не так.