Search code examples
javamysqlsqldatabaseprepared-statement

How do I add the auto increment values with java?


I created a table in Mysql using

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

And used java for adding values thru my GUI application:

I used the following method to add values into my database:

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

Everything works fine

But the id is the auto_increment and I don't need to add value to id while adding other column values.

I can't add like that while adding thru java like only adding us, ps columns and the id will be automatically incremented.

Are there any methods to add data without passing the parameters?


Solution

  • Remove the column id from the sql statement:

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

    and don't set any value for it in the prepared statement, so remove this line:

    preparedStmt.setInt(1, id++); 
    

    The column id is auto_inrement so its value will be set by MySql.
    Of course change the indices of the other lines to 1 and 2:

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