前提・実現したいこと
タイトルにも記載させて頂きましたが、
データをDBに登録したものをJTableに表示するのは何度かやっていますが、
特定のカラムのセル全てをコンボボックスとして、表示しようとしてもできずに苦戦しています。
発生している問題・エラーメッセージ
結果:1 例外発生:java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?, ? )' at line 1
該当のソースコード
//登録 JButton btnNewButton = new JButton("登録"); btnNewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO 自動生成されたメソッド・スタブ Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //空白チェック int errorCode = Validate.ckNull3(textField.getText(), textField_1.getText(), textField_2.getText(), textField_3.getText()); if(errorCode != Validate.getErrCode0()) { //エラーダイアログ表示 JOptionPane.showMessageDialog(frame, Validate.getErrMsg(errorCode)); return; } //文字数チェック if(textField_3.getText().length() != 13) { //エラーダイアログ表示 JOptionPane.showMessageDialog(contentPane, "ISBNは13桁で入力してください。"); return; } //ConboBoxチェック String value = yearsBox.getSelectedItem().toString(); if(value == "-") { //エラーダイアログ表示 JOptionPane.showMessageDialog(contentPane, "発売年を選択してください。"); } //データベースに接続 con = DBconect.getConnection(); pstmt = con.prepareStatement("select COALESCE(max(No), 0) as maxNo from book.tbl_book"); rs = pstmt.executeQuery(); int count = !rs.next() ? 0 : rs.getInt("maxNo"); //SQL文作成 String mySql = "insert into book.tbl_book(No, title, author, publisher, ISBN, releaseday, status)" + "values(?, ?, ?, ?, ?, ?, ? )"; //ステートメントオブジェクトを作成 pstmt = con.prepareStatement(mySql); pstmt.setString(1, String.valueOf(count + 1)); pstmt.setString(2, textField.getText()); pstmt.setString(3, textField_1.getText()); pstmt.setString(4, textField_2.getText()); pstmt.setString(5, textField_3.getText()); pstmt.setString(6, value); pstmt.setString(7, String.valueOf("-")); int num = pstmt.executeUpdate(); System.out.println("結果:" + num + "\t"); String mySql1 = "select No, title, author, punlisher, ISBN, releaseday, status from book.tbl_book order by No"; // SQLの実行; pstmt.executeUpdate(mySql); rs=pstmt.executeQuery(mySql1); //表のヘッダー部を作成 DefaultTableModel tableModel = new DefaultTableModel(columnName, 0); //java.sql.ResultSet の行数を取得するためカーソルを最終行に移動 rs.last(); //結果の行数をセット tableModel.setRowCount(rs.getRow()); //カーソルを先頭行に移動 rs.beforeFirst(); System.out.println("表計算=" + tableModel.getRowCount() + "/t"); int i = 0; //カウントアップ変数 //結果セットからデータを取り出す next() で次の行に移動 while(rs.next()) { //検索結果から表に記載 tableModel.setValueAt(java.lang.String.format("%03d", rs.getInt("No")), i, 0); tableModel.setValueAt(rs.getString("title"), i, 1); tableModel.setValueAt(rs.getString("author"), i, 2); tableModel.setValueAt(rs.getString("publisher"), i, 3); tableModel.setValueAt(rs.getString("ISBN"), i, 4); tableModel.setValueAt(rs.getDate("releaseday"), i, 5); tableModel.setValueAt(rs.getString("status"), i, 6); System.out.println("行数=" + i + "/t"); i++; } //表を描画 frame.getContentPane().add(scrollPane); table.setModel(tableModel); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(true); table.getColumnModel().getColumn(0).setMinWidth(150); table.getColumnModel().getColumn(1).setPreferredWidth(150); table.getColumnModel().getColumn(1).setMinWidth(1); scrollPane.setViewportView(table); scrollPane.repaint(); //comboの設定 cb = new JComboBox(); cb.setEditable(true); cb.setBorder(BorderFactory.createEmptyBorder()); cb.addItem("-"); cb.addItem("貸出中"); cb.addItem("返却"); //7行目をcomboにする設定。 TableColumnModel tcm = table.getColumnModel(); TableColumn tc = tcm.getColumn(6); //コンボにする行(左から0) tc.setCellEditor(new DefaultCellEditor(cb)); //編集 tc.setCellRenderer(new ComboCellRenderer()); //表示 }catch(Exception ex) { System.out.println("例外発生:" + ex.toString()); JOptionPane.showMessageDialog(frame, "例外発生:" +ex.toString()); }finally { try { //実行結果をクローズ if(rs != null) { rs.close(); } //ステートメントをクローズ if(pstmt != null) { pstmt.close(); } //接続をクローズ if(con != null) { con.close(); } }catch(SQLException se) { //何もしない } } } }); btnNewButton.setBounds(301, 86, 105, 40); contentPane.add(btnNewButton);
試したこと
コードに問題があり、SQL文のinsert文とかみ合っていないことはなんとなくわかるのですが、どこを直せば解決するかがわからずにいます。
回答1件
あなたの回答
tips
プレビュー