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;
    }
}

私はストラットを使用しています。この 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 DDL ステートメントなどの何も返さない SQL ステートメント) を実行します。

戻り値: (1) SQL データ操作言語 (DML) ステートメントの行数、または (2) 何も返さない SQL ステートメントの場合は 0

が取得されない場合は、ステートメントの実行が成功したと見なすことができますSQLException

于 2013-08-03T11:02:56.623 に答える
0

あなたのクエリについても少し疑問があります。これを見る必要があるかもしれません

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

更新が正しく行われた場合、値は 0 でない場合は 1 です。さらに、ステートメントがどの行にも影響を与えない場合は 0 を返します。たとえば、DDL の実行では 0 が返される場合があります。

于 2013-08-03T11:06:20.063 に答える