首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统-> Windows 2000教程
JSP学习——全面解析JDBC(6)-JSP教程,Jsp/Servlet
作者:网友供稿 点击:29
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
 基于jdbc有哪些数据库通用访问方法?

  1. 通用数据库bean设计

  本实例中对数据库连接和执行sql语句等通用数据库操作进行了封装,通过实现dbconnbean和dbquerybean两个javabean来完成上述功能。其中dbconnbean负责java应用程序和数据库的连接;dbquerybean提供了一组执行标准sql的功能,可以实现标准sql完成的所有功能。其功能代码分别如下所示:

  ① dbconnbean.java的源代码如下所示:

package dbaccess;
import java.sql.*;
import java.util.*;
import java.io.*;
public class dbconnbean
implements serializable{

private string dbdriver = "sun.jdbc.odbc.jdbcodbcdriver";
private string dbhost = "127.0.0.1";
private string dbname = "demo";
private string conp = "jdbc:odbc:db_demo";
private string username = "";
private string password = "";
private boolean xdebug = true;

public connection con = null;

public string sql = null;

statement stmt = null;
public resultset result = null;
private int affectedrows = 0;

public dbconnbean()
{
xdebug = true;
con = null;
sql = null;
}
public connection connect()
throws exception
{
string msg = null;
try
{
class.forname(dbdriver).newinstance();
}
catch(exception e)
{
msg = "加载数据库驱动失败";
if (xdebug) msg += "(驱动"+dbdriver+")";
throw new exception(msg);
}
try
{
string constr = conp;
con = drivermanager.getconnection(constr,username,password);
}
catch(sqlexception e)
{
msg = "!!数据库连接失败";
if (xdebug)
{
msg += "(错误信息=" + e.getmessage()+" sql状态值=" + e.getsqlstate()+" 错误代码=" + e.geterrorcode()+")";
}
throw new exception(msg);
}
return con;
}
protected void finalize()
throws throwable
{
super.finalize();
if (stmt != null) stmt.close();
if (result != null) result.close();
}
//最近一次对数据库查询受影响的行数
public int getaffectedrows()
{
return affectedrows;
}
public connection getcon()
{
return con;
}
public string getconp()
{
return conp;
}
public string getdbdriver()
{
return dbdriver;
}
public string getdbname()
{
return dbname;
}
public boolean getdebug()
{
return xdebug;
}
public string getpassword()
{
return password;
}
public resultset getresult()
{
return result;
}
public string getsql()
{
return sql;
}
public string getusername()
{
return username;
}
public void over()
throws throwable
{
finalize();
}
public resultset query()
throws exception
{
result = null;
affectedrows = 0;
if (con == null)
connect();
if (stmt == null)
stmt = con.createstatement();
if (sql.substring(0,6).equalsignorecase("select"))
{
result = stmt.executequery(sql);
}
else
{
affectedrows = stmt.executeupdate(sql);
}
return result;
}
public resultset query(string s)
throws exception
{
sql = s;
return query();
}
public void setdbdriver(string s)
{
dbdriver = s;
}
public void setdebug(boolean b)
{
xdebug = b;
}
public void setgetconp(string s)
{
conp = s;
}
public void setgetdbname(string s)
{
dbname = s;
}
public void setgetusername(string s)
{
username = s;
}
public void setpassword(string s)
{
password = s;
}
public void setsql(string s)
{
sql = s;
}
}


② dbquerybean.java的源代码如下所示:
package dbaccess;
import java.sql.*;
import java.util.*;
import java.io.*;
import java.lang.reflect.*;

