0

入力フォームを作成し、javabean と jsp を使用してそれらを mysql データベースに保存しようとしています。jsp を使用するのはこれが初めてなので、このプログラムが操作への挿入に対して誤った条件を実行する理由がわかりません。

コードは次のとおりです。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;

public class Formulir {
    public String username;
    public String nama;
    public String ttl;
    public String alamat;
    public String telp;
    public String id_form;
    public Statement stmt=null;
    public Connection conn = null;
    public String sURL = "jdbc:odbc:formulir";

    public boolean insertIntoDB (String username, String nama, String ttl, String alamat, String telp, String id_form) {
        String sql = "insert into formulir values('"+username+"', '"+nama+"', '"+ttl+"', '"+alamat+"', '"+telp+"', '"+id_form+"')";
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection(sURL, "", "");
            stmt=conn.createStatement();
            stmt.execute(sql);
            stmt.close();
            return true;
        } catch(Exception e) {
            return false;
        }
    }

これは、入力フォーム プロセスのコードです。

<jsp:useBean id="formulir" scope="session" class="BMS.Formulir" />
<jsp:setProperty name="formulir" property="*" />
<% if ((String)session.getAttribute("username")==null &&       (String)session.getAttribute("password")==null){
response.sendRedirect("daftar.jsp");} %>

<%
String username=(String)session.getAttribute("username");
String nama=request.getParameter("nama");
String ttl=request.getParameter("ttl");
String alamat=request.getParameter("alamat");
String telp=request.getParameter("telp");
String id_form="NULL";
%>

<html>
    <h2> <%=formulir.insertIntoDB(username, nama, ttl, alamat, telp, id_form)%> </h2>
</html>

これは formulir table の構造です:

username (varchar)
nama (varchar)
ttl (varchar)
alamat (varchar)
telp (varchar)
id_form (int)
4

4 に答える 4

2

何かがうまくいかない可能性のある場所がかなりありますが、あなたの構造はそれらすべてを隠しています. (これが、可能であれば非常に具体的な例外タイプを使用する理由の 1 つです);

  1. これが最も可能性の高い問題だと思いますid_form。 SQLvarcharを で囲んでキャストしています''"+id_form+"'に変更"+id_form+"
  2. sun.jdbc.odbc.JdbcOdbcDriverロードされない場合があります。これにより、ClassNotFoundException が発生します。catch(ClassNotFoundException e)それを調べるブロックを作成できます。その問題の 1 つの修正がこの質問に示されています。
  3. 接続文字列では、DB へのアクセスが許可されていません。これは によってスローされるエラーDriverManager.getConnectionであり、SqlException. ブロックを追加しcatch(SqlException e)、エラーが発生した場合は、構成ファイルの資格情報を使用して DB に接続できることを確認してください。
  4. からも例外が発生する可能性がありますcreateStatementが、これは と同じ問題が原因である可能性がありgetConnectionます。

半関連のメモ: PreparedStatementと呼ばれるものを調べたいと思うかもしれません。これにより、コードが攻撃を受けにくくなるだけでなく、そのタイプのキャストの問題を回避するのにも役立ちます。

于 2013-05-23T14:06:04.637 に答える
0

あなたの id_form は int のテーブルにありますが、値を ' ' に入れています

于 2013-05-23T14:03:35.363 に答える