我还是JSP或Java的新手。我目前正在使用现有的Java代码,所谓的 Conn.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与上面相同? 提前致谢
答案 0 :(得分:0)
请注意: 不建议在JSP中保留任何业务或数据访问逻辑。 JSP仅用于演示目的。此类数据访问相关代码应在服务器端JAVA类中移动。请阅读 MVC (模型 - 视图 - 控制器)模式以了解更多信息。
使用statement
获取connection
个对象,传递字符串查询并运行executeUpdate
,如下所示:
conn1.open();
Statement statement = conn1.createStatement();
statement.executeUpdate(insert);
conn1.close();
答案 1 :(得分:0)
此外,不要使用Java代码污染JSP。因此,请改为使用JSTL / EL代替字谜。
答案 2 :(得分:0)
根据MVC2规则,所有与数据库问题相关的逻辑应该使用DB bean或Hibernate,类似JDO的框架保存在持久层中。并且所有业务逻辑都应保存在bean类或spring bean,ejb会话bean组件中。 如果您在任何小型应用程序中仅使用jsp,请按照以下步骤操作:
<jsp:useBean>, <jsp:setProperty> and <jsp:getProperty>
之类的标签来访问bean类的对象不建议将java代码放在jsp中,因此请尝试使用jstl或自定义标记。
我希望它能帮助你...... :)。