摘要: package  ifpre.web; import  gxdmif.GXStringUtil; import  java.io.DataOutputStream; import  java.io.File; import  java.io.FileOutputStream; import ...  阅读全文
posted @ 2006-11-28 10:19 重归本垒(Bing) 阅读(30119) | 评论 (2)编辑 收藏
 
<script language="javascript">
function selHotel()
{
var HotelCode ="";
   var intValid = document.frm.selHotel.length;
  if(document.frm.selHotel.checked == true )
  {
   HotelCode = document.frm.selHotel.value;
  }
  
   if(intValid >1)
   {
     for(var i =0;i<document.frm.selHotel.length;i++)
     {
      //alert(document.frm.selHotel[i].checked);
      if (document.frm.selHotel[i].checked== true )
      {
       HotelCode = document.frm.selHotel[i].value;
       //alert(HotelCode);
      }
     }
    }
}
</script>
 
<form name="frm" action="">
<input type="radio" name ="selHotel' value="1">
<input type="radio" name="selHotel" value="2">
</form>

当然还可以用DWRUtil.getValue("selHotel");取值。
在只有一个radio时,那么document.frm.selHotel.checked 值为true或flase,DWRUtil.getValue("selHotel")的值为true或flase,radio的值为document.frm.selHotel.value即true或flase。
如果有多个radio时,那么document.frm.selHotel[i].checked 值为true或flase,DWRUtil.getValue("selHotel")的值为document.frm.selHotel[i].value,radio的值为document.frm.selHotel[i].value。
posted @ 2006-11-23 12:30 重归本垒(Bing) 阅读(13788) | 评论 (2)编辑 收藏
 

  1、sql.Date

  sql包中的日期类Date是util包中Date类的子类,实际上也是util.Date类的子集。它只处理年月日,而忽略小时和分秒,用以代表SQL的DATE信息。

  Date类的构造方法为:

  public Date(int year, int mouth, int day)

其中参数格式同util.Date类的构造方法一样,年参数为所需设定的年份减去1900所得的整数值,月参数为0至11,日参数为1至31。如1998年1月23日所对应创建日期类的方法调用为:

  Date d=new Date(98,0,23);

  Date类还提供两个与String类互相转换的方法,分别是:

  public static Date valueOf(String s)

将字符串类参数转换为日期类对象。其中String类参数S的格式为“年-月-日”,加“1997-04-12”。

  public String toString()

将日期类对象转换为String类对象表示,同样采用“年-月-日”的格式。

  2、sql.Time

  该类是util.Date类的子类,也是它的一个子集。在Time类里,只处理小时和分秒,代表SQL的TIME类型。它与sql.Date合起来才表示完整的util.Date类信息。

  Time类的构造方法为:

  public Time(int hour,int minute,int second)

其中小时参数值为0至23,分秒参数取值均为0至59。

  与sql.Date一样,Time类也定义了两个与String类互相转换的函数ValueOf和String。不同的是String类对象的格式为“小时:分:秒”,如“12:26:06”。

  3、sql.Timestamp

  这个类也是util.Date类的子类,其中除了包含年月日、小时和分秒和信息之外,还加入了纳秒信息(nanosecond),1纳秒即1毫微秒。Timestamp类用来代表SQL时间戳(Timestamp)类型信息。

  Timestamp类的构造方法为:

  public Timestamp(int year, int mouth, int date, int hour, int minute, int second, int nano)其中纳秒参数的取值从0至999,999,999,其余各参数同前。

  Timestamp类特别定义了设置和获得纳秒信息的方法,分别是

  public getnanos()

  获取时间戳的纳秒部分

  public void setNanos(int n)

  以给定数值设置时间戳的纳秒部分

  4、sql.Types

  Types类是Object类的直接子类。在这个类中以静态常量的形式定义了可使用的SQL的数值类型。所有这些类型常量都以前缀

  public final static int

的形式标明是公有静态整数,且不可改动。具体的类型名和含义如表11.1所示。其中OTHER用来代表数据库定义的特殊数据,可以用getObject或setObject方法将其映射为一个Java的Object对象。

  表11.1 Types中定义的SQL类型

类型名

含义

BIGINT

长整型数

BINARY

二进制数

BIT

比特数

CHAR

字符型

DATE

日期型

DECIMAL

十进制数

DOUBLE

双精度数

FLOAT

浮点数

INTEGER

整数

LONGVARBINARY

可变长型二进制数

LONGVARCHAR

可变长型字符

NULL

空类型

NUMERIC

数值型

OTHER

其他类型

REAL

实数

SMALLINT

