Я использую блок try catch для фильтрации данных с sqlite database, у меня есть две проблемы, эта программа чувствительна к регистру, мне нужно, чтобы она не учитывала регистр, тогда она фильтрует данные только тогда, когда я пишу точное имя, указанное в базе данных. Пожалуйста, помогите сделать его динамическим фильтром.
textFieldSearch = new JTextField();
textFieldSearch.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent arg0) {
try {
String query = "select sno,universityname,state,courses,applicationfees,deadline,admissionrequirment,undergrad,grad from UsaCollegeList where state=? ";
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, (String)textFieldSearch.getText());
ResultSet rs=pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
pst.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "error");
e.printStackTrace();
}
}
});
Спасибо большое, это сработало
Могу ли я использовать фильтр во всех столбцах базы данных вместо фильтрации только в состоянии?
select sno,universityname,state,courses,applicationfees,deadline,admissionrequirment,undergrad,grad from UsaCollegeList where state like ? or sno like ? or universityname like ? or courses like ? и так далее
кажется, что он не работает, и нет сообщения об ошибке
работает только состояние первого столбца, остальное не сработало, я попытался изменить порядок, даже тогда, когда работает только первый столбец. пример: где состояние вроде? или сно нравится? -> в каком состоянии фильтруется
Мой проект почти готов, только эта последняя часть моего проекта занимает несколько дней .. Могу ли я использовать динамический фильтр?




Вы можете сравнить это следующим образом:
String query = "select sno,universityname,state,courses,applicationfees,deadline,admissionrequirment,undergrad,grad from UsaCollegeList where upper(state)=? ";
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, textFieldSearch.getText().toUpperCase());
Спасибо за исправление в коде, но раньше я пробовал использовать .toUpprCAse (), но это не сработало.
могу ли я добавить дополнительные столбцы для поиска, например, where upper (state, course) = ?;
Верхняя функция имеет String в качестве входных данных, поэтому вы можете использовать больше столбцов либо в одной String (например, конкатенация - || -), либо в большем количестве условий, таких как where upper(state) = ? and upper(course) = ?
String text = "%" + textFieldSearch.getText() + "%";
String query = "select sno,universityname,state,courses,applicationfees,deadline,admissionrequirment,undergrad,grad from UsaCollegeList where sno = ? or universityname = ? or state = ? or courses = ? or applicationfees = ? or deadline = ? or admissionrequirment = ? or undergrad = ? or grad = ? ";
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, text);
pst.setString(2, text);
pst.setString(3, text);
pst.setString(4, text);
pst.setString(5, text);
pst.setString(6, text);
pst.setString(7, text);
pst.setString(8, text);
pst.setString(9, text);
ResultSet rs=pst.executeQuery();
Спасибо, мой друг, это работает, но текст нужно было преобразовать в строку в 'pst.setString (1, (String) text);'
Спасибо, дорогие друзья, все мне очень помогли, я выполнил свой проект.
textFieldSearch = new JTextField();
textFieldSearch.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent arg0) {
try {
String text = "%" + textFieldSearch.getText() + "%";
String query = "select sno,state from UsaCollegeList where sno like ? or state like ?";
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, (String)text);
pst.setString(2, (String)text);
ResultSet rs=pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
pst.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "error");
e.printStackTrace();
}
}
});
вы должны использовать
state like ?, а неstate =?. чувствительность к регистру, скорее всего, связана с sqlite stackoverflow.com/questions/15480319/…