OracleでSAMPLETABLEを作成し、選択行すべての更新をしたいと考えています。
(複数行あるテーブルです)
しかし、うまく動かずに困っております。
エラー:INまたはOUTパラメータがありません - 索引: 11
その後、ご指摘いただいたUPDATE文を修正しましたが違うエラーになりました。
エラー:列索引が無効です。
UPDATE文は、ID列以外のすべてのデータの更新をしようとしています。
Oracleへの接続、WHERE句を除いた時のデータは更新できています。
(構造としては、フォームに?の内容を記入してもらう形です)
エラーに意味も、ググったのですがよくわからず困っています。
oracle 12c,eclips,java8で動かしています。
ご回答よろしくお願いします。
追記:CREATE文、Javaソースコードを記載します。
SQL
1 CREATE TABLE SAMPLETABLE 2 (ID NUMBER GENERATED ALWAYS AS IDENTITY MAXVALUE 9999 INCREMENT BY 1 NOT NULL 3 , HIDUKE VARCHAR2(20) NOT NULL 4 , NAME VARCHAR2(20) NOT NULL 5 , YOTEI VARCHAR2(200) NOT NULL 6 , ZISSEKI VARCHAR2(200) NOT NULL 7 , TOKKI VARCHAR2(200) NOT NULL 8 , SHOKAN VARCHAR2(200) NOT NULL 9 , KAKUNO VARCHAR2(20) NOT NULL 10 , ZIKAIYOTEI VARCHAR2(200) 11 , KOMENTO VARCHAR2(200) 12 , BIKO VARCHAR2(100) 13 , PRIMARY KEY ("ID")); 14
Java
1 2JAVAのソースコードです。 3 4public Gyomu selectById(int id) throws SQLException { 5 6 //変数定義 7 8 Connection conn = null; 9 List<Gyomu> gymList = new ArrayList<Gyomu>(); 10 PreparedStatement ps = null; 11 ResultSet rs = null; 12 13 //DB接続情報を設定する 14 conn = this.getConn(); 15 16 // SQL文を定義する 17 String rss = "SELECT * FROM SAMPLETABLE WHERE ID = ?"; 18 19 try { 20 //JDBCドライバをロードする 21 Class.forName("oracle.jdbc.driver.OracleDriver"); 22 23 //実行するSQL文とパラメータを指定する 24 ps = conn.prepareStatement(rss); 25 ps.setInt(1, id); 26 27 //SELECTを実行する 28 rs = ps.executeQuery(); 29 30 //取得した結果を全件出力する 31 rs.next(); { 32 Gyomu gyomu = new Gyomu(); 33 gyomu.setId(rs.getString("ID")); 34 gyomu.setName(rs.getString("NAME")); 35 gyomu.setYotei(rs.getString("YOTEI")); 36 gyomu.setZisseki(rs.getString("Zisseki")); 37 gyomu.setTokki(rs.getString("TOKKI")); 38 gyomu.setShokan(rs.getString("SHOKAN")); 39 gyomu.setKakuno(rs.getString("KAKUNO")); 40 gyomu.setZikaiyotei(rs.getString("ZIKAIYOTEI")); 41 gyomu.setKomento(rs.getString("KOMENTO")); 42 gyomu.setBiko(rs.getString("BIKO")); 43 gyomu.setHiduke(rs.getString("HIDUKE")); 44 45 46 gymList.add(gyomu); 47 } 48 49 } catch (Exception ex) { 50 //例外発生時の処理 51 ex.printStackTrace(); //エラー内容をコンソールに出力する 52 53 } finally { 54 this.close(conn); 55 } 56 57 return gymList.get(0); 58 59 } 60 61 public List<Gyomu> findAll() { 62 63 List<Gyomu> gymList = new ArrayList<Gyomu>(); 64 65 Connection conn = null; 66 try { 67 68 conn = this.getConn(); 69 70 // SELECT文を準備 71 String sql = "SELECT * from SAMPLETABLE"; 72 PreparedStatement pStmt = conn.prepareStatement(sql); 73 74 // SELECTを実行し、結果票を取得 75 ResultSet rs = pStmt.executeQuery(); 76 77 // 結果票に格納されたレコードの内容をGyomuインスタンスに設定し、ArrayListに追加 78 while (rs.next()) { 79 Gyomu gyomu = new Gyomu(); 80 81 System.out.println(rs.getString("ID")); 82 83 gyomu.setId(rs.getString("ID")); 84 gyomu.setName(rs.getString("NAME")); 85 gyomu.setYotei(rs.getString("YOTEI")); 86 gyomu.setZisseki(rs.getString("Zisseki")); 87 gyomu.setTokki(rs.getString("TOKKI")); 88 gyomu.setShokan(rs.getString("SHOKAN")); 89 gyomu.setKakuno(rs.getString("KAKUNO")); 90 gyomu.setZikaiyotei(rs.getString("ZIKAIYOTEI")); 91 gyomu.setKomento(rs.getString("KOMENTO")); 92 gyomu.setBiko(rs.getString("BIKO")); 93 gyomu.setHiduke(rs.getString("HIDUKE")); 94 95 //Gyomuクラスのgyomuに値を格納する。 96 97 gymList.add(gyomu); 98 99 } 100 } catch (SQLException e) { 101 e.printStackTrace(); 102 return null; 103 } finally { 104 this.close(conn); 105 } 106 return gymList; 107 } 108 109 public boolean create(Gyomu gyomu) { 110 111 Connection conn = null; 112 113 try { 114 115 conn = this.getConn(); 116 117 //INSERT文の準備(idは自動連番なので指定しない) 118 String sql = "UPDATE SAMPLETABLE SET HIDUKE='?', NAME='?', YOTEI='?', ZISSEKI='?', TOKKI='?', SHOKAN='?', KAKUNO='?', ZIKAIYOTEI='?', KOMENTO='?', BIKO='?' WHERE ID=?"; 119 120 PreparedStatement pStmt = conn.prepareStatement(sql); 121 //INSERT文中の「?」に使用する値を設定し、SQLを完成 122 123 pStmt.setString(1, gyomu.getHiduke()); 124 pStmt.setString(2, gyomu.getName()); 125 pStmt.setString(3, gyomu.getYotei()); 126 pStmt.setString(4, gyomu.getZisseki()); 127 pStmt.setString(5, gyomu.getTokki()); 128 pStmt.setString(6, gyomu.getShokan()); 129 pStmt.setString(7, gyomu.getKakuno()); 130 pStmt.setString(8, gyomu.getZikaiyotei()); 131 pStmt.setString(9, gyomu.getKomento()); 132 pStmt.setString(10, gyomu.getBiko()); 133 134 //INSERT文を実行 135 int result = pStmt.executeUpdate(); 136 137 if (result != 1) { 138 return false; 139 } 140 141 } catch (SQLException e) { 142 e.printStackTrace(); 143 return false; 144 145 } finally { 146 this.close(conn); 147 148 } 149 return false; 150 151 } 152 153 private Connection getConn() { 154 Connection conn = null; 155 try { 156 //JDBCドライバの読み込み 157 Class.forName("oracle.jdbc.driver.OracleDriver"); 158 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "orcl"); 159 } catch (SQLException e) { 160 e.printStackTrace(); 161 } catch (ClassNotFoundException e) { 162 e.printStackTrace(); 163 } 164 return conn; 165 } 166 167 private void close(Connection conn) { 168 // データベースの切断 169 if (conn != null) { 170 try { 171 conn.close(); 172 } catch (SQLException e) { 173 e.printStackTrace(); 174 } 175 } 176 } 177 178 179 180
回答3件
あなたの回答
tips
プレビュー