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

我应该怎么做来修改 Conn.java,因为当我运行 JSP 时它返回 NULL,当它转到conn1.queryInsert(insert)时?还有一件事,如果我使用 PreparedStatement,我应该怎么做才能让我的 JSP 和上面的一样?提前致谢

4

3 回答 3

0

请不要那样做。将它保存到您的数据访问层。不要用与 SQL 相关的代码弄乱您的 JSP。

此外,不要用 Java 代码污染您的 JSP。因此,用JSTL / EL代替scriplets 。

于 2012-10-24T03:30:10.207 回答
0

根据 MVC2 规则,所有与数据库问题相关的逻辑都应使用 DB bean 或 Hibernate、JDO 等框架保存在持久层中。并且所有业务逻辑都应该保存在 bean 类或 spring bean、ejb 会话 bean 组件中。如果您在任何小型应用程序中只使用 jsp,只需按照以下步骤操作:

  1. 创建一个单独的简单或 Bean 类,将所有属性都设为私有
  2. 以公共方法的形式在该类中编写您的逻辑
  3. 在你的jsp页面中使用<jsp:useBean>, <jsp:setProperty> and <jsp:getProperty>like标签来访问你的bean类的对象
  4. 使用 id(object refrence) 调用 Bean 类的所需方法

并且不推荐在jsp中放置java代码,尽量使用jstl或者自定义标签。

我希望它会帮助你... :)

于 2013-02-27T05:53:49.113 回答
0

请注意:建议在 JSP 中保留任何业务或数据访问逻辑。JSP 仅用于演示目的。此类数据访问相关代码应移至服务器端 JAVA 类中。请阅读MVC(模型-视图-控制器)模式以了解更多信息。

使用您的获取一个statement对象connection,传递您的字符串查询并按executeUpdate如下方式运行:

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