При создании автоматически генерируемого идентификатора в NetBeans значение всегда равно 0 вместо 1 - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать уникальный автоматически сгенерированный идентификатор, используя комбинацию символа, даты и значения.Это мой код:

int getValue;    

public void generateNOS(String query) throws SQLException {
    try {  
        Connection con = koneksi.koneksiDB();
        Statement stm = con.createStatement();
        ResultSet rs = stm.executeQuery(query);
        if (rs.next()) {
            getValue = Integer.parseInt(rs.getString(5));
        }
    } catch (Exception e) {

    }
}
public void autonumberNOS() throws SQLException {
    generateNOS("SELECT count(no_surat)+1 FROM surat_masuk");

    try {
        String NOS = "NOS/1/"+new SimpleDateFormat("yyyyMMdd").format(new Date())+"/"+getValue;
        txtNOS.setText(NOS);
    } catch (Exception e) {

    }
}

Например, идентификатор должен быть «NOS / 1/20181120/1».Но я получил "NOS / 1/20181120/0".Чего не хватало?Является ли синтаксис SQL неправильным?Спасибо за любую помощь.

1 Ответ

0 голосов
/ 20 ноября 2018

Я не полностью следую вашему коду, но могу указать на некоторые проблемы с логикой JDBC.Вот что вы делаете сейчас:

Connection con = koneksi.koneksiDB();
Statement stm = con.createStatement();
String query = "SELECT COUNT(no_surat)+1 FROM surat_masuk";
ResultSet rs = stm.executeQuery(query);
if (rs.next()) {
    getValue = Integer.parseInt(rs.getString(5));
}

Нет смысла просить пятый столбец, когда ваш выбор имеет только один столбец в наборе результатов.Вы, вероятно, должны идти после индекса первого столбца, то есть

if (rs.next()) {
    getValue = rs.getInt(1);
}

Обратите внимание, что я использую здесь ResultSet#getInt(), а не ResultSet#getString(), потому что счет обычно будет представлен целым числом вуровень базы данных.

В качестве альтернативы запросу индекса первого столбца можно указать псевдоним счетчика, а затем получить доступ к нему:

String query = "SELECT COUNT(no_surat) + 1 AS cnt FROM surat_masuk";
ResultSet rs = stm.executeQuery(query);
if (rs.next()) {
    getValue = rs.getInt("cnt");
}
...