snsを作っていて、consoleでorg.h2.jdbc.JdbcSQLException: 列番号が一致しませんのエラーや、サーブレット jsp のServlet.service()が例外を投げました というエラーが出ます。
エラーがconsoleにだけ出るのですが、出るときの作業としては、コメントを入力して、つぶやいたときです。
ログインuser名と、コメントのtextが格納される部分のコードです。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.User,model.Mutter,java.util.List" %>
<%
//セッションスコープに保存されたUser情報を取得
User loginUser=(User)session.getAttribute("loginUser");
//アプリケーションスコープに保存されたつぶやきリストを取得
List<Mutter>mutterList=(List<Mutter>)request.getAttribute("mutterList");
//リクエストスコープに保存されたエラーメッセージを取得
String errorMsg=(String) request.getAttribute("errorMsg");
%>
データベース接続のコードです。
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Mutter;
public class MutterDAO{
private final String DRIVER_NAME="org.h2.Driver"; private final String JDBC_URL="jdbc:h2:file:/Users/endoutaichi/Documents/newworkspace/taichi/h2data.dat"; private final String DB_USER="sa"; private final String DB_PASS=""; public List<Mutter>findAll(){ Connection conn=null; List<Mutter>mutterList=new ArrayList<Mutter>(); try{ Class.forName(DRIVER_NAME); conn=DriverManager.getConnection( JDBC_URL,DB_USER,DB_PASS); //SELECT文の準備 String sql="SELECT ID,NAME,TEXT FROM MUTTER ORDER BY ID DESC"; PreparedStatement pStmt=conn.prepareStatement(sql); //SELECT文を実行 ResultSet rs=pStmt.executeQuery(); //SELECT文の結果をArrayListに格納 while(rs.next()){ int id=rs.getInt("ID"); String userName=rs.getString("NAME"); String text=rs.getString("TEXT"); Mutter mutter=new Mutter(id,userName,text); mutterList.add(mutter); } }catch(SQLException e){ e.printStackTrace(); return null; }catch(ClassNotFoundException e){ e.printStackTrace(); return null; }finally{ //データベース切断 if(conn !=null){ try{ conn.close(); }catch(SQLException e){ e.printStackTrace(); return null; } } } return mutterList; } public boolean create(Mutter mutter){ Connection conn=null; try{ //データベースへ接続 conn=DriverManager.getConnection(JDBC_URL,DB_USER,DB_PASS); //INSERT文の準備(idは自動連番なので指定しなくても良い) String sql="INSERT INTO MUTTER(NAME,)VALUES(?,?)"; PreparedStatement pStmt=conn.prepareStatement(sql); //INSERT文中の「?」に使用する値を設定しSQLを完成 pStmt.setString(1, mutter.getUserName()); pStmt.setString(2, mutter.getText()); //INSERT文を実行 int result=pStmt.executeUpdate(); if(result !=1){ return false; } }catch(SQLException e){ e.printStackTrace(); return false; }finally{ //データベース切断 if(conn !=null){ try{ conn.close(); }catch(SQLException e){ e.printStackTrace(); } } } return true; }
}
データベースを作りINSERT したコードです。
CREATE TABLE MUTTER ( ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(100) NOT NULL, TEXT VARCHAR(255) NOT NULL );
INSERT INTO MUTTER (NAME ,TEXT)VALUES ('灘','今日は休みだ');
INSERT INTO MUTTER (NAME ,TEXT) VALUES('綾部','いいなー');
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー