

データ操作するクラス

[code]

    public class Toi3_db {
        /**
         * @param args
         * @throws SQLException 
         * @throws ClassNotFoundException 
         */
        public static void main(String[] args) throws SQLException, ClassNotFoundException {
            Member mem = new Member(11,"yamasaki","yamasaki@mail.com");
            Connection con = (new DBConnection()).getConnection();
            MemberCtrl memctrl = new MemberCtrl(con);
            boolean ret = memctrl.excuteInsert(mem);
    
            if(ret == false){
                //失敗したときの出力処理
                System.out.println("INSERT失敗：");
            }
        }
    }
    
[/code]

* * *

処理するクラス

[code]

    public class MemberCtrl {
    
        public boolean excuteInsert(Member mem) throws SQLException,ClassNotFoundException {
            try{
                //SQL文を定義する
                String sql="INSERT INTO T_MEMBER(id ,name, email) VALUES(?,?,?)";
                System.out.println("a");
                //実行するSQL文とパラメータを指定する
                ps=con.prepareStatement(sql);
                System.out.println("b");
                ps.setInt(1, 11);
                ps.setString(2, "yamasaki");
                ps.setString(3, "yamasaki@mail.com");
    
                //INSERT文を実行する
                ps.executeUpdate();
            }finally{
                if(con!=null){
                    con.close();
                }   
            }
    
            return false;
        }
    }
    
[/code]

* * *

実行すると

> Exception in thread "main" java.lang.NullPointerException  
>  at MemberCtrl.excuteInsert(MemberCtrl.java:46)  
>  at Toi3_db.main(Toi3_db.java:21)

Toi3_db.java:21は `boolean ret = memctrl.excuteInsert(mem);`  
MemberCtrl.java:46は `ps=con.prepareStatement(sql);`

なぜ起きたでしょうか？ 宜しくお願い致します。

### 追記：

ありがとうございます。コンストラクタを入れてさきのエラーは解決しました。  
しかし今度は

> Exception in thread "main" java.sql.SQLException: Parameter index out of
> range (1 > number of parameters, which is 0).  
>  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)  
>  at ctrl.MemberCtrl.excuteInsert(MemberCtrl.java:66)  
>  at Toi3_db.main(Toi3_db.java:21)

MemberCtrl.java:66 は `ps.setInt(1, 11);`  
Toi3_db.java:21 は `boolean ret = memctrl.excuteInsert(mem);`

というエラーが出てきました。なぜでしょうか？


CC BY-SA 3.0
2015-07-29T04:09:05.160
12785
2015-07-29T07:02:16.547
2015-07-29T07:02:16.547
10492
10601
question
java mysql
Java MySQLに情報を追加する処理について


追記されたエラーは preparedStatement が受け取れるパラメータ数が 0 なのにsetInt()でparameter Index に 1
が指定されたということを表しています。つまり指定したSQLに何らかの誤りがある可能性が高いです。

MySQLは環境や設定次第でテーブル名の大文字小文字を区別しますが、そのあたりは提示のソースと一致していますか？


CC BY-SA 3.0
2015-07-29T06:56:16.713
12793
2015-07-29T06:56:16.713
10492
12785
answer