#java #prepared-statement
#java #подготовленная инструкция
Вопрос:
как я могу написать подготовленную инструкцию вместо этого: пожалуйста, помогите мне
String qry= "INSERT INTO
Registration1(RegistrationNo,Date,SeniorPerson,NativePlace,Kul,Gotra,KulSwami,ResidensialAddress,PinCode,STDcode,TelephoneNo,MobileNo,Email,Website,Education,Branch,BirthDate,BloodGroup) VALUES('" regno "','" dt "','" nm "','" place "','" kul "','" gotra "','" kswami "','" raddr "','" pincode "','" stdcd "','" tele "','" mno "','" email "','" website "','" education "','" branch "','" bdt "','" bloodgrp "')";
stmt.executeUpdate(qry);
Ответ №1:
PreparedStatement stmt = conn.prepareStatement("INSERT INTO Registration1(RegistrationNo,Date,SeniorPerson,NativePlace,Kul,Gotra,KulSwami,ResidensialAddress,PinCode,STDcode,TelephoneNo,MobileNo,Email,Website,Education,Branch,BirthDate,BloodGroup) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
int col = 1;
stmt.setString(col , regno);
stmt.setDate(col , new java.sql.Date(dt.getTime())); // assuming dt is a java.util.Date
(etc)
stmt.executeUpdate();
Комментарии:
1. Я бы не хотел иметь столбец даты в виде строки, если бы можно было использовать правильный тип.
2. Очевидно, вы используете правильные типы в наборе???? () вызывает. Но поскольку OP не дал никакой полезной информации о типах в его таблице, я использовал setString .
3. О, так вы вывели это точно так же, как я сделал PreparedStatement ранее? К стыду.
4. И это не было таким «очевидным», пока я не сделал комментарий, а вы не отредактировали свой код. У вас была привязка к дате с помощью setString, отсюда и комментарий.
Ответ №2:
`enter code here`you can use prepared statement of insertion like..
Connection MyCon=null;
PreparedStatement Ps=null;
try{
myCon=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","student","student");
// these are string from where we can take inputs .
String Fname;
String Lname;
String email;
String department;
String Salary;
Fname=JOptionPane.showInputDialog(null,"Enter First Name");
Lname=JOptionPane.showInputDialog(null,"Enter Last Name");
email=JOptionPane.showInputDialog(null,"Enter Your Email");
department=JOptionPane.showInputDialog(null,"Enter Department Name");
Salary=JOptionPane.showInputDialog(null,"Enter Salary Name");
**String insertion="insert into employees"
"(first_name, last_name, email, department ,salary )" "values "
"(?,?,?,?,?)";**
**Ps=(PreparedStatement) MyCon.prepareStatement(insertion);
Ps.setString(1,Fname);
Ps.setString(2,Lname);
Ps.setString(3,email);
Ps.setString(4,department);
Ps.setString(5,Salary);
Ps.executeUpdate();**
}catch(Exception e)
{
e.printtrace();
}
Ответ №3:
Вы должны использовать этот шаблон:
PreparedStatement pstmt = con .prepareStatement ("INSERT INTO TableName (ColumnNmae1, ColumnNmae2, ColumnNmae3...) VALUES (?,?,?...);
pstmt.setType(1, value);
pstmt.setType(2, value);
pstmt.setType(3, value);
etc.
в подготовленном statemnt вам нужно использовать точно такое же количество вопросительных знаков, как и столбцы, которые вы настроили в statment.
для каждого вопросительного знака, который вы задаете setValue, вам нужно выбрать правильный набор для каждого значения typr, есть setString SetInt и т.д…
В вашем конкретном случае это должно выглядеть так:
PreparedStatement pstmt = con .prepareStatement ("INSERT INTO TableName (RegistrationNo,Date,SeniorPerson...) VALUES (?,?,?...);
pstmt.setString(1, regno);
pstmt.setDate(2, Date);
pstmt.setString(3, SeniorPerson);
etc.
Ответ №4:
Ваш пример того, как НЕ следует использовать PreparedStatement
.
Вот идея получше:
// Here's a PreparedStatement to satisfy the person who downvoted.
PreparedStatement stmt = connection.prepareStatement();
// I might have missed a '?' - you should check it.
String qry= "INSERT INTO Registration1(RegistrationNo,Date,SeniorPerson,NativePlace,Kul,Gotra,KulSwami,ResidensialAddress,PinCode,STDcode,TelephoneNo,MobileNo,Email,Website,Education,Branch,BirthDate,BloodGroup) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
// Bind the variables here
stmt.executeUpdate(qry);
Вы должны тщательно пройти через это.
Комментарии:
1. Как вы привязываете переменные, когда у вас нет PreparedStatement для их привязки? Все, что у вас есть, это строка.
2. Кстати: я не давал вам отрицательного ответа. Я думаю, что ссылка на руководство Sun ^ WOracle компенсирует отсутствие PreparedStatement в вашем ответе.
3. Из опубликованного кода вы не знаете, что stmt не ссылается на PreparedStatement. Ваш комментарий необоснован.
4. Если вы вызываете «stmt.executeUpdate(qry)», то инструкция не подготовлена . Вы просто используете возможности инструкции superclass.