2014-11-15 3 views
1

У меня есть база данных доступа с таблицей с именем student И в ней есть поле Id.Я создал Java-апплет и в этом, когда я ввожу значение для Id в TextField1 в апплет и нажимаю Display button , апплет должен отображать другие детали учащегося в TextFields.Получение значений базы данных в апплет

Вот мой код для кнопки «Показать».

if(command=="Dispaly"){ 
    try{ 
    int stId=Integer.parseInt(textField1.getText()); 
     ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id=stId"); 

Но это приводит к ошибке, так как слишком мало параметров. Ожидаемый1.

Но если я изменить запрос как

ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id=3"); 

(То есть для студента с идентификатором = 3) он работает отлично.
Что случилось с моим кодом? Может кто-нибудь, пожалуйста, покажи мне это?

ответ

1

В запросе всегда будет генерировать этот SQL «SELECT*FROM student WHERE Id= stId»

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

поэтому вы должны добавить в STID в запросе, чтобы быть похожим, что "SELECT*FROM student WHERE Id="+ stId

Измените эту строку, чтобы быть ..

ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id="+ stId); 

Вы можете прочитать больше о подготовленных statments (Dynamic передавая параметры к запросу) https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
Надеюсь, это поможет!

+2

Еще один новичок базы данных говорят писать динамический SQL вместо того, чтобы делать это правильно и с помощью параметризованных запросов. -1 –

+0

Большое спасибо, я обновил свой ответ. –

+0

@MuhammadHamed Когда я пытаюсь вставить с помощью этого подготовленного элемента, я получаю сообщение об ошибке, поскольку «драйвер не поддерживает эту функцию». Вот что я сделал «String query =» INSERT INTO student (Id, studentName, age) «+» VALUES (?, ?,?) "; \t \t \t \t Подготовлено Состояние государства = con.prepareStatement (query); \t \t \t \t state.setInt (1, value1); \t \t \t \t state.setString (2, value2); \t \t \t \t state.setInt (3, value3); \t \t \t \t \t \t \t \t \t \t \t state.executeUpdate ("INSERT INTO студента (Id, studentName, возраст) VALUES (" + значение1 + " "+ значение2 +", "+ Value3 +")"); ' –

3

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

PreparedStatement state = conn.prepareStatement("SELECT * FROM student WHERE Id=?"); 
int stId=Integer.parseInt(textField1.getText()); 
state.setInt(1, stId); 
ResultSet result=state.executeQuery(); 
Смежные вопросы