• ベストアンサー

ブラウザ上に表示されたデータベースに追加

タイトルのことをしようとすると、「java.lang.NullPointerException」というエラーが出ますが、これを解消するにはどうすればよいのでしょうか? そのエラーがでるページのソースを上げておきます。 <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.sql.*" %> <%! //toUnicodeメソッドの定義 public String toUnicode(String s) throws java.io.UnsupportedEncodingException { return (new String(s.getBytes("8859_1"), "JISAutoDetect")); } %> <% //JDBCドライバのロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //データベースへ接続 String jdbcUrl = "jdbc:odbc:AnsSheet"; String user = "root"; String password = "progressive"; Connection con = DriverManager.getConnection(jdbcUrl,user,password); //SQL実行 Statement stmt = con.createStatement (); String sql = "INSERT INTO AnsSheet (問題, a, b, c, d, e, f) VALUES("; sql = sql + "'" + toUnicode(request.getParameter("問題")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("a")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("b")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("c")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("d")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("e")) + "',"; sql = sql + toUnicode(request.getParameter("f")) + ")"; int cnt = stmt.executeUpdate(sql); //接続解除 stmt.close(); con.close(); %> <jsp:forward page="keepAnsSheet.jsp" />

質問者が選んだベストアンサー

  • ベストアンサー
  • t-satoh
  • ベストアンサー率35% (211/591)
回答No.3

>新たに作った方のjspを直にアドレス入力してみると、先のプログラムとまったく同じ「java.lang.NullPointerException」と出ました。 >ということはデータがjspファイルに送られていないということでしょうか?  ということは、恐らく、パラメーターが取得できないために、 下記メソッドの引数がnullだからなのでしょう。 >public String toUnicode(String s) >throws java.io.UnsupportedEncodingException { >return (new String(s.getBytes("8859_1"), "JISAutoDetect")); >}  というか、提示されたことくらいやってみてください。 そうすれば、すぐに解るはずです・・・。(^^;)

その他の回答 (2)

  • t-satoh
  • ベストアンサー率35% (211/591)
回答No.2

 例外が発生している行が表示されているはずです。 このとき指している行は、 JSPがサーブレットに変換されたソースファイルの行です。 これから、該当するJSPの行を修正しましょう。 これが良く解らないなら、 System.out.println(con); System.out.println(stmt); とかして、どのオブジェクトがNullなのか見てみましょう。 Eclipceとか使っているなら、ツールの機能でも良いですから、 とにかく値を確認してみましょう。(^^;)

ice_crystal
質問者

お礼

お二方の回答ありがとうございます。 ちなみにACCESS(私はACCESS2003を使っています)で作ったデータベースをブラウザ上に表示することには成功しています。 データを追加するには、HTMLファイル(追加する情報の入力)とjspファイル(追加した後のDBの表示)の2つ出来ますよね? 似たようなプログラムを作ってみたのですが、新たに作ったほうはちゃんと動作しました。 新たに作った方のjspを直にアドレス入力してみると、先のプログラムとまったく同じ「java.lang.NullPointerException」と出ました。 ということはデータがjspファイルに送られていないということでしょうか? エラーの内容を書いておきます。 type:Exception report message:Internal Server Error description:The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request. exception java.lang.NullPointerException     以下例外の場所をズラーっと書いていますが、多すぎるので割愛します

  • keikan
  • ベストアンサー率42% (75/176)
回答No.1

con、stmt等が正しくオブジェクトを生成できていないか、すでになくなってしまっているオブジェクト等に対して処理しようとしているのかも。 正しくデータベースにコネクトできているのかな? できていないまま、データベースにアクセスしていませんか? 下記を参考にして例外処理組んで確認してみては。

参考URL:
http://www.atmarkit.co.jp/fjava/rensai/jdbc03/jdbc03.html#ap03