短整型

TIME

时间类型

TIMESTAMP

时间戳类型

TINYINT

微整型

VARBINARY

可变二进制数

VARCHAR

可变字符型

二、SQL与Java

    由于SQL数据类型与Java的数据类型不一致,因而在使用Java类型的应用程序与使用SQL类型的数据库之间,需要某种读写类型转换机制。实际上我们前面介绍的ResultSet类的“get”系列方法,Statement及其子类的“set“系列方法和registerOutParameter方法,都是这一转换机制的组成部分。

  需要进行的读写转换包括三种情况:

   第一种情况是从数据库中读取数值后,存放在ResultSet对象中的是SQL类型的数据。而调用“get”系列方法时,JDBC才将SQL类型转换为指定的Java类型 。在一般情形下,SQL类型相对应的Java类型如表11-2所示。

  表11.2 SQL类型一般所对应的Java类型

SQL type

Java type

CHAR

java.lang.String

VARCHAR

java.lang.String

LONGVARCHAR

java.lang.String

NUMERIC

java.lang.Bignum

DECIMAL

java.lang.Bignum

BIT

boolean

TINYINT

byte

SMALLINT

short

INTEGER

int

BIGINT

long

REAL

float

FLOAT

double

DOUBLE

double

BINARY

byte[]

VARBINARY

byte[]

LONGVARBINARY

byte[]

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Timestamp

  当然,在使用时用户可以指定将SQL类型转换为某个需要的特定类型而不遵循表11.2。例如在结果集中的某个FLOAT型数值,依标准转换应用使用getDouble方法获取,但实际上按用户的不同需求也可以使用getFloat,getInt,甚至gefByte方法获取,但只是有可能影响数值精确度。

posted @ 2006-11-06 14:15 重归本垒(Bing) 阅读(2665) | 评论 (0)编辑 收藏
 

下面是几种不同数据库的升级脚本比较,实际上是对不同数据库版本的ALTER命令用法的比较

约定:[]内的内容可有可无

1,修改字段类型[关键字:modify&alter]

mysql:

ALTER TABLE 表名 MODIFY [COLUMN] 字段名 字段类型定义;

sqlserver:

ALTER TABLE 表名 ALTER COLUMN 字段名 字段类型定义;
[这里在修改约束的时候需要用到专门的关键字CONSTRAINT]

oracle:

ALTER TABLE 表名 MODIFY ( 字段名 字段类型定义);
[Oracle,修改类型时所改字段的数据必须为空:]

2,增加和删除字段

增加字段

ALTER TABLE 表名 ADD 字段名 字段类型定义;

删除字段

mysql:
ALTER TABLE 表名 DROP[COLUMN] 字段名

sqlserver:
ALTER TABLE 表名 DROP COLUMN 字段名

3,修改列名

mysql:
可以用CHANGE同时修改列名和列类型,如:
ALTER TABLE table CHANGE column newcolumn BIT NOT NULL
这里column和newcolumn可以相同,
也就是说,CHANGE可以取代MODIFY了,可以用来单纯修改列类型或者列名

sqlserver:
暂时只能调用存储过程
EXEC SP_RENAME table.column','newcolumn','COLUMN'

oracle:
在817版本以上支持RENAME了,没有具体测试过,9i以上版本比较保险
ALTER TABLE table RENAME COLUMN column TO newcolumn;
posted @ 2006-11-06 10:46 重归本垒(Bing) 阅读(637) | 评论 (0)编辑 收藏
 

ASP页面:
<%response.redirect "页面路径"%>


有好几种方法:
(1)在页面中跳转:加入以下句子,2秒后跳到test.html
   <meta HTTP-EQUIV=REFRESH CONTENT='2; URL=test.html'>
