尽管执行正确,executeUpdate()仍返回零

时间:2013-08-03 10:56:58

标签: java jdbc

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应用程序。我做错了什么?

3 个答案:

答案 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.