SQL добавляет переменную строку к предложению WHERE в зависимости от условия - PullRequest
0 голосов
/ 18 декабря 2011

Итак, я пытаюсь создать оператор SQL, и у меня есть некоторые условия. По сути, пользователь вводит (через HTML-форму в JSP) семестр, и если это аспирантура или бакалавриат, то отображается список всех курсов по этим критериям.

Что у меня есть, так это

SELECT course
FROM coursetable
WHERE semester = 'fall'

Теперь я хочу добавить, что если вы наберете в аспирантуре, то это добавит

WHERE semester ='fall'
AND grad_level = graduate

но если вы наберете бакалавриата, то он добавит

WHERE semester ='fall'
AND grad_level = undergraduate

Ответы [ 3 ]

1 голос
/ 18 декабря 2011

Я предполагаю, что это просто для практики, так как вы действительно должны отделить свою бизнес-логику от своего представления (например, jsp). Пожалуйста, найдите mvc и выберите подходящую среду. Также используйте подготовленный оператор .

Чтобы просто выполнить работу, ваш sql должен быть

SELECT course FROM coursetable WHERE semester = ? AND grad_level = ?

и используйте установленные параметры в подготовленном выписке.

your_preparedStatement.setString(1, semester);
your_preparedStatement.setString(2, level);

Если вам нужно динамически добавлять и удалять столбцы, то быстрее всего использовать StringBuilder и добавлять. Но для этого есть рамки, такие как Squiggle

1 голос
/ 18 декабря 2011

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
. . .
<sql:query dataSource="jdbc/example" var="courses">
SELECT course FROM courseTable WHERE semester=?
<sql:param value="${semester}"/>
<c:if test="${not empty param.graduate}">
AND grad_level=?
<sql:param value="${param.graduate}"/>
</c:if>
</sql:query>
1 голос
/ 18 декабря 2011

То, что вы хотите сделать (если вы используете JDBC), это настроить ваш SQL-запрос на использование параметров, например:

String strSQL = "SELECT course FROM coursetable WHERE semester = ? AND grad_level = ?";

Затем, когда вы делаете вызов из своего Java-кода, вы добавляете "semester" и "gradLevel" в качестве параметров. Опять же, если вы используете JDBC, это будет выглядеть примерно так:

PreparedStatement pstmt = connection.prepareStatement(strSQL);
pstmt.setString(1, strSemester);
pstmt.setString(2, strGradLevel);

Предполагается, что вы установили strSemester и strGradLevel для ввода от пользователя.

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