(2)2秒后转到ly2.php
   <script>setTimeout("location.href="/home/ly2.php'",2000)</script>
(3)在php中用header()函数跳转:
   header("Location :http://www.xxx.com");
(4)用一个按钮,点击后跳转:(5种按钮)
 


<input type=button value=Return onClick

="javascript:location.href('URL');">
   <input type=button value=Return onClick=

"javascript:window.location.href('URL');">
   <input type=button value=Return onClick

="javascript:window.location.replace('URL');">
   <input type=button value=Return onClick

="javascript:window.location.assign('URL');">
   <input type="button" value="Return" onClick

="window.location='URL'" /><!--这种最好-->

posted @ 2006-11-03 17:45 重归本垒(Bing) 阅读(1935) | 评论 (1)编辑 收藏
 
在写class时,往往要import一些类或包(在不同的包中可能会有名字相同的类),一定要注意的是导入的一定要是自己需要的。
如果导入错误,那么编辑时可能会成功的,运行也可能会没有问题,但就是出不了正确的结果。
例如在写文件上传时我碰到了这个问题,折磨了我两天,多方查资料都没用。
class someclass extends SimpleFormController{
     
protected ModelAndView onSubmit(HttpServletRequest req,
            HttpServletResponse response,
            Object command,
            BindException errors)
     
throws Exception{  
         
return null
   }

  
 }

在导入时我导入了 java.net.BindException;在编辑和运行都没有错,后来我才发现他运行的是super.onSubmit。跟本就没有运行someclass.onSubmit。
而实际上应该是org.springframework.validation.BindException;

同时还要小心的是,如果父类中的方法是什么权限,那么子类的方法不能去扩大这个权限。
posted @ 2006-10-25 12:55 重归本垒(Bing) 阅读(299) | 评论 (0)编辑 收藏
 
在beans文件中要加入
    <bean id="multipartResolver"
          
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          
<description>
                  ifpre::要使用文件上传功能,必须在定义文件中加入MeltipartResolver,
                  可以选用CommonsMutipartResolver或CosMultipartResolver
          
</description>
        
<property name="maxUploadSize">
            
<value>1000000</value>
        
</property>
    
</bean>

同时上传文件使用到相依赖的Commands FileUpload,所以要在lib目录中包括commons-fileupload.jar文件。

写完后调试的过程中,老报错:java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream,少了commons-io.jar,加上后,就ok了

在Controller端,可以用以下方式取得上传的文件,可以上传多个文件:
 public Set getMultipartFileForForm(HttpServletRequest req) {
  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
  // CommonsMultipartFile file = (CommonsMultipartFile)
  // multipartRequest.getFile("attach");//attach为form为file的id值
  // MultipartHttpServletRequest multipartRequest =
  // (MultipartHttpServletRequest)request;
  Set fileset = new LinkedHashSet();
  for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) {
   String key = (String) it.next();
   MultipartFile file = multipartRequest.getFile(key);
   if (file.getOriginalFilename().length() > 0) {
    fileset.add(file);
   }
  }
  return fileset;
 }

posted @ 2006-10-23 17:24 重归本垒(Bing) 阅读(2949) | 评论 (1)编辑 收藏
 


在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中

可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

SELECT empseq.currval FROM DUAL;

但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?

- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;


影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;

示例Sequence:
CREATE SEQUENCE SCOTT.DMIFPOSTID 
    START WITH 
261
    INCREMENT BY 
1
    NOMINVALUE
    NOMAXVALUE
    NOCYCLE
    CACHE 
20
    NOORDER


3、如何使用
         第一种方法:一般来说需要新建一个触发器(TRIGGER),使得在插入数据之前先运行Sequence生成自增号。
示例Trigger
CREATE OR REPLACE TRIGGER SCOTT.DMIFATTACH_TRG
BEFORE INSERT 
ON SCOTT.DMIFATTACH
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW 
begin
    select SCOTT.DMIFATTACHID.nextval into :
new.ATTACHID from dual;
  end;

         第二种方法:可以在插入数据时直接调用。
          insert into table(id,name) values(seq_name.nextval,'名字');

         其它:对于hibernate来说,在插入数据之前会先运行一次Sequence生成id的,所以这时如果还有触发器(TRIGGER),又要再运行一次Sequence,于是就会发现id是以2为步进增加的。这时把Trigger删除,步进就为1了。
         如果使用hibernate则需要在hbm.xml文件中把ID的生成方式设为sequence.
    <id
        name
="postid"
        type
="java.lang.Integer"
        column
="POSTID"
    
>
        
<meta attribute="field-description">
           @hibernate.id
            generator
-class="sequence"
            type
="java.lang.Integer"
            column
="POSTID"


        
</meta>
        
<!--设置id生成方式-->
          
<generator class="sequence">
            
<param name="sequence">SCOTT.DMIFPOSTID</param>
         
</generator>
    
</id>

同时在调用this.getHibernateTemplate().save()方法时会自动生成根据sequence把查询到的id号set给这个对象的id.
posted @ 2006-10-20 15:04 重归本垒(Bing) 阅读(765) | 评论 (0)编辑 收藏
 

数据库时代的终结

