Из JavaDo c:
логическое выполнение (String sql) выдает SQLException
Выполняет указанное SQL утверждение, которое может вернуть несколько результатов. В некоторых (необычных) ситуациях один оператор SQL может возвращать несколько результирующих наборов и / или счетчиков обновлений. Обычно вы можете игнорировать это, если вы (1) не выполняете хранимую процедуру, которая, как вы знаете, может вернуть несколько результатов, или (2) вы динамически выполняете неизвестную строку SQL. Метод execute выполняет оператор SQL и указывает форму первого результата. Затем вы должны использовать методы getResultSet или getUpdateCount для получения результата и getMoreResults для перехода к любому последующему результату (ам).
Примечание: Этот метод нельзя вызывать для PreparedStatement или CallableStatement .
Параметры:
sql - любой оператор SQL
Возвращает:
true, если первый результат является объектом ResultSet ; false, если это счетчик обновлений или нет результатов
Это означает, что Statement.execute()
вернет true , если результат равен ResultSet
- и это так даже если в базе данных нет записи для оператора SELECT
. В этом случае ResultSet
будет просто пустым, но все равно будет ResultSet
.
Это также означает, что вы должны изменить свой код (если вы хотите придерживаться первого вызова Boolean ret = st.execute(sql);
) вот так:
…
if( ret )
{
ResultSet rs = st.getResultSet();
String name = null;
…
}
Таким образом вы избегаете второго обхода базы данных для выполнения Statement.executeQuery()
.
Или делаете это так:
var url = "jdbc:mysql://localhost/records";
var sql = "SELECT * FROM patient_info WHERE name = '" + txt1.getText() + "'";
var found = false;
try( var con = DriverManager.getConnection( url, "root", "" );
var st = con.createStatement();
var rs = st.executeQuery( sql ) )
{
while( rs.next() )
{
var name = rs.getString( "name" );
txt2.setText( name );
System.out.println( "working" );
found = true;
}
if( !found )
{
txt2.setText( "no records" );
System.out.println( "no records" );
}
}
catch( SQLException e )
{
e.printStackTrace();
}
DriverManager
знает драйвер даже без загрузки класса, по крайней мере, если ваш драйвер JDB C был написан после каменного века. А try-with-resources гарантирует, что все должным образом закрыто, когда больше не нужно.