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,当执行这个bean时,会在数据库中创建一个表,但insert的值仍为零!因此,我无法进入正确的页面以进一步运行Web应用程序。我做错了什么?
答案 0 :(得分:5)
st.executeUpdate()
或者返回SQL数据操作语言(DML)语句的行数,或者0
返回 nothing 的SQL语句。
创建表既不是INSERT也不是UPDATE,因此接收0
是正常的,因为没有行受到影响。
答案 1 :(得分:2)
如果我们看一下Statement.executeUpdate javadoc,我们看到它总是为DDL语句返回0(在你的情况下,create table是一个DDL语句):
执行给定的SQL语句,可以是INSERT,UPDATE或 DELETE语句或不返回任何内容的SQL语句,例如 SQL DDL语句。
返回:(1)SQL数据操作语言的行数 (DML)语句或(2)0表示不返回任何内容的SQL语句
如果没有获得SQLException
,则可以认为语句执行成功。
答案 2 :(得分:0)
我对你的查询也有点怀疑,你可能需要看看这个
CREATE TABLE `test1` ( contact_id INT(10),name VARCHAR(40),
birthdate DATE,PRIMARY KEY (contact_id));
如果更新正确,则值为1,否则为0.此外,当您的语句不影响任何行时,它返回0,例如在DDL执行中它可能返回0.