如何在JDBCSQL中自动递增主键
你们能帮帮我吗,我在将主键转换成自动递增时遇到了麻烦,我的表名是books,我想自动递增的列是serial_no,这是主键如何在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
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通常不应该是连续的,特别是当意图是连续的时候。我只需要每次在数据库中输入一个值时都有一个连续的升序值