executeUpdate() возвращает ноль, несмотря на правильное выполнение
create_PaperBean.java
package Beans;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class create_paperBean extends org.apache.struts.action.ActionForm {
private String table_name;
public String getTable_name() {
return table_name;
}
public void setTable_name(String table_name) {
this.table_name = table_name;
}
public String createDB(){
String str = "creation_failed";
try{
Statement st = DBConnection.DBConnection.DBConnect();
int insert = st.executeUpdate("CREATE TABLE "+table_name+"(ques_no int(11) NOT NULL PRIMARy KEY,"
+ "ques_name varchar(45),ans1 varchar(45),ans2 varchar(45),ans3 varchar(45),"
+ "ans4 varchar(45),correct_ans varchar(45))");
System.out.println(insert);
if(insert > 0)
str = "created";
} catch (SQLException ex) {
Logger.getLogger(create_paperBean.class.getName()).log(Level.SEVERE, null, ex);
}
return str;
}
}
Я использую Struts, и когда этот компонент выполняется, в базе данных создается таблица, но значение insert по-прежнему равно нулю! Поэтому я не могу перейти к правильной странице для дальнейшего функционирования веб-приложения. Что я делаю неправильно?
3 ответа
st.executeUpdate()
либо возвращает количество строк для операторов языка данных SQL (DML), либо0
для операторов SQL, которые ничего не возвращают.
Создание таблицы не является ни INSERT, ни UPDATE, так что это нормально для получения 0
поскольку ни один ряд (ы) не был затронут.
Если мы посмотрим на javadoc Statement.executeUpdate, то увидим, что он всегда возвращает 0 для операторов DDL (в вашем случае create table является оператором DDL):
Выполняет заданный оператор SQL, который может быть оператором INSERT, UPDATE или DELETE или оператором SQL, который ничего не возвращает, например оператором SQL DDL.
Возвращает: либо (1) количество строк для операторов языка данных SQL (DML), либо (2) 0 для операторов SQL, которые ничего не возвращают
Вы можете предположить, что выполнение оператора успешно, если вы не получили SQLException
,
Я немного сомневаюсь в вашем запросе, возможно, вам придется посмотреть на это
CREATE TABLE `test1` ( contact_id INT(10),name VARCHAR(40),
birthdate DATE,PRIMARY KEY (contact_id));
Если обновление происходит правильно, то значение равно 1, если не его 0. Более того, оно возвращает 0, когда ваш оператор не влияет ни на одну строку, например, при выполнении DDL он может вернуть 0.