如何使用 java 添加自动增量值?

Posted

技术标签:

【中文标题】如何使用 java 添加自动增量值?【英文标题】:How do I add the auto increment values with java? 【发布时间】:2020-09-24 15:31:40 【问题描述】:

我在 mysql 中使用创建了一个表

Create table 
(
 id int auto_increment,
 us varchar(100),
 ps varchar(1000)
); 

并使用 java 通过我的 GUI 应用程序添加值:

我使用以下方法将值添加到我的数据库中:

public static void Mysql(String u, String p) throws NoSuchAlgorithmException, InvalidKeySpecException
    
        String hashpass=passhash(p);//throws declaration for this statement
        try  
            Class.forName("com.mysql.cj.jdbc.Driver");  
            Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/bs","root","root");   
            String query = " insert into login (id,us,ps)"
                    + " values (?,?, ?)";  
            Statement stmt=con.createStatement();  
            ResultSet rs=stmt.executeQuery("select * from login"); 
            int id=0;
            while(rs.next())
            
                id= rs.getInt(1);
            
            PreparedStatement preparedStmt = con.prepareStatement(query);
            preparedStmt.setInt(1, id++); //I don't want this method because id is auto increment
            preparedStmt.setString(2,u);
            preparedStmt.setString(3,hashpass);
            preparedStmt.execute();
            con.close();  
            catch(Exception e) System.out.println(e);  
              
    

一切正常

但是 id 是 auto_increment 并且我不需要在添加其他列值的同时向 id 添加值。

我不能这样添加,而通过 java 添加就像只添加我们,ps 列和 id 将自动递增。

有什么方法可以不传参数就添加数据吗?

【问题讨论】:

【参考方案1】:

从sql语句中删除列id

String query = "insert into login (us, ps) values (?, ?)";

并且不要在准备好的语句中为其设置任何值,因此删除此行:

preparedStmt.setInt(1, id++); 

id 列是auto_inrement,所以它的值将由 MySql 设置。 当然将其他行的索引更改为 1 和 2:

preparedStmt.setString(1,u);
preparedStmt.setString(2,hashpass);

【讨论】:

我错过了要更改的索引值【参考方案2】:

您可以插入没有 ID 的数据,因为它将由 SQL 自动生成

public static void Mysql(String u,String p) throws NoSuchAlgorithmException, InvalidKeySpecException 
    String hashpass=passhash(p);
    try  
        Class.forName("com.mysql.cj.jdbc.Driver");  
        Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/bs","root","root");   
        String query = " insert into login (us,ps) values (?, ?)"; // CHECK HERE  
        Statement stmt=con.createStatement();  
        ResultSet rs=stmt.executeQuery("select * from login"); 
        PreparedStatement preparedStmt = con.prepareStatement(query);
        preparedStmt.setString(1,u);
        preparedStmt.setString(2,hashpass);
        preparedStmt.execute();
        con.close();  
    catch(Exception e)
        System.out.println(e);           
    

【讨论】:

以上是关于如何使用 java 添加自动增量值?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 SQL 插入增量值

如何在 laravel 中为每个用户生成唯一的自动增量值并将其添加到数据库中

添加自定义自动增量值

如何使用 PDO 在 MySQL 中找到下一个自动增量值? [复制]

如何在sql中获取下一个自动增量值

如何使用 laravel excel 导入向数据库添加自定义增量值