如何在JDBCSQL中自动递增主键

如何在JDBCSQL中自动递增主键,sql,netbeans,jdbc,derby,Sql,Netbeans,Jdbc,Derby,你们能帮帮我吗,我在将主键转换成自动递增时遇到了麻烦,我的表名是books,我想自动递增的列是serial_no,这是主键 public class donate extends javax.swing.JFrame { Connection con; Statement stmt; ResultSet rs; PreparedStatement pst; DefaultTableModel loginModel = new DefaultTableMod

你们能帮帮我吗,我在将主键转换成自动递增时遇到了麻烦,我的表名是books,我想自动递增的列是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:
}
顺便说一句,我找到了另一种方法,抓取我的表并重建它,然后将代码放入createtable脚本中


SERIAL\u NO INTEGER默认自动增量:开始1 increment 1 not null主键

只需将
SERIAL\u NO
列定义为
int主键,生成时始终作为标识
,然后Derby将自动为您分配数字。下面是一些示例代码:

publicstaticvoidmain(字符串[]args){
try(Connection conn=DriverManager.getConnection(
“jdbc:derby:C://\uu tmp/derbytest;create=true”)){
字符串sql;
sql=“删除表簿”;
try(语句s=conn.createStatement()){
s、 执行更新(sql);
}捕获(例外e){
//假设表以前不存在
}
sql=“创建表簿(”+
“序列号\无int主键”+
“始终作为标识生成,”+
“标题varchar(100))”;
try(语句s=conn.createStatement()){
s、 执行更新(sql);
}
sql=“插入书籍(标题)值(?”;
try(PreparedStatement ps=conn.prepareStatement(sql)){
ps.setString(1,“福书”);
ps.executeUpdate();
ps.setString(1,“律师名册”);
ps.executeUpdate();
ps.setString(1,“巴兹之书”);
ps.executeUpdate();
}
sql=“从书本中选择*”;
try(语句s=conn.createStatement()){
try(ResultSet rs=s.executeQuery(sql)){
while(rs.next()){
System.out.println(String.format(
“%d:%s”,
rs.getInt(“序列号”),
rs.getString(“title”);
}
}
}            
}捕获(SQLSE异常){
se.printStackTrace(系统输出);
系统出口(0);
}
}
产生

1:Foo之书
2:酒吧之书
3:巴兹之书

添加您正在操作的数据库,通常发送
NULL
。如果没有更多信息,没有人能为您提供更有用的答案,因为我们不知道正在使用的数据库引擎或架构。您想生成序列号吗?还是要创建主键(PK)?这两个概念并不完全相同。PK通常不应该是连续的,特别是当意图是连续的时候。我只需要每次在数据库中输入一个值时都有一个连续的升序值