2014-10-12 29 views
2

可以請大家幫助我,我有麻煩讓我的主鍵進入自動增量,我的表名是書籍和列,我想成爲自動增量是serial_no,它是一個主鍵。如何自動增加JDBC中的主鍵sql

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()); 
    } 
} 

,這裏是5月按鈕,當我輸入的所有數據都將圍繞這樣一來,抓住我的桌子和重建提交給我的桌子的書

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: 
} 

BTW,我發現另一種方式它並把這個代碼在創建表腳本

SERIAL_NO INTEGER默認自動增量:1個開始遞增1 NOT NULL主鍵

+0

添加你在 – Ram 2014-10-12 08:55:18

+0

工作通常數據庫,發送'NULL'。沒有更多信息,沒有人可以爲您提供更有幫助的答案,因爲我們不知道正在使用的數據庫引擎或模式。 – 2014-10-12 09:03:21

+0

你想要生成連續的數字嗎?或者你想創建一個主鍵(PK)?這兩個概念並不完全相同。 PK通常不應該/必須/是連續的,特別是如果意圖是連續的。 – user2338816 2014-10-12 09:15:10

回答

1

簡單地定義你r serial_no列爲int primary key generated always as identity,然後德比會自動爲您分配號碼。下面是一些示例代碼:

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