- 论坛徽章:
- 0
|
网上好多教程讲的都是不对的,发个例子!
这里用到了oracle的jdbc2驱动;
struts数据连接池,可自行修改成自己的连接方式。
String title = "";
if(request.getParameter("title")!=null) title=request.getParameter("title").trim();
String author = "";
if(request.getParameter("author")!=null) author=request.getParameter("author").trim();
String content = "";
if(request.getParameter("content")!=null) content=StringBean.strReplace(request.getParameter("content"),"'","").trim();
String tid="";
if(request.getParameter("tid")!=null) tid=request.getParameter("tid").trim();
String flg="";
if(request.getParameter("flg")!=null) flg=request.getParameter("flg").trim();
//保存添加
if(flg.equals("add")){
if (title.equals("") || content.equals("")) {
session.putValue("successMessage","标题和内容不能为空!");
response.sendRedirect("../main.jsp");
} else {
String seq = "SEQ_T_NEWS_THREAD.nextval";
String sql = "insert into t_news_thread(tid,title,author,class_id,content) values("+seq+",'"+title+"','"+author+"',0,EMPTY_BLOB())";
try {
//通过STRUTS获取数据源
Connection conn = null;
DataSource ds = (DataSource) application.getAttribute(Action.DATA_SOURCE_KEY);
conn = ds.getConnection();
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
sql = "select content from t_news_thread for update order by tid desc"; // 使用"FOR UPDATE"得到表的写锁
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
BLOB blob = ((OracleResultSet) rs).getBLOB("content"); // 得到BLOB对象
OutputStream outout = blob.getBinaryOutputStream(); // 建立输出流
InputStream in = new ByteArrayInputStream(content.getBytes()); //字符串转换为数据流
int size = blob.getBufferSize();
byte[] buffer = new byte[size]; // 建立缓冲区
int len;
while ((len = in.read(buffer)) != -1)
outout.write(buffer, 0, len);
in.close();
outout.close();
}
conn.commit();
stmt.close();
conn.close();
response.sendRedirect("news_list.jsp");
} catch (Exception e) {
e.printStackTrace();
session.putValue("successMessage","对不起,系统超时,请重新操作!");
response.sendRedirect("../main.jsp");
}
}
}
//保存修改
else if(flg.equals("mod")){
if (title.equals("") || content.equals("")) {
session.putValue("successMessage","标题和内容不能为空!");
response.sendRedirect("../main.jsp");
} else {
String seq = "SEQ_T_NEWS_THREAD.nextval";
String sql = "update t_news_thread set title='"+title+"',author='"+author+"',content=EMPTY_BLOB() where tid="+tid;
try {
//通过STRUTS获取数据源
Connection conn = null;
DataSource ds = (DataSource) application.getAttribute(Action.DATA_SOURCE_KEY);
conn = ds.getConnection();
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
sql = "select content from t_news_thread where tid='"+tid+"' for update"; // 使用"FOR UPDATE"得到表的写锁
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
BLOB blob = ((OracleResultSet) rs).getBLOB("content"); // 得到BLOB对象
OutputStream outout = blob.getBinaryOutputStream(); // 建立输出流
InputStream in = new ByteArrayInputStream(content.getBytes()); //字符串转换为数据流
int size = blob.getBufferSize();
byte[] buffer = new byte[size]; // 建立缓冲区
int len;
while ((len = in.read(buffer)) != -1)
outout.write(buffer, 0, len);
in.close();
outout.close();
}
conn.commit();
stmt.close();
conn.close();
response.sendRedirect("news_list.jsp");
} catch (Exception e) {
e.printStackTrace();
session.putValue("successMessage","对不起,系统超时,请重新操作!");
response.sendRedirect("../main.jsp");
}
}
}
//删除
else if(flg.equals("del")){
try{
//通过STRUTS获取数据源
Connection conn = null;
DataSource ds = (DataSource) application.getAttribute(Action.DATA_SOURCE_KEY);
conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate("delete from t_news_thread where tid="+tid);
conn.commit();
stmt.close();
conn.close();
response.sendRedirect("news_list.jsp");
} catch (Exception e) {
e.printStackTrace();
session.putValue("successMessage","对不起,系统超时,请重新操作!");
response.sendRedirect("../main.jsp");
}
}
%>
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8718/showart_94087.html |
|