public class dbquerybean
implements serializable
{
dbconnbean dbc;
string sql = null;
int rowcount = 0;
int colcount = 0;
// int limitcount = 0;
vector result = null;
public string _watch = "";

public dbquerybean()
{
dbc = new dbconnbean();
try {
dbc.connect();
} catch(exception e) {
handleexception(e);
}
}
protected void finalize()
throws throwable
{
super.finalize();
if (dbc != null) dbc.over();
if (result != null) result.removeallelements();
}
public string get(int row, int col)
{
if (result==null || row >= result.size()) return null;
string r[] = (string[])result.elementat(row);
if (col >= java.lang.reflect.array.getlength(r)) return null;
return r[col];
}
public int getaffrows() { return dbc.getaffectedrows(); }
public int getcolumncount() {
return colcount;
}
public string[] getrow(int row)
{
if (result==null || row >= result.size()) return null;
return (string [])result.elementat(row);
/*string ret[] = new string[colcount];
vector r = (vector)result.elementat(row);
for (int i=0; i<colcount; i++)
ret[i] = (string)r.elementat(i);
return ret;*/
}
public int getrowcount() {
return rowcount;
}
public void handleexception(exception e)
{
_watch = e.getmessage();
}
public void init()
{
rowcount = 0;
colcount = 0;
// limitcount = 0;
result = null;
}
public void over()
throws throwable
{
finalize();
}
public int query(string sql)
{
result = new vector();
int ret = 0;
try {
resultset rs = dbc.query(sql);
if (rs == null)
{
ret = dbc.getaffectedrows();
}
else
{
resultsetmetadata rm = rs.getmetadata();
colcount = rm.getcolumncount();
while (rs.next())
{
string row[] = new string[colcount];
for (int i=0; i<colcount; i++)
row[i] = rs.getstring(i+1);
result.addelement(row);
rowcount++;
}
rs.close(); // to release the resource.
ret = result.size();
}
}
catch(exception e)
{
handleexception(e);
return -1;
}

return ret;
}
}


  2. 数据库表结构

  本实例中主要出现了三个数据库表,表名和字段分别如下所示:

  计划采购表:jhcg_table


字段名称 中文名称 类型 长度
goods_no 物品编号 vchar 10
goods_name 物品名称 vchar 50
amount 采购数量 int
price 采购单价 float
gold 币种 vchar 15
units 单位 vchar 10
date 时间 date
remark 备注 vchar 100

  库存统计表:kctj_table


字段名称 中文名称 类型 长度
goods_no 物品编号 vchar 10
goods_name 物品名称 vchar 50
amount 库存数量 int
date 时间 date

remark 备注 vchar 100

  实际采购表:sjcg_table



字段名称 中文名称 类型 长度
goods_no 物品编号 vchar 10
goods_name 物品名称 vchar 50
amount 采购数量 int
price price 采购单价 float
gold 币种 vchar 15
units 采购单位 vchar 10
date 时间 date
remark 备注 vchar 100

  其中业务逻辑非常简单,即根据计划采购表和库存统计表生成实际采购表。同时,对各表完成数据库的增、删、改、查等通用操作。

  3. jsp设计

  ① 插入操作

  完成对数据库表的记录插入功能,其中计划采购表的插入主页面(insert_jhcg.htm)为:

  insert_jhcg.htm将用户输入传送给demo_insert_jhcg.jsp,完成插入操作。改jsp文件的功能代码为:
<html>
<body>
<jsp:usebean id="dbconn" class="dbaccess.dbconnbean" scope="page"/>
<jsp:usebean id="dbbean" class="dbaccess.dbquerybean" scope="page"/>
<hr>
<!--test javabean-->
<%
if (dbconn == null||dbbean == null){
out.println("javabean not found!");
return;
}
%>

<!--try db_demo connection-->
<%
try{
dbconn.connect();
}catch(exception e){
out.println(e.getmessage());
}
%>

