У меня есть функция
public void executeMyQuery( Connection con) {
PreparedStatement ps = con.prepareStatement(SELECT *FROM STUDENT WHERE ID = ?);
ps.setInt(1, 7);
ps.executeQuery();}
если я запустил это, он будет работать нормально. Но я хочу сделать так.
Или существует какой-либо способ динамического удаления или изменения строки после предложения WHERE.
Вы должны создать свой запрос динамически, в начале метода проверки id
является null
или равным 0
. Чтобы было проще, вы можете использовать трюк в where where с 1=1
так что предложение where может быть включено все время в запросе.
public void executeMyQuery( Connection con, Integer id) {
String query = "SELECT *FROM STUDENT WHERE 1=1";
if(id != null){
query += "AND ID = ?";
}
PreparedStatement ps = con.prepareStatement(query);
if(id != null){
ps.setInt(1, id);
}
ps.executeQuery();}
В вашей программе могут быть два параметра PreparedStatements - один без WHERE ID =?
и другой с ним.
Кроме того, вы должны сохранить свои PreparedStatements
и повторно использовать, чтобы лучше хранить их как поле и т.д.
И тогда, когда вам нужно получить данные, вызовите либо первый подготовленный оператор, либо второй.
Майкл Дз близок к решению в своем ответе, но в коде есть проблема: он называет setInt не существующим подготовленнымСтатом.
Попробуйте что-то вроде этого:
public void executeMyQuery( Connection con, int Id) {
StringBuffer sql = new StringBuffer();
sql.append("Select * FROM STUDENT");
if(Id > -1) {
sql.append(" Where ID = ?");
}
preparedStatement ps = con.prepareStatement(sql.toString());
if(ID > -1) {
ps.setInt(1, Id);
}
ps.executeQuery(); // You might want to catch the result of the query as well
}
Надеюсь это поможет !
PreparedStatements
с каждым вызовом.
String
но однуPreparedStatement
, нет необходимости создавать две, если одна не будет использоваться;)