#java #oracle #jdbc
#java #Oracle #jdbc
Вопрос:
Фрагмент кода: при нажатии кнопки будет вызван actionevent
public void actionPerformed(ActionEvent e)
{
Function f = new Function();
Функция — это вложенный класс, который я использовал для установления соединения с базой данных.
Фрагмент кода для класса функций также предоставляется в конце.
ResultSet rs = null;
String Cid ="cust_id";
String Pno="cust_phone";
String cat="cust_cat";
String start_date="st_date";
String Adv_amt="adv";
String Adv_end="end_date";
String Address="addr";
t2 — это имя текстового поля, которое я использовал для ввода имени клиента. Я хочу использовать это имя клиента в качестве PK для извлечения всех других данных об этом клиенте из БД.
rs=f.find(t2.getText());
try{
if(rs.next())
{
t1.setText(rs.getString("cust_id"));
t3.setText(rs.getString("cust_phone"));
t4.setText(rs.getString("cust_cat"));
t5.setText(rs.getString("st_date"));
t6.setText(rs.getString("adv"));
t7.setText(rs.getString("end_date"));
t8.setText(rs.getString("addr"));
}
else
JOptionPane.showMessageDialog(null,"No data for this name");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null,ex.getMessage());
}
}
Вот фрагмент кода для функции вложенного класса, которая находится внутри основного класса:
class Function{
Connection con=null;
ResultSet rs= null;
PreparedStatement ps = null;
public ResultSet find(String s)
{
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con = DriverManager.getConnection("jdbc:oracle:thin:@Localhost:1521:xe","system","qwerty");
ps= con.prepareStatement("Select * from gkkdb where cust_name='?'");
ps.setString(1,s);
rs= ps.executeQuery();
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
}
return rs;
}
}
Пожалуйста, помогите разобраться в проблеме.
Ответ №1:
Не заключайте заполнитель параметра ?
в одинарные кавычки.
Это:
ps = con.prepareStatement("Select * from gkkdb where cust_name='?'");
должно быть
ps = con.prepareStatement("Select * from gkkdb where cust_name = ?");
?
Не распознается как заполнитель, если вы заключаете его в одинарные кавычки.
Ответ №2:
Сортировка переменной bind устранит вашу непосредственную проблему.
Вы должны явно указать, какие столбцы вы хотите выбрать, и таким образом вы получите только то, что вам нужно (кто-то может добавить столбец BLOB позже), и вы получите их в правильном порядке (кто-то может изменить сценарий создания таблицы перед запуском в другом экземпляре БД, хотя вы просматриваете столбцы с помощьюимя, другой порядок повлияет только в том случае, если вы используете позиционные индексы).
То же самое в другом ответе: привязать переменные (т. Е. Без кавычек)
Кроме того, «выбрать * из» никогда не является хорошей идеей, спросите своего администратора базы данных.
Очевидно, что ваш код является примером, но вы должны убедиться, что вы освободили все ресурсы (соединение, оператор, набор результатов), как только они будут обработаны. Используйте Java 7 try-with-resources.