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