-1

私はまだJSPまたはJavaの初心者です。私は現在、Conn.javaと呼ばれる既存のJavaコードを次のように使用しています。

  package org.myclass.auth;

  import java.sql.*;
  import org.myclass.global.Variable;
  import org.myclass.auth.LoadProps;
  import org.apache.commons.dbcp.BasicDataSource;
  import javax.sql.DataSource;

  public class Conn {
     String success = "";
  public LoadProps app;
  public Variable var = new Variable();
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  int x = 0;

  public Conn(String path)  {
     app = new LoadProps(path);
  }
  public Conn()  {
     app = new LoadProps(var.getPATH());
  }
  public boolean open() {
     boolean success = false;

    try {
        DataSource dataSource = setupDataSource(app.getUrl(), app.getUser(), app.getPassword());
        conn = dataSource.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return success;
  }
  public DataSource setupDataSource(String connectURI, String connectUser, String connectPassword) {
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName("com.mysql.jdbc.Driver");
    ds.setUsername(connectUser);
    ds.setPassword(connectPassword);
    ds.setUrl(connectURI);
return ds;
   }
  public static void printDataSourceStats(DataSource ds) throws SQLException {
     BasicDataSource bds = (BasicDataSource) ds;
  }

  public static void shutdownDataSource(DataSource ds) throws SQLException {
     BasicDataSource bds = (BasicDataSource) ds;
     bds.close();
  }

  public String getUrl()  {
     return app.getUrl();
  }
  public String getUser()  {
     return app.getUser();
  }
  public String getPassword()  {
    return app.getPassword();   
  }

  public void close() throws SQLException {
      if(!conn.isClosed())    {
        conn.close();
     }
  }
  public ResultSet query(String query)    {
      try {         
         st = conn.createStatement();  
         rs = st.executeQuery(query);
     }
     catch(SQLException sqle) {
        sqle.printStackTrace();
     }
    return rs;
   }
   public boolean queryInsert(String query)    {
       boolean value = false;
      try {
        st = conn.createStatement();
        value = st.execute(query);            
        value = true;
    }
    catch(SQLException sqle) {
        sqle.printStackTrace();
    }
    return value;
    }
   public int queryUpdate(String query)    {
       int value = 0;
       try {
            st = conn.createStatement();
           value = st.executeUpdate(query);
       }
       catch(SQLException sqle) {
          sqle.printStackTrace();
     }
    return value;
}

}

PreparedStatementを使用するために、後で次のようなJSPコードでのみこれを呼び出します。

    <%@ page import="java.io.*,java.util.*,java.sql.*"%>
    <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
    <%@ page import="org.myclass.auth.Conn" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>


    <%    
        String query = "SELECT adminid FROM administrator where username =  '"+ session.getAttribute("username") +"'";
        Conn conn = new Conn();
        ResultSet rsQ;
        conn.open();
        rsQ = conn.query(query);
        rsQ.next();

        int adminid = rsQ.getInt(1);
        conn.close();


        Conn conn1 = new Conn();
        String insert = "INSERT INTO campaign  (uid,sender_id,content,Starttime,status,lastmodifiedid,creationtime,msisdnfile) VALUES('"+ adminid +"','"+ request.getParameter("sender_id") +"','"+request.getParameter("message")+"','"+request.getParameter("startTime")+"','Running','"+adminid+"',now(),'file2.txt')";
        out.print(insert);
        conn1.open();
        conn1.queryInsert(insert);
        conn1.close();
    %>

JSPを実行すると、 conn1.queryInsert(insert)に移動するとNULLが返されるため、Conn.javaを変更するにはどうすればよいですか?そしてもう1つ、PreparedStatementを使用する場合、JSPを上記と同じに保つために何をすべきでしょうか。前もって感謝します

4

3 に答える 3

0

注:ビジネスまたはデータ アクセス ロジックを JSP に保持することはお勧めしません。JSP は、プレゼンテーションのみを目的としています。このようなデータ アクセス関連のコードは、サーバー サイドの JAVA クラスに移動する必要があります。詳細については、 MVC (Model-View-Controller) パターンについてお読みください。

statementを使用してオブジェクトを取得し、connection文字列クエリを渡し、次のように実行executeUpdateします。

   conn1.open();
   Statement statement = conn1.createStatement();
   statement.executeUpdate(insert);
   conn1.close();
于 2012-10-24T03:23:05.980 に答える
0

MVC2 ルールに従って、データベースの問題に関連するすべてのロジックは、DB Bean または Hibernate、JDO のようなフレームワークを使用して永続化レイヤーに保持する必要があります。また、すべてのビジネス ロジックは、Bean クラスまたは Spring Bean、ejb セッション Bean コンポーネントのいずれかに保持する必要があります。小さなアプリケーションで jsp のみを使用している場合は、次の手順に従ってください。

  1. すべてのプロパティを非公開にする単純なクラスまたは Bean クラスを個別に作成します。
  2. パブリック メソッドの形式でそのクラスにロジックを記述します。
  3. <jsp:useBean>, <jsp:setProperty> and <jsp:getProperty>Bean クラスのオブジェクトにアクセスするには、jsp ページで like タグを使用します。
  4. id(object refrence) を使用して Bean クラスの必要なメソッドを呼び出します

また、java コードを jsp に配置することは推奨されないため、jstl またはカスタム タグを使用してみてください。

お役に立てば幸いです... :)

于 2013-02-27T05:53:49.113 に答える
0

そうしないでください。それをあなたのData Access Layerに保管してください。SQL 関連のコードで JSP を台無しにしないでください。

さらに、Java コードで JSP を汚染しないでください。したがって、代わりにスクリプトレットを JSTL / ELに置き換えます。

于 2012-10-24T03:30:10.207 に答える