Я написал этот код, который увеличивает содержание jlabel на 1.
это отлично работает с базой данных SQLite. но когда я переключился на MySQL, тот же синтаксис не дает никакого значения. пожалуйста, что кажется проблемой. код выглядит следующим образом:
try{
String sql = "Select max(ID) from ad_form";
pst=con.prepareStatement(sql);
rs=pst.executeQuery();
String one =rs.getString("max(ID)");
id.setText(one);
int all = Integer.valueOf(id.getText());
all=all+1;
id.setText(String.valueOf(all));
}catch(SQLException | NumberFormatException e ){
JOptionPane.showMessageDialog(null,e);
}
finally{
try{
rs.close();
pst.close();
}
catch(Exception ep){
ep.getMessage();
}
}
в любое время, когда код запускается, jlabel, который должен отображать значение, пуст.
Проблема заключается в наименовании неназванного выражения. Это зависит от базы данных. Так просто:
Select max(ID) as max_id from ad_form
а потом:
String one =rs.getString("max_id");
Это будет работать в любой базе данных.
Меня беспокоит выбор максимального id. Если ваше желание состоит в том, чтобы увеличить его на единицу и использовать его для последующей вставки, то это неправильный подход. Вместо этого вы должны использовать столбец auto_increment
.
auto_increment
. Это должно быть сделано в базе данных, автоматически, когда строка вставлена, а не в приложении.
max(ID)
возвращается с другим именем (например,MAX(ID)
), и в этом случаеSELECT MAX(ID) AS fake_column_name FROM ad_form
все равно будет работать.