質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

7174閲覧

snsを作っていて、consoleでorg.h2.jdbc.JdbcSQLException: 列番号が一致しませんのエラーが出ます。

edoooooo

総合スコア476

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2015/11/16 07:29

編集2015/11/16 09:27

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");
%>

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>たいち</title> </head> <body> <h1>たいちメイン</h1> <p> <%=loginUser.getName() %>さん、ログイン中 <a href="/taichi/Logout">ログアウト</a> </p> <p><a href="/taichi/Main">更新</a></p> <form action="/taichi/Main" method="post"> <input type="text" name="text"> <input type="submit" value="つぶやく"> </form> <% if(errorMsg !=null){ %> <p><%=errorMsg %></p> <% } else {%> <% for(Mutter mutter:mutterList){%> <p><%=mutter.getUserName() %>:<%=mutter.getText()%></p> <%} }%> </body> </html>

データベース接続のコードです。
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('綾部','いいなー');

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/11/16 07:56

実際にDBに登録するところのJavaコードとテーブル定義があると回答しやすくなると思います。
edoooooo

2015/11/16 09:18

ありがとうございます。追加いたしました。 よろしくお願いします。
guest

回答1

0

ベストアンサー

エラーは、servlet 側で発生していますかね
JdbcSQLException と出ているのでSQLに問題があると思いますよ。

生成した(された)SQLが正しいか確認してみてください。

投稿2015/11/16 08:23

trick

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2015/11/16 09:26

回答ありがとうございます。SQLとのことですが、本を写したコードなのですが、まちがっているのでしょうか?すみません、よろしくお願いします。 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('綾部','いいなー'); です。
trick

2015/11/16 09:41

String sql="INSERT INTO MUTTER(NAME,)VALUES(?,?)"; ここは String sql="INSERT INTO MUTTER(NAME,TEXT)VALUES(?,?)"; ではないでしょうか?
edoooooo

2015/11/16 09:54

無事動くようになりました。 ありがとうございます。 consoleでorg.h2.jdbc.JdbcSQLException: 列番号が一致しませんのエラーでは、引数の値を確認して、一致しているかを確認するということがわかりました。  大変勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問