【问题标题】:How to auto Increment a primarykey in JDBC sql如何在 JDBC sql 中自动增加主键
【发布时间】:2014-12-07 00:56:44
【问题描述】:

请大家帮帮我,我无法将主键设置为自动增量,我的表名是书籍,而我想要自动增量的列是 serial_no,它是一个主键。

public class donate extends javax.swing.JFrame {
    Connection con;
    Statement stmt;
    ResultSet rs;
    PreparedStatement pst;
    DefaultTableModel loginModel = new DefaultTableModel();
    int curRow = 0;

/**
 * Creates new form donate
 */
public donate() {
    initComponents();
    DoConnect();        
    showAll();
}
void showAll(){
   try{
   rs = stmt.executeQuery("SELECT * FROM books");
   while(rs.next())
   {
       String book = rs.getString("book_title");
       String categorie = rs.getString("category");
       String status = rs.getString("book_status");
       String donators = rs.getString("donator");
       int serial_nos = rs.getInt("serial_no");
       loginModel.addRow(new Object[]{book, categorie, status, donators, serial_nos});
   }
   }catch(SQLException err){
        System.out.println(err);
   }
}
void DoConnect( ) {
               try{
                //CONNECT TO THE DATABASE
                String host = "jdbc:derby://localhost:1527/Dafuq7";
                String uName ="Dafuq7";
                String uPass ="Dafuq7";
                con = DriverManager.getConnection(host, uName, uPass);

                //EXECUTE SOME SQL AND LOAD THE RECORDS INTO THE RESULTSET
                        stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
                    ResultSet.CONCUR_UPDATABLE);
                String sql = "SELECT * FROM books";
                rs = stmt.executeQuery(sql);
        }   
    catch(SQLException err){
                JOptionPane.showMessageDialog(donate.this, err.getMessage());
    }
}

这里是五月按钮,当我输入所有数据时,它将提交到我的表格书

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String bookttl = bookt.getText();
    String yourn = yn.getText();
    String categ = cat.getSelectedItem().toString();
    String bstat = bs.getSelectedItem().toString();

    try {
        rs.moveToInsertRow();
        rs.updateString( "book_title", bookttl );
        rs.updateString( "category", yourn );
        rs.updateString( "book_status", categ );
        rs.updateString( "donator", bstat );




        loginModel.addRow(new Object[]{bookttl, yourn, categ, bstat});

        rs.insertRow( );
        stmt.close();
        rs.close();

        stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        String sql = "SELECT * FROM books";
        rs = stmt.executeQuery(sql);

    }
    catch (SQLException err) {
        System.out.println(err.getMessage() );
    }// TODO add your handling code here:
}

顺便说一句,我通过这样做找到了另一种方法,抓住我的表并重建它并将此代码放入创建表脚本中

SERIAL_NO INTEGER 默认自动增量:开始 1 增量 1 非空主键

【问题讨论】:

  • 添加你正在处理的数据库
  • 通常发送NULL。如果没有更多信息,没有人可以为您提供更有帮助的答案,因为我们不知道正在使用的数据库引擎或架构。
  • 您要生成序列号吗?或者你想创建一个主键(PK)?这两个概念并不完全等价。 PK 通常不应该/要求/是连续的,特别是如果意图是连续的。
  • 我只需要每次在我的数据库中输入一个值时的顺序升序值

标签: sql netbeans jdbc derby


【解决方案1】:

只需将serial_no 列定义为int primary key generated always as identity,Derby 就会自动为您分配编号。下面是一些示例代码:

public static void main(String[] args) {
    try (Connection conn = DriverManager.getConnection(
                "jdbc:derby:C:/__tmp/derbytest;create=true")) {
        String sql;
        sql = "DROP TABLE books";
        try (Statement s = conn.createStatement()) {
            s.executeUpdate(sql);
        } catch (Exception e) {
            // assume table did not previously exist
        }
        sql = "CREATE TABLE books (" +
                "serial_no int primary key " +
                    "generated always as identity, " +
                "title varchar(100))";
        try (Statement s = conn.createStatement()) {
            s.executeUpdate(sql);
        }
        sql = "INSERT INTO books (title) VALUES (?)";
        try (PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, "The Book of Foo");
            ps.executeUpdate();
            ps.setString(1, "The Book of Bar");
            ps.executeUpdate();
            ps.setString(1, "The Book of Baz");
            ps.executeUpdate();
        }
        sql = "SELECT * FROM books";
        try (Statement s = conn.createStatement()) {
            try (ResultSet rs = s.executeQuery(sql)) {
                while (rs.next()) {
                    System.out.println(String.format(
                            "%d: %s", 
                            rs.getInt("serial_no"),
                            rs.getString("title")));
                }
            }
        }            
    } catch (SQLException se) {
        se.printStackTrace(System.out);
        System.exit(0);
    }
}

产生

1: The Book of Foo
2: The Book of Bar
3: The Book of Baz

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2016-06-19
    • 2020-11-03
    • 1970-01-01
    • 2013-05-02
    • 2013-05-23
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多