尽管执行正确,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,当执行这个bean时,会在数据库中创建一个表,但insert的值仍为零! 因此,我无法进入正确的页面以进一步运行Web应用程序。 我究竟做错了什么?

st.executeUpdate()或者返回SQL数据操作语言(DML)语句的行计数,或者返回0表示不返回任何内容的 SQL语句。

创建表既不是INSERT也不是UPDATE,因此接收0是正常的,因为没有行受到影响。

如果我们看一下Statement.executeUpdate javadoc,我们看到它总是为DDL语句返回0(在你的情况下,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。