Как мне добавить значения автоматического увеличения с помощью Java?

#java #mysql #sql #database #prepared-statement

#java #mysql #sql #База данных #подготовленный оператор

Вопрос:

Я создал таблицу в Mysql с помощью

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

И использовал Java для добавления значений через мое приложение с графическим интерфейсом:

Я использовал следующий метод для добавления значений в свою базу данных:

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

Все работает нормально

Но идентификатор — это auto_increment, и мне не нужно добавлять значение к id при добавлении других значений столбца.

Я не могу добавлять подобное при добавлении через java, например, только добавляя us, столбцы ps и идентификатор будут автоматически увеличиваться.

Существуют ли какие-либо методы для добавления данных без передачи параметров?

Ответ №1:

Удалите столбец id из инструкции sql:

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

Комментарии:

1. Я пропустил значения индекса для изменения

Ответ №2:

Вы можете вставлять данные без идентификатора, поскольку они будут автоматически сгенерированы из 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);}           
    }
}