1

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

4

3 回答 3

7

st.executeUpdate()要么返回 SQL 数据操作语言 (DML) 语句的行数,要么返回什么都不0返回的 SQL 语句。

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

于 2013-08-03T11:03:49.143 回答
2

如果我们看一下Statement.executeUpdate javadoc,我们会发现它总是为 DDL 语句返回 0(在您的情况下,create table 是一个 DDL 语句):

执行给定的 SQL 语句,它可能是 INSERT、UPDATE 或 DELETE 语句或不返回任何内容的 SQL 语句,例如 SQL DDL 语句。

返回:(1) SQL 数据操作语言 (DML) 语句的行数或 (2) 0 用于不返回任何内容的 SQL 语句

如果您没有获得SQLException.

于 2013-08-03T11:02:56.623 回答
0

我也有点怀疑你的查询,你可能需要看看这个

   CREATE TABLE `test1` ( contact_id INT(10),name VARCHAR(40),
   birthdate DATE,PRIMARY KEY    (contact_id));

如果更新正确发生,则值为 1,如果不是 0。此外,当您的语句不影响任何行时,它返回 0,例如在 DDL 执行中它可能返回 0。

于 2013-08-03T11:06:20.063 回答