/*
* 作者:Author1
* 版本:Version1
*
* 应用程序的名称:StreamsMessagingBean.java
* 开发环境:Oracle JDeveloper 10g
* 创建/修改历史:
*
*History1
*
*/
//包名
package oracle.otnsamples.streams;
//JDBC导入
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
//IO导入
import java.io.IOException;
//Java工具类
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Hashtable;
import java.util.Enumeration;
//Servlet导入
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
//Oracle JDBC导入
import oracle.jdbc.pool.OracleDataSource;
//其他导入
import oracle.otnsamples.streams.Product;
/**
* 这个类包含制造商从其本地数据库获取信息并连接数据库
* 以添加产品信息、更新产品资料或删除产品的方法。
*/
public class StreamsMessagingBean {
/**
* 初始化连接对象
*/
private Connection conn = null;
/**
* 占据任务对象
*/
private HttpSession session = null;
/**
* 这个方法读取作为参数传递的属性文件,并将它装载到java属性对象中,然后返回它。
*
* 参数
* 异常IOException:IO异常
*/
public static Properties loadParams( String file ) throws IOException {
//从它装载ResourceBundle并创建属性
Properties prop = new Properties();
ResourceBundle bundle = ResourceBundle.getBundle( file );
Enumeration enum = bundle.getKeys();
String key = null;
while( enum.hasMoreElements() ) {
key = (String)enum.nextElement();
prop.put( key, bundle.getObject( key ) );
}
return prop;
}
/**
* 使用Oracle数据源对象来创建数据库连接。
*用ConnForFirstDB.properties文件中的适当值替换数据库连接的参数。
*/
public void dbConnection() {
try {
//创建OracleDataSource实例
OracleDataSource ods = new OracleDataSource();
//装载属性文件来获得连接信息
Properties firstDbConnProp =
StreamsMessagingBean.loadParams("ConnForFirstDB");
StreamsMessagingBean.configureDataSource(ods, firstDbConnProp);
//创建连接对象
conn = ods.getConnection();
} catch (SQLException sqlEx){ //处理SQL错误
System.out.println("SQL Errors = " + sqlEx.toString());
} catch(Exception excep) { //处理其他错误
System.out.println(" Couldn't retrieve connection... "+ excep.toString());
}
}
/**
* 这个方法有助于配置数据源
* 参数ods:Oracle数据源对象
* 参数prop:属性对象
*/
public static void configureDataSource(OracleDataSource ods,
Properties prop) {
//驱动类型为'oci8'
ods.setDriverType ("oci8");
//TNSEntry的名称
ods.setTNSEntryName((String)prop.get("TnsEntryName"));
//设置用户名
ods.setUser((String)prop.get("UserName"));
//设置口令
ods.setPassword((String)prop.get("Password"));
}
/**
* 这个方法有助于本地数据库的现有全部产品的资料
* 并返回它来显示在JSP中。
* 返回:产品的资料
* 异常Exception:无异常报告情况下的异常
*/
public Hashtable getProductDetails() throws Exception {
//声明语句
Statement stmt = null;
ResultSet rset = null;
Product productObj = null;
//占据产品的详情
Hashtable productDetails = new Hashtable();
//构建查询来获取产品的详情
String query = "SELECT productId, productName, "
+ "NVL(productdesc,'NOT SPECIFIED'), price, quantityOnHand"
+ " FROM prodstore.Product_Master";
//创建语句
stmt = conn.createStatement();
//执行查询并获取产品详情
rset = stmt.executeQuery(query);
//在哈斯表中存储产品的详情
while(rset.next()) {
productObj = new Product(rset.getInt(1), rset.getString(2),
rset.getString(3),
rset.getFloat(4), rset.getInt(5));
productDetails.put(new Integer(rset.getInt(1)), productObj);
}
//执行清除
rset.close();
stmt.close();
//返回产品详情
return(productDetails);
}
/**
* 这个方法有助于在数据库中添加产品。
* 参数request:HttpServletRequest对象
* 参数throws异常:意外错误
*/
public void addProduct(HttpServletRequest request) throws Exception {
PreparedStatement pstmt = null;
//预备查询
pstmt = conn.prepareStatement("INSERT INTO prodstore.Product_Master "
+ "(productId, productName, productDesc, price, quantityOnHand)"
+ " VALUES (prodstore.Product_Id_Seq.nextVal, ?, ?, ?, ?)");
//从请求获取输送详情并设置它们
pstmt.setString(1, request.getParameter("ProductNameReq"));
pstmt.setString(2, request.getParameter("ProductDesc"));
pstmt.setFloat(3, Float.parseFloat(request.getParameter("PriceReq")));
pstmt.setInt(4, Integer.parseInt(request.getParameter("QuantityReq")));
//执行预备好的语句
pstmt.executeUpdate();
//关闭预备好的语句
pstmt.close();
//获取添加到数据库中的产品id
int productId = this.retrieveProductId();
//在数据库中得到产品详情
Hashtable productsList = this.getProductDetails();
//获取正在使用的任务
session = request.getSession(false);
//在任务中存储详情
session.setAttribute("ProductIds", new Integer(productId));
session.setAttribute("ProductsList", productsList);
}
/**
* 这个方法有助于从序列中获取正在使用的产品id。
* 返回:产品的Id
* throws异常:意外错误
*/
private int retrieveProductId() throws Exception {
Statement stmt = null;
ResultSet rset = null;
int prdId = 0;
//构建查询来获得已添加产品的id
String query = "SELECT prodstore.Product_Id_Seq.currval FROM dual";
//创建语句
stmt = conn.createStatement();
//执行查询
rset = stmt.executeQuery(query);
if(rset.next()) {
prdId = rset.getInt(1);
}
//执行清除
rset.close();
stmt.close();
//返回产品的id
return prdId;
}
/**
* 这个方法有助于删除所选产品的资料。
* 参数request:HttpServletRequest对象
* 异常Exception:意外错误
*/
public void deleteProducts(HttpServletRequest request) throws Exception {
PreparedStatement pstmt = null;
//获取选作删除用的产品id
String[] deletePrds = request.getParameterValues("PrdIDSelected");
//构建查询
StringBuffer queryString = new StringBuffer("DELETE FROM "
+ "prodstore.Product_Master WHERE"
+ " productId IN (");
int length = deletePrds.length;
for(int i=0;i<length;i++) {
queryString.append("?");
if (i < (length-1)) {
queryString.append(", ");
}
}
queryString.append(")");
//预备查询
pstmt = conn.prepareStatement(queryString.toString());
//设置参数值
for(int i=0;i<length;i++) {
pstmt.setInt(i+1, new Integer(deletePrds[i]).intValue());
}
//执行预备好的语句
pstmt.executeUpdate();
//关闭预备好的语句
pstmt.close();
// Retrieve the details of the products in database
Hashtable productsList = this.getProductDetails();
//获取正在使用的任务
session = request.getSession(false);
session.setAttribute("ProductIds", deletePrds);
session.setAttribute("ProductsList", productsList);
}
/**
* 这个方法有助于更新所选产品的资料。
* 参数request:HttpServletRequest对象
* 异常Exception:意外错误
*/
public void updateProduct(HttpServletRequest request) throws Exception {
PreparedStatement pstmt = null;
//获取选作更新用的产品id
String productId = request.getParameter("PrdId");
//预备查询
pstmt = conn.prepareStatement("UPDATE prodstore.Product_Master "
+ " SE
评论0