在Netbeans中创建自动生成的ID时,值始终设置为0而不是1

时间:2018-11-20 13:48:52

标签: mysql netbeans unique id autonumber

我正在尝试使用char,日期和值的组合制作唯一的自动生成的ID。这是我的代码:

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) {

    }
}

例如,ID应该为“ NOS / 1/20181120/1”。但我得到了“ NOS / 1/20181120/0”。缺少了什么? SQL语法错误吗?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我没有完全遵循您的代码,但是我可以指出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");
}