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

标签 mysql netbeans unique autonumber

我正在尝试使用字符、日期和值的组合来创建唯一的自动生成 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语法是否错误?感谢您的帮助。

最佳答案

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

关于mysql - 在 Netbeans 中创建自动生成的 ID 时,值始终设置为 0 而不是 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394474/

相关文章:

php - 合并两个数组

python - 仅从两个列表中获取唯一元素

mysql - 如何从表中获取字段两次(两次都在不同的条件下)?

mysql - 更新是否基于时间差异的 id

linux - 在 Linux (Ubuntu) 上为 OGRE 设置 netbeans

Java GUI 使用 ArrayList 填充组合框值

ruby - Netbeans 是否同样适用于 Mac 上的 Ruby 开发?

R data.table 按组计算多列中的唯一值

php - 代码点火器错误 1064 : Latitude and Longitude query

mysql - 将 Phusion Passenger 从 3.0.11 更新到 4.0.10 会导致 ActiveRecord::StatementInvalid 在查询期间丢失与 MySQL 服务器的连接