関連するQ&A

  • jspでデータベースにレコード追加

    表題のことをしたいのですが、 「HTTPステータス 500 - An exception occurred processing JSP page」という エラー表示がされてしまいます。 名前、会社、住所というテキストボックスに入力して 決定ボタンを押下するとデータベースにレコード追加されるのを 目的としていますが、下記のコードで間違いはありますでしょうか? ----------------------------------------------- <%@ page language="java" %> <%@ page import="java.sql.*"%> <%@ page contentType="text/html; charset=Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); String strName=request.getParameter("name"); String strCompany=request.getParameter("company"); String strAddress=request.getParameter("address"); Class.forName("com.mysql.jdbc.Driver"); String strConn= "jdbc:mysql://localhost/***" + "?user=****&password=****" + "&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn = DriverManager.getConnection(strConn); Statement stmt = conn.createStatement(); String strSql="insert into person (name,company,address) values('"+ strName + "'," + strCompany + "'," + strAddress + ")"; int result= stmt.executeUpdate(strSql); stmt.close(); conn.close(); %> <%//一覧ページにforward%> <jsp:forward page="****.jsp"/> ----------------------------------------------- >int result= stmt.executeUpdate(strSql); の行でエラーが出ているっぽいのですが。。。 TomcatとMySQLを使用しています。 ※環境など情報が不足していましたら、そちらもご指摘ください。  開発勉強中で、まだ理解が足りていない所が多数あります。

    • ベストアンサー
    • Java
  • JDBC PostgreSQLで必要なファイルはあるのでしょうか?

    LinuxでPostgreSQLのデータベースをJDBCでアクセスしたいのですが、以下のソースで次のエラーが発生します。何か必要なファイルでもあるのでしょうか? java.lang.ClassNotFoundException:org.postgres.Driver また、LinuxのODBCも必要なファイルがあるのでしょうか? import java.sql.*; class jdbcSample2 { public static void main(String argv[]) { int a; String b; try { //Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); //String url = "jdbc:odbc:test"; Class.forName ("org.postgres.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/test"; String user = ""; String password = ""; Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement (); String query = "select * from member;"; ResultSet rs = stmt.executeQuery (query); while(rs.next()){ a = rs.getInt(1); b = rs.getString(2); System.out.println(a + ", " + b); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } } }

  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • Java環境で使用するAccessデータベースについて

    以下の様な開発環境でシステムを構築しています。 OS:windowsXP DB:Microsoft Access 2002 j2sdk:1.4.2_05 Tomcat:4.1.30 Web上で登録画面を表示、登録されたデータをサーブレット経由でDBに登録しようとしたところ、「パラメータが少なすぎます」というメッセージが出て登録できませんでした。 DBおよびSQL構文のエリア名の記入ミスも調べましたが問題ない模様です。 AccessのODBCドライバ(MDAC2.5)について調べたところ、MDAC2.5を使用したSQL文では二重引用符(”)を文字列リテラルとして使用できないようです。 この問題を回避するよい方法があれば、ぜひ教示願います。 <コーディング内容> //postされた内容を受け取る String wkkanri = request.getParameter(“kanri_No”); String wkroom = request.getParameter(“room_No”); ------------------------------------------------- //ドライバクラスのロード、DB接続 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Connection con = DriverManager.getConnection(“jdbc:odbc:syataku”); Statement stmt = con.createStatement(); //insert用sql文の発行 String sql = “insert into kihon(kanri_No,room_No) values(wkkanri,wkroom)”; Stmt.executeUpdate(sql);

  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • java データベース接続

    javaの勉強していまして、質問があります。よろしくお願いします。 javaでデータベースの接続ができなくて迷っております。ずっとネットで調べてもダメでした。 ネットで調べたとおりにやっても、 例外発生:java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver このようなエラーがでます。 eclipseを使ってます。windows7 練習にアクセスにつなごうと思ってます。 事前にデータソース(ODBC)の登録はしました。 ドライバーとかインストールするものなのでしょうか? package sample; import java.sql.Connection; import java.sql.DriverManager; public class Hello { public static void main(String args[]) { try { //JDBCドライバのロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //各設定 String url = "jdbc:odbc:SampleDB030"; String user = ""; String pass = ""; //データベースに接続 Connection con = DriverManager.getConnection(url,user,pass); System.out.println("接続成功"); //データベースを切断 con.close(); } catch (Exception e) { System.out.println("例外発生:" + e ); } } }

    • ベストアンサー
    • Java
  • パッケージ org.gjt.mm.mysqlは存在しません

    いつもお世話になっております。 javaから、sqlを操作するプログラムを作っているのですが、 コンパイル時に「パッケージ org.gjt.mm.mysqlは存在しません」と、 エラーが発生してしまいます。 ソースコード----------------------- import java.sql.*; import org.gjt.mm.mysql.Driver; public class HelloWorldJDBCMySQL { public static void main(String[] args) { String user = "password"; String pass = "password"; try { // ドライバクラスをロード // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBCの場合 Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合 // データベースへ接続 // Connection con = // DriverManager.getConnection("jdbc:odbc:helloworld"); // ODBCの場合 // MySQLの場合 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url,user,pass); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM test"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // nameを取得 String no = rs.getString("name"); // addressを取得 String lang = rs.getString("address"); // メッセージを取得 //String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang ); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ----------------------------------- 環境変数--------------------------- CLASSPATH .;C:\sample4\WEB-INF\lib\mysql-connector-java-5.1.12-bin.jar ----------------------------------- どなたか、ご教授いただけますでしょうか?

    • ベストアンサー
    • Java
  • jspのエラー

    <%@ page contentType="text/html; charset=UTF-8" import="java.io.*, java.sql.*" %> <% Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost/database1?user=user1&password=password1&useUnicode=true&characterEncoding=UTF-8"); Statement stmt=con.createStatement(); ResultSet result=stmt.executeQuery("select * from table1;"); %> <table> <tr> <th>country</th> <th>city</th> </tr> <% while(result.next()) { %> <tr> <td> <%= result.getString(1) %></td> <td> <%= result.getString(2) %></td> </tr> <% } stmt.close(); con.close(); %> </table> でエラーがでてデータベースに接続できません メッセージは以下の通りです org.apache.jasper.JasperException: Exception in JSP: /gomitable1.jsp:12 11: Class.forName("com.mysql.jdbc.Driver"); 12: Connection con=DriverManager.getConnection("jdbc:mysql://localhost/database1?user=user1&password=password1&useUnicode=true&characterEncoding=UTF-8"); 13: Statement stmt=con.createStatement(); 14: ResultSet result=stmt.executeQuery("select * from table1;"); 15: %> 原因 javax.servlet.ServletException: Error during query: Unexpected Exception: java.io.CharConversionException message given: null このメッセージの意味もわかりません 何が悪いのでしょうか?

    • ベストアンサー
    • Java
  • JSP データベースへの数回の接続

     いつもお世話になっております。  今私は、JSPからデータベース(Access 2003)へデータを追加・検索をしようとしています。  データベースにデータを追加するため、データベースを接続する記述及び追加をする記述を書き、データを追加していきます。  その下の記述にHTMLが入り、HTML文の後に今度はデータベースに検索をかけてデータを取得し、その記述の下に更にHTML文を記述し取り込むといった流れでプログラムを書いております。 ■HTML文 ■データベース追加文 ■HTML文 ■データベース検索文 ■HTML(データベースからの取得データもいれる)  しかし、データベースへは、追加はされているのですが、検索の記述の部分がまったく読まれておらず、ジャンプされており、どうしても検索ができません。  JSPからデータベースへの接続は初めてですので、わからないことも多く、もしかしたらJSPでは数回のデータベースへの接続はできないのかな?と思いながら、最終的にこちらで伺い参りました。  プログラムが長いため、HTML文を除き、データベースの部分だけ下に記述させていただきます。その記述の中でのこの変数はどこからもってきているのかな?と思われる方もいらっしゃるかと思いますが、しっかり値が入っておりますので心配ございません。 <%@ page import="java.sql.ResultSet"%> <%@ page import="java.util.*" %> <%@ page import="javax.servlet.*" %> <%@ page import="java.sql.SQLException" %> <%@ page import="java.sql.Connection" %> <%@ page import="java.sql.*" %> <%@ page import="java.util.Date" %> <%@ page import="java.util.Calendar " %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con =null; con = DriverManager.getConnection("jdbc:odbc:QUIZDB"); Statement sql; sql = con.createStatement(); Calendar cal = Calendar.getInstance(); Integer nen=cal.get(Calendar.YEAR); Integer tu=cal.get(Calendar.MONTH)+ 1; Integer hi=cal.get(Calendar.DATE); String userName=(String)session.getAttribute("userName"); Integer userId=(Integer)session.getAttribute("userId"); sql.executeUpdate( "INSERT INTO Seiseki(氏名,ID,ジャンル,正解数,クイズ日付)"+"values('"+userName+"','"+userId+"','"+aa+"','"+seikaiten+"','"+nen+"/"+tu+"/"+hi+"')"); sql.close(); %> <■HTML文がはいります> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection db =null; db = DriverManager.getConnection("jdbc:odbc:QUIZDB"); String sq = "select * from Seiseki where(氏名= '"+userName+"') and (ID = '"+userId+"')"; Statement st; st = db.createStatement(); ResultSet res; res = st.executeQuery(sq); if(res.next()){    String Name=res.getString(1);    String Id=(String)res.getString(2);    Integer id =Integer.parseInt(Id); String jyanru=res.getString(3); String seikai=res.getString(4); int kazu =Integer.parseInt(seikai); String hizu=res.getString(5); } st.close(); %> <■HTML文が入り、変数を入れて表示させます> 以上となります。どんな小さなことでも構いませんので、お手数ですがアドバイス宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • データベースへ接続

    JAVAを使ってMySQLへ接続して、テーブルにデータを挿入するプログラムを作ったのですが、エラーが出てしまいます。 環境変数は CLASSPATHは .;%JAVA_HOME%\lib\tools.jar;C:\mysql-connector-java-3.0.16-ga\mysql-connector-java-3.0.16-ga\mysql-connector-java-3.0.16-ga-bin.jar;. PATHは %JAVA_HOME%\bin;C:\Program Files\MySQL\MySQL Server 4.1\bin JAVA_HOMEは C:\Program Files\Java\jdk1.5.0_11 です。 プログラム内容は // InsertSample.java import java.sql.*; class InsertSample { public static void main(String args[]){ Connection con = null; Statement stmt = null; // 引数のチェック if(args.length != 6){ System.out.println("usage : java InsertSample<id> <name> <yomi> <yubin> <address> <tel>"); return; } try { // JDBCドライバの登録 String driver = "org.gjt.mm.mysql.Driver"; // データベースの指定 String url = "jdbc:mysql://localhost/sampledb?useUnicode=true&characterEncoding=Shift_JIS"; String user = "root"; // 環境に応じて設定 String password = ""; // 環境に応じて設定 Class.forName (driver); // データベースとの接続 con = DriverManager.getConnection(url, user, password); stmt = con.createStatement(); // SQL文の作成 String sql = "INSERT INTO members VALUES('" + args[0] + "','" + args[1] + "','" + args[2] + "','" + args[3] + "','" + args[4] + "','" + args[5] + "'" + ")"; // 更新の実行 int num = stmt.executeUpdate(sql); System.out.println(args[0] + "の" + num + "行を追加"); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } finally { try{ // データベースのクローズ stmt.close(); con.close(); } catch (Exception ex) { ex.printStackTrace (); } } } } で、エラーの内容は java.sql.SQLEception : Invalid authorization specification massage from server : "Access denied for user 'root'@'localhost' (using password : NO)" とでてしまいます。どのように改善したらよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java