<!--execute sql statement-->
<%
string insgoodno = request.getparameter("ed_jhcg_no");
string insgoodname = request.getparameter("ed_jhcg_name");
int insamount = (integer.valueof(request.getparameter("ed_jhcg_amount"))).intvalue();
float insprice = (float.valueof(request.getparameter("ed_jhcg_price"))).floatvalue();
string insgold = request.getparameter("ed_jhcg_gold");
string insunit = request.getparameter("ed_jhcg_unit");
string insremark = request.getparameter("ed_jhcg_remark");
string sqlstatement = "insert into jhcg_table(good_no,good_name,amount,
price,gold,unit,remark) values("+""+insgoodno+""+","+""+insgoodname+""+",
"+insamount+","+insprice+","+""+insgold+""+","+""+insunit+""+","+""+
insremark+""+")";
try{
dbbean.query(sqlstatement);
}catch(exception e){
out.println(e.getmessage());
}
%>
<a href="demo_main.htm">records inserted...click here to return</a></p>
</body>
</html>


  ② 查询操作

  该查询主页面主要提供对三个数据库表的条件查询功能,

  query.htm将用户选择查询的数据库表和查询条件发送给demo_query.jsp,由jsp文件完成数据库查询操作和查询结果集的返回及显示,其功能代码如下:
<html>
<body>
<%
string sqlstatement;
string sqlfield = "";
string whichtable = "";
string whereclause = "";
string queryno = "";
string queryname = "";
%>
<jsp:usebean id="dbconn" class="dbaccess.dbconnbean" scope="page"/>
<jsp:usebean id="dbbean" class="dbaccess.dbquerybean" scope="page"/>
<hr>
<!--test javabean-->
<%
if (dbconn == null||dbbean == null){
out.println("javabean not found!");
return;
}
%>

<!--try db_demo connection-->
<%
try{
dbconn.connect();
}catch(exception e){
out.println(e.getmessage());
}
%>

<!--prepare sql statement-->
<%
string queryrequest = request.getparameter("rb_request");
//out.println("queryrequest:"+queryrequest);
string whichcb = "";
if (queryrequest.equals("1")){
whichcb = "ck_jhcg";
whichtable = "jhcg_table";
queryno = request.getparameter("ed_jhcg_no");
queryname = request.getparameter("ed_jhcg_name");
if (!queryno.equals(""))
whereclause = " where good_no="+""+queryno+"";
if (!queryname.equals("")){
if (!queryno.equals(""))
whereclause += " and good_name="+""+queryname+"";
else whereclause = " where good_name="+""+queryname+"";
}
}
if (queryrequest.equals("2")){
whichcb = "ck_kctj";
whichtable = "kctj_table";
queryno = request.getparameter("ed_kctj_no");
queryname = request.getparameter("ed_kctj_name");
if (!queryno.equals(""))
whereclause = " where good_no="+""+queryno+"";
if (!queryname.equals("")){
if (!queryno.equals(""))
whereclause += " and good_name="+""+queryname+"";
else whereclause = " where good_name="+""+queryname+"";
}

}
if (queryrequest.equals("3")){
whichcb = "ck_sjcg";
whichtable = "sjcg_table";
queryno = request.getparameter("ed_sjcg_no");
queryname = request.getparameter("ed_sjcg_name");
if (!queryno.equals(""))
whereclause = " where good_no="+""+queryno+"";
if (!queryname.equals("")){
if (!queryno.equals(""))
whereclause += " and good_name="+""+queryname+"";
else whereclause = " where good_name="+""+queryname+"";
}

}
string[] printtitle = request.getparametervalues(whichcb);

%>
<!--create query sql statement-->
<%
sqlstatement = "select ";
for(int i = 0;i<printtitle.length;i++){
sqlfield += printtitle[i]+",";
}
sqlstatement += sqlfield.substring(0,sqlfield.length()-1)+" from "+whichtable;
if (!whereclause.equals(""))
sqlstatement += whereclause;
%>
<!--show query response-->
<%
try{
dbbean.query(sqlstatement);
}catch(exception e){
out.println("database error!");
}
int rows = dbbean.getrowcount();
int cols = dbbean.getcolumncount();
%>
<table align="center" width="80%" border=1>
<tr align=center>
<%
for(int i = 0;i < printtitle.length;i++){
out.println("<td><b>");
out.println(printtitle[i]);
out.println("</b></td>");
}
%>
</tr>
<%
for (int i = 0;i < rows;i++){
out.println("<tr>");
for (int j = 0;j < cols;j++)
out.println("<td>"+dbbean.get(i,j)+"</td>");
out.println("</tr>");
}
%>
</table>
<br>
<hr>
<a href="demo_main.htm">click here to return</a></p>
</body>
</html>


  ③ 生成实际采购表

  生成数据库表是一个隐式操作,程序根据计划采购表和库存统计表的相应字段生成实际采购表,不需要用户的任何输入,其功能代码如下(demo_create.jsp):


<%@page import="java.util.*"%>
<html>
<body>
<jsp:usebean id="dbconn" class="dbaccess.dbconnbean" scope="page"/>
<jsp:usebean id="dbbean" class="dbaccess.dbquerybean" scope="page"/>
<hr>
<!--test javabean-->
<%
if (dbconn == null||dbbean == null){
out.println("javabean not found!");
return;
}
%>

<!--try db_demo connection-->
<%
try{
dbconn.connect();
}catch(exception e){
out.println(e.getmessage());
}
%>

<!--prepare sql statement-->
<%
int amount_jhcg,amount_kctj;
vector updaters = new vector();
dbbean.query("delete * from sjcg_table"); //delete all old records in sjcg_table
dbbean.query("select jhcg_table.good_no,jhcg_table.good_name,jhcg_table.amount,kctj_table.amount,jhcg_table.unit from jhcg_table left join kctj_table on kctj_table.good_no=jhcg_table.good_no");
int rows = dbbean.getrowcount();
int cols = dbbean.getcolumncount();
for (int i = 0;i < rows;i++){
string record[] = new string[4];
record[0] = dbbean.get(i,0);
record[1] = dbbean.get(i,1);
amount_jhcg = (integer.valueof(dbbean.get(i,2))).intvalue();
if (dbbean.get(i,3) == null) amount_kctj = 0;
else amount_kctj = (integer.valueof(dbbean.get(i,3))).intvalue();
record[2] = integer.tostring(amount_jhcg - amount_kctj);
record[3] = dbbean.get(i,4);
updaters.addelement(record);
}
for (int i = 0;i < rows;i++){
string insrecord[] = (string [])updaters.elementat(i);
string insgoodno,insgoodname,insunit,insamount;
insgoodno = insrecord[0];
insgoodname = insrecord[1];
insamount = insrecord[2];
insunit = insrecord[3];
string sqlstatement = "insert into sjcg_table(good_no,good_name,amount,unit) values?quot;+""+insgoodno+""+","+""+insgoodname+""+","+insamount+","+""+insunit+""+")";
dbbean.query(sqlstatement);
dbbean.query("delete * from sjcg_table where amount<=0");
}
%>
<a href="demo_main.htm">database created...click here to return</a></p>
</body>
</html>


  上述的开发工具综合应用介绍了基于java开发电子商务应用系统的全过程,包括应用开发平台搭建、业务流程分析、javabean封装和jsp开发等内容,其中jsp开发中涉及到了通用sql(查询和插入数据库表)和游标操作(生成实际采购表),基本可以完成任何网络数据库应用的需求。本实例基本上可以将前面介绍的基于java的电子商务开发技术串接起来,指导读者进行电子商务应用开发。



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·三层结构ASP.NET程序中,把实体类自动显示在页面上的例子(c#)-.NET教程,Asp.Net开发
·windows 2000 server系统帐号安全设置技巧
·java-汉字问题深入谈-JSP教程,Java技巧及代码
·asp.net 2.0下一个标准GRIDVIEW功能的实现(不用datasource控件)-.NET教程,Asp.Net开发
·自定义JSP标签(tag)浅议-JSP教程,Jsp/Servlet
·DataGrid输出到Excel并进行格式化处理-.NET教程,数据库应用
·The key of C# 学习笔记II-.NET教程,C#语言
·windows 2000操作系统启动菜单详解
·GridView的几个事件(如实现: 行的双击/单击/捕捉键盘按键/鼠标悬浮/移出效果)(示例代码下载)-.NET教程,评论及其它
·发邮件的JAVA程序-JSP教程,邮件相关
最新文章
·在vista系统中任意设定鼠标滚动行数_windows vista
·英文blog赚钱的几个方向_网赚技巧
·做google adsense必备的点击统计软件asrep_网赚技巧
·十大adsense工具! top 10 adsense tools_网赚技巧
·php5对mysql5的任意数据库表的管理代码示例(四)_php技巧
·php5对mysql5的任意数据库表的管理代码示例(二)_php技巧
·用好的设计替代不好的_站长心得
·个人网站的常见五大弊病_站长心得
·使用google的广告十天后的观感和博客的钱途_google推广
·关于google adsense的几个敏感问题_google推广
相关主题
  • JSP学习笔记--JSP标签库-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(8)附录-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(7)-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(5)-JSP教程,Jsp/Servlet
  • JSP学习——全面解析JDBC(4)-JSP教程,Jsp/Servlet
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