板桥里人 http://www.jdon.com 2005/04/28

  以数据库为核心的软件时代已经过去,数据库时代早已结束,当我看到J2EE征途中那么多人在对象和数据库之间彷徨痛苦ing的时候,我想我该出来喊一声了。

  其实这句话在几年前肯定有人喊过,因为中间件时代的来临,实际意味着数据库时代终结,正所谓一山无二虎:如果你重视数据库,你的J2EE系统就无法完全OO,只有你忽视数据库,你的系统才有可能完全迈向OO,至于数据库性能调优等特定功能都可交由EJB容器或O/R Mapping工具实现。

  很多年前,包括我自己在内的大部分企业程序员都是从数据库开始我们的职业生涯,最早的是dBase/FoxPro,后来有了 SQL系列数据库, Oracle将数据库时代推向了顶峰。

  每当有一个新项目时,第一步就是首先设计出数据表结构(Table Schema),然后开始使用SQL语句实现业务逻辑,这种开发模式一直重复,就是后来加入了DelPhI/VB,他们也只是承担图形显示实现,这种C/S结构带来最大问题是:非常难于维护,修改起来,迁一动百。

  软件的生命在于运动,当它需要发展时,最棒的软件人员如果对他也束手无策,这是谁的悲哀?

  现在更多人开始接受B/S结构,但是他们中很多人还没有真正明白为什么需要B/S结构,B/S代表的多层架构才是真正目的(因此,伪多层的B/S系统遍地皆是)。

  多层架构实际是将以前系统中的显示功能、业务运算功能和数据库功能完全分开,杜绝彼此的耦合与影响,从而实现松耦合和良好的可维护性。

  一. 从设计上说:由于实现层次完全分离,业务运算功能成为一种中间功能(中间层),它不依赖具体的表现层技术(Jsp/Html applet等),也不依赖具体数据库技术(Oracle/SQL Server),业务运算功能运行在J2EE应用服务器中,当我们的业务运算功能不再依赖数据库时,是否意味着数据库已经不是重点?

  二. 当然,多层结构带来了性能问题:客户端访问数据库中的数据时,通常需要经过多个层次,非常耗费性能, 如何尽量减少数据库访问是J2EE应用系统首要解决的问题,使用存储过程并没有解决这个问题,存储过程的执行还是属于后端,并没有缩短客户端请求所要经历的坎坷路途。

  解决性能问题的根本解决之道是使用对象缓存,现在, 64位CPU提供的巨大内存空间为单台缓存计算提供了硬件基础,更重要的是,这种缓存计算是可伸缩的,通过集群的缓存机制(如JBossCache), 通过增加应用服务器的数量,可以提高整个业务逻辑层的缓存计算能力,抛弃过去那种为内存斤斤计较的老思维吧。

  三. 在系统分析之初是否首先需要数据表设计呢?回答是否定的, 以UML为代表面向对象的分析设计方法已经成为强大工具,随着面向模型驱动分析设计(MDA)的普及, 面向数据库分析方法正在逐步被抛弃,拥有深厚传统数据库分析习惯的程序员必须面对和接受这种挑战。

  纵观整个J2EE系统开发过程,数据库已经从过去的中心位置降为一种纯技术实现,数据库只是状态持久化的一种手段(文件是另外一种实现手段);什么是持久化?这是相对于内存缓存状态而言,持久化就是当内存断电情况下能永久保存状态数据,但是如果J2EE应用服务器是7X24小时集群运行;几乎永不当机,是否有持久化的必要呢?

  很显然,数据库已经沦为与操作系统中文件系统同样的层面,以它为中心的时代真的结束了,IBM早期将DB2数据库开源已经强烈向我们昭示这点。

  对于J2EE初学者来说,尽早抛弃过去的两种影响:过程语言编程习惯和以数据库为中心的设计习惯,从全新的面向对象角度(OOA、OOD和OOP、AOP)来设计开发你的J2EE系统,J2EE设计开发三件宝:Model、Patterns和Framework

  以上不只是理论,而是我每天正在做的,如果你也是或赞同请广为传播,唤醒更多彷徨痛苦的初学者。

TSS最近相关文章:

使用AOP组合JBossCache实现对象缓存

OSCache降低数据库负载

使用缓存提高Web应用系统性能

Java企业系统架构选择考量

状态对象:数据库的替代者

DDD(Domain-Driven Design领域驱动设计)实战

讨论

posted @ 2006-09-27 14:38 重归本垒(Bing) 阅读(275) | 评论 (0)编辑 收藏
 
     摘要: package  state; import  context.Context; public   class  DesignTemplateState  implements  State  {     public ...  阅读全文
posted @ 2006-09-21 17:02 重归本垒(Bing) 阅读(296) | 评论 (0)编辑 收藏
仅列出标题
共12页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 
 
Web Page Rank Icon