从制造到创造
软件工程师成长之路
posts - 292,  comments - 96,  trackbacks - 0
1、AJAX 设计模式
2、Ajax 浅谈
3、struts的陷阱--死循环
4、采用struts+hibernate+spring开发的一个web系统
5、Java模式设计
6、JAVA程序员面试32问,你能回答多少题?
7、采用struts+hibernate+spring开发的一个web系统(2)
8、采用struts+hibernate+spring开发的一个web系统(3)
9、Oracle SQL 3则
10、为Struts 2.0做好准备
11、CSS学习第一天
12、JSP、Servlet中的相对路径和绝对路径
13、JSP中的路径问题
14、如何用Eclipse+MyEclipse快速搭建JSF开发环境
15、 扩展javascript中string的操作
16、Spring Framework 开发参考手册
17、JavaScript高级程序设计
18、Java面试题集
19、Java面试题集2
posted @ 2006-10-10 22:00 CoderDream 阅读(319) | 评论 (0)编辑 收藏

  下列语句部分是Mssql语句,不可以在access中使用。

  SQL分类:

  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
  DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

  首先,简要介绍基础语句:

  1、说明:创建数据库

CREATE DATABASE database-name

  2、说明:删除数据库

drop database dbname

  3、说明:备份sql server

  --- 创建 备份数据的 device

USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

  --- 开始 备份

BACKUP DATABASE pubs TO testBack

  4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

  根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only

  5、说明:

  删除新表:drop table tabname

  6、说明:

  增加一个列:Alter table tabname add column col type

  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

  7、说明:

  添加主键:Alter table tabname add primary key(col)

  说明:

  删除主键:Alter table tabname drop primary key(col)

  8、说明:

  创建索引:create [unique] index idxname on tabname(col….)

  删除索引:drop index idxname

  注:索引是不可更改的,想更改必须删除重新建。

  9、说明:

  创建视图:create view viewname as select statement

  删除视图:drop view viewname

  10、说明:几个简单的基本的sql语句

  选择:select * from table1 where 范围

  插入:insert into table1(field1,field2) values(value1,value2)

  删除:delete from table1 where 范围

  更新:update table1 set field1=value1 where 范围

  查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

  排序:select * from table1 order by field1,field2 [desc]

  总数:select count * as totalcount from table1

  求和:select sum(field1) as sumvalue from table1

  平均:select avg(field1) as avgvalue from table1

  最大:select max(field1) as maxvalue from table1

  最小:select min(field1) as minvalue from table1

  11、说明:几个高级查询运算词

  A: UNION 运算符

  UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

  B: EXCEPT 运算符

  EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

  C: INTERSECT 运算符

  INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

  注:使用运算词的几个查询结果行必须是一致的。

  12、说明:使用外连接

  A、left outer join:

  左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

  B:right outer join:

  右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

  C:full outer join:

  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

  其次,大家来看一些不错的sql语句

  1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

  法一:select * into b from a where 1<>1

  法二:select top 0 * into b from a

  2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

  3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

  例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

  4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

  5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

  6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

  7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

  8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

  9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

  10、说明:两张关联表,删除主表中已经在副表中没有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

  11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

  12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

  13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

  14、说明:前10条记录

select top 10 * form table1 where 范围

  15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

  16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

  17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

  18、说明:随机选择记录

select newid()

  19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

  20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

  21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

  22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

  显示结果:

type    vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

  23、说明:初始化表table1

TRUNCATE TABLE table1

  24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

  随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)

  对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:

Randomize
RNumber = Int(Rnd*499) +1
 
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend

  这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?

  采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:

Randomize
RNumber = Int(Rnd*499) + 1
 
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
 
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")

  不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。

  再谈随机数

  现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。

  为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:

  SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3

  假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

  注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

  随机读取若干条记录,测试过

Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n

  Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)

  语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

  使用SQL语句 用...代替过长的字符串显示

  语法:

  SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
  Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;

  Conn.Execute说明

  Execute方法

  该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:

  1.执行SQL查询语句时,将返回查询得到的记录集。用法为:

  Set 对象变量名=连接对象.Execute("SQL 查询语言")

  Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

  2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:

  连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]

  ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。

  ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

  ·BeginTrans、RollbackTrans、CommitTrans方法

  这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。

  事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。

  BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。








posted @ 2006-10-08 20:58 CoderDream 阅读(412) | 评论 (0)编辑 收藏

                                        EasyJF开源团队(www.easyjf.com) 大峡
            原文出处:http://www.pconline.com.cn/pcedu/empolder/life/0609/859479.html

  经常会跟一些朋友讨论怎么样才能学好Java,学到什么程度才算撑握了Java的问题。其中有一个J2EE程序员层次及武功修为的问题,有点意思。这里就把讨论的内容大致整理一下发出来,大家继续讨论。

  纵观国内的软件行业,靠Java吃饭的程序员还真不是少,而且Java程序员是有很大优越感的,毕竟对于很多用b/s搞开发的业内朋友来说,Java技术意味着难度大、门槛高,因此相对来说Java程序员比其它的程序员(如php、.net)收入高就理所当然。然而J2EE所涉及到的范畴是很广的,不能一个Java程序员就概括了事,而应该具有层次及水平之分,很多时候经常需要进行分类或评级,有时他评、有时自评。

  谈到国内J2EE领域的程序员层次水平,当前流行的称谓及评级不外乎就下面几种:

  第一种是精通掌握记事本、Dreamweaver等工具来写JSP+JavaBean数据库应用的是J2EE程序员;
  第二种是用JBuilder、Eclipse等专用Java开发工具写着一堆一堆过程式Java Bean,而且还能精通Struts+Spring+Hibernate等应用框架的高级J2EE程序员;
  第三种是用Together建模,然后生成一堆Java接口或代码,开口闭口都是设计模式的资深Java程序同及高级系统分析、构架师;
  最后还有一种是整天在BlogJava或JavaEye上谈经论道的大师们,这些大师技术水平难以触摸,武功门派也各具特色,不好归类,有时不好称为程序员(因为有的时候他们甚至不写或者写不出程序),但又做着与J2EE程序员密切相关的事情,我们暂且就归为“牛牛”或“大师”。

  称谓毕竟只是称谓,带有点主观或者功利色彩,有时很难鉴定一个人应该属于什么,因此,我们再从纯技术的角度,也即武功修为的角度,作了一个简单的分析及归类,把2EE领域程序员大致分成以下几个层次,可以作为大家自评的一个参考标准:

  第一个层次:精通掌握Java语法、能调试基本的程序错误,精通掌握JSP+Java Bean写一些N年前ASP、PHP翻版的Java Web应用程序(如论坛、网站新闻发布系统、OA、网上商城等),精通JDBC使用、精通SQL语句、精通XML等。

  第二个层次:掌握设计模式原理及应用,掌握基于OO的分析及设计方法,并能精通熟练使用几种Java专业设计及开发工具,精通掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及应用,精通J2EE中一两个组成部分(如Servlet、EJB等)的工作原理及细节。

  第三个层次:少林的高僧有两种,禅僧及武僧。J2EE程序员的第三个层次也同样有禅、武两个分支,这里我们重点分析一下:

  第一个分支属于走的禅僧线路。在练完第二个层次中的各种武功基础上,结合实际项目中的千奇百怪的用户需求,游刃有余的选择适合的技术方案为客户解决问题,并形成自己的一套解决方案。达到这一个层次的J2EE程序员已经不在乎使用任何工具、任何框架了,而是根据不同的对手,使用不同的武器或招式来应对。好比小李飞刀一样,只有达到了“手中无刀、心中有刀”的境界,才能达到“出手一刀,例不虚发”的效果。这一层次的武功属于一个熟练度问题,刀练得多了、遇到的对手多了,再加上前面的武功修为,就算做不到例不虚发,也可达到十发九中。

  第二个分支属于走的武僧线路,在撑握熟悉第一二个层次中涉及到的内容后,进一步专研并撑握J2EE底层开发,J2EE规范制订、规范实现、Java虚拟机的工作原理、各种常见的J2EE服务器内核工作机制、内存管理、进程机制、源代码等。因为涉及的很多东西都比较抽象,代码也很多,练这一层的武功需要有很好的资质及耐性、并具还得有一定的环境及条件。好比神雕大侠杨过拿起“玄铁剑”,并练成“暗然销魂掌”的成长过程,需要前面的武功修为作基础,更需那只威力神武神雕的帮助指点及他处处为民、惩奸除恶的侠之心态。
  
  胡侃了这么多,现在来根据自己情况测算一下自己的份量,结果如下:

  第一层 练到8成;
  第二层 练到5成;
  第三层 准备走禅僧线路,当前算是练到1成;
  
  唉,后面的武功提升越来越难,真不知道要到何年何月才能达到10成啊。你的武功练到哪一个层次了,不防亮出来大家切磋切磋。嘿嘿,要是有一天,咱们中国的Java程序员人手一把“玄铁剑”、人人会使“暗然销魂掌”,那还了得!汗...,写着写着居然做起白日梦了,不好意思,就此打住。
  
  手中鸡蛋先别扔,还要打个广告:本人刚开始涉足Java开源,目前在EasyJF开源团队中负责EasyJWeb(官网www.easyjf.com)项目,欢迎大家前来指导。

posted @ 2006-10-08 20:14 CoderDream 阅读(338) | 评论 (0)编辑 收藏

1、[Knowledge]安装和使用JUnit
2、第一次亲密接触JUnit
3、java中的io系统总结.
4、使用JSP面向对象web编程技术实现树形控件
5、java 实现pop3 server 源码
6、整合Struts 与Spring
7、三个JAVA文件完成你的MVC应用
8、XML与JSP
9、网页特效集锦
10、每个初学者都应该搞懂的问题!
11、作为一个合格程序员每天该做的事

posted @ 2006-09-29 20:51 CoderDream 阅读(239) | 评论 (0)编辑 收藏
1、复习二叉排序树
2、集成 Hibernate,Spring,Struts Portlet 框架构建 Portlet 应用 zt
3、spring入门编程问题集锦zt
4、深入Java中文问题及最优解决方法
5、JSF login例子
6、什么是Spring,Spring能干吗?
posted @ 2006-09-27 19:53 CoderDream 阅读(199) | 评论 (0)编辑 收藏

在数据库中,某些表的字段很长,而且是自增的,但是由于有前缀,不能直接使用INT类型。

我们可以通过编写存储过程来实现自动生成Id的功能:

一、首先建立数据库和表,并向其中插入一条数据:

 1 Use Master
 2 GO
 3 
 4 -- =============================================
 5 -- Basic Create Database Template
 6 -- =============================================
 7 IF EXISTS (SELECT * 
 8        FROM   master..sysdatabases 
 9        WHERE  name = N'test_db')
10     DROP DATABASE test_db
11 GO
12 
13 CREATE DATABASE test_db
14 GO
15 
16 
17 Use test_db;
18 GO
19 
20 -- =============================================
21 -- Create table basic template
22 -- =============================================
23 IF EXISTS(SELECT name 
24       FROM      sysobjects 
25       WHERE  name = N'T_User' 
26       AND      type = 'U')
27     DROP TABLE test_table
28 GO
29 
30 CREATE TABLE T_User (
31 userId VARCHAR(50PRIMARY KEY
32 userName VARCHAR(50))
33 GO
34 
35 INSERT INTO T_User VALUES('User0001''xulin')
36 GO

二、编写自动生成Id的存储过程:

 1 IF EXISTS (SELECT name 
 2      FROM   sysobjects 
 3      WHERE  name = N'proc_getNewID' 
 4      AND       type = 'P')
 5    DROP PROCEDURE proc_getNewID
 6 GO
 7 
 8 CREATE PROCEDURE proc_getNewID
 9     @maxId             VARCHAR(20),                      -- 传人的最大Id值
10     @prefix             VARCHAR(8),                        -- 前缀
11     @suffix_len      INT,                                          -- 后缀长度
12     @newId            VARCHAR(20) output         -- 输出参数
13 AS 
14     DECLARE @num  varchar(20)
15     SET @num = right(@maxID,@suffix_len)    -- 得到后缀
16 
17     IF (@num IS null)        -- 如果没有传入MaxId,则生成第一个newId
18         BEGIN    
19             SET @newID = @prefix + REPLICATE('0',@suffix_len-1)+'1'
20             -- REPLICATE()以指定的次数重复字符表达式。然后加1
21         END
22     ELSE
23         BEGIN 
24             SET @num = @num + 1
25             SET @newID = @prefix + REPLICATE('0'@suffix_len-len(@num)) + @num
26         END 
27     RETURN 
28 
29 go

编写思路:
         通过接收三个参数来生成新的Id,传入参数为:最大ID, 前缀, 后缀大小。
         如果输入的ID为空,这生成第一个ID:
1 -- 测试代码:
2 declare @num varchar(20)
3 exec proc_getNewID null,'PERM',4,@num output
4 select @num
5 -- 输出:PERM0001
6 

         如果输入不为空,这生成最大Id的后一个Id:
         
1 -- 测试代码:
2 declare @num varchar(20)
3 exec proc_getNewID 'PERM000011''PERM'6@num output
4 select @num
5 
6 --输出:PERM000012
7 

三、在某张表上应用该存储过程:

 1 -- =============================================
 2 -- Create procedure insertAssetBudgetState
 3 -- 创建 插入用户信息 的存储过程
 4 -- =============================================
 5 IF EXISTS (SELECT name 
 6        FROM   sysobjects 
 7        WHERE  name = N'proc_insertUser' 
 8        AND       type = 'P')
 9     DROP PROCEDURE proc_insertUser
10 GO
11 
12 CREATE PROCEDURE proc_insertUser @userName varchar(20)
13 AS
14   IF exists (select * from T_User 
15         where UserName=@userName)
16     return 1
17 ELSE
18    declare @maxID varchar(20)
19    declare @newId varchar(20)
20    select @maxId=Max(UserId) from T_User
21    exec proc_getNewID @maxId,    'User'4@newId OUTPUT
22         -- 最大ID, 前缀, 后缀大小, 新的ID(输出)
23    INSERT into T_User values(@newId@userName)
24     return 0
25 
26 GO
27 
28 EXEC proc_insertUser 'zhangke'
29 EXEC proc_insertUser 'chenwenbin'
30 EXEC proc_insertUser 'wangchao'
31 EXEC proc_insertUser 'yangyan'
32 
33 SELECT * FROM T_User

输出结果:
snap0003.gif

四、数据类型的自动转换:
在编写自动生成Id的存储过程中使用了自动转换:@num=@num+1,这里的@nun为varchar,最后得到int型。
Transact-SQL 参考:
 1 +(加)
 2 两个数相加。这个加法算术运算符也可以将一个以天为单位的数字加到日期中。
 3 
 4 语法
 5 expression + expression
 6 
 7 参数
 8 expression
 9 
10 是数字分类中任何数据类型(bit 数据类型除外)的任何有效 Microsoft® SQL Server™ 表达式。 
11 
12 结果类型
13 返回优先级较高的参数的数据类型。有关更多信息,请参见数据类型的优先顺序。 
14 

 1 C. 将字符和整型数据类型相加
 2 本示例通过将字符数据类型转换为 int,将 int 数据类型值与字符值相加。如果在 char 字符串中有无效的字符,则 SQL Server 将返回错误。
 3 
 4 DECLARE @addvalue int
 5 SET @addvalue = 15
 6 SELECT '125127' + @addvalue
 7 
 8 下面是结果集:
 9 
10 ----------------------- 
11 125142                  
12 
13 (1 row(s) affected)
14 
15 

 1 数据类型的优先顺序
 2 当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是所支持的固有转换,则返回错误。当两个操作数表达式有相同的数据类型时,运算的结果就为那种数据类型。
 3 
 4 下面是 Microsoft® SQL Server™ 2000 数据类型的优先顺序: 
 5 
 6 sql_variant(最高)
 7 
 8 
 9 datetime
10 
11 
12 smalldatetime
13 
14 
15 float
16 
17 
18 real
19 
20 
21 decimal
22 
23 
24 money
25 
26 
27 smallmoney
28 
29 
30 bigint
31 
32 
33 int
34 
35 
36 smallint
37 
38 
39 tinyint
40 
41 
42 bit
43 
44 
45 ntext
46 
47 
48 text
49 
50 
51 image
52 
53 
54 timestamp
55 
56 
57 uniqueidentifier
58 
59 
60 nvarchar
61 
62 
63 nchar
64 
65 
66 varchar
67 
68 
69 char
70 
71 
72 varbinary
73 
74 
75 binary(最低) 
76 

在数据类型的优先顺序中,int 比 varchar 高,计算时回得到int结果。

 

posted @ 2006-09-26 11:39 CoderDream 阅读(1413) | 评论 (0)编辑 收藏
SQL Server没有Oracle的DESC命令,在Orcale中,我们可以使用:DESC 表名; 来查询表的结构,但SQL Server没有提供这个命令,只有一个sp_help 表名;的存储过程来查看表的所有信息。下面我们来通过SELECT语句查询表的结构。

我们新建了一张表后,会将所有与表有关的信息写入该数据库下面的某张系统表, sysobjects, syscolumns, systypes 是其中三张,我们要找的信息就在这三张表里面:

1、下面查询所有表的结构
注意,这里要加一个条件:SO.status >= 0,否则会将系统的临时表显示出来

 1 SELECT     
 2     SO.name 表名,
 3     SC.name 表列名,
 4     SC.colid 索引,
 5     ST.name 类型
 6 FROM       
 7     sysobjects   SO, -- 对象表
 8     syscolumns   SC, -- 列名表
 9     systypes     ST  -- 数据类型表 
10 WHERE        
11     SO.id = SC.id 
12   AND   SO.xtype = 'U'    -- 类型U表示表,V表示视图
13   AND   SO.status >= 0
14   AND   SC.xtype = ST.xusertype
15 ORDER BY  
16     SO.name, SC.colorder         -- 按表名、列名排序


查询结果:
snap0001.gif

2、下面查询某张特定表的结构

 1 SELECT     
 2     SO.name 表名,
 3     SC.name 表列名,
 4     SC.colid 索引,
 5     ST.name 类型
 6 FROM       
 7     sysobjects   SO, -- 对象表
 8     syscolumns   SC, -- 列名表
 9     systypes     ST  -- 数据类型表 
10 WHERE        
11     SO.id = SC.id 
12    AND   SO.xtype = 'U'                   -- 类型U表示表,V表示视图
13    AND   SO.status >= 0                  -- status >= 0 为非系统对象
14    AND   SC.xtype = ST.xusertype
15    AND   SO.name = 'T_Employee'  -- 某张特定表
16 ORDER BY  
17     SO.name, SC.colorder         -- 按表名、列名排序

查询结果:

snap0002.gif

3、如果要查看视图信息,只需要将SO.xtype = 'U'该为SO.xtype = 'V' 即可!


posted @ 2006-09-25 14:49 CoderDream 阅读(3450) | 评论 (0)编辑 收藏
1、Ajax实现三级联动下拉框
2、有滚动条的表格
3、JS收藏
4、Struts Validation 需要注意的一些细节
5、互斥
6、GMT与UTC区别
7、历法与时间
8、ajax适用情况
9、动态广告
10、中文字符集与字符编码的基础知识 (转载)
11、tomcat中添加admin模块
12、团队管理101招
13、js 输入限制
14、如何定制自己的Validation Rules [Struts Validation趁热打铁篇]
15、比较好的Java 网站
16、hibernate 实现 jtable(2)
17、Java安全概述
18、ajaxnet4j
19、ruby on rails初体验
20、Ajax Beginners Tutorial
21、获得本月一日、本星期星期一、昨天的date对象的方法
22、项目应该提倡的一些做法
23、数字验证码小图生成程序
24、用Spring更好地处理Struts动作三种整合
25、午睡能拯救下午
26、SWT Demo
27、JBuilder2006上的J2ME开发环境配置
28、Eclipse3.2+MyEclipse5.0+WebLogic8.1
29、在Tomcat中使用JDBC与JTA
30、各种连接池的比较
31、DWR: Easy AJAX for JAVA
32、Eclipse及其插件介绍和下载-
33、JavaScript高级应用:使用DOM技术操纵文档[转摘]
34、Java精品文章收集
35、项目正式启动,会涉及到Java.io的研究。
36、在线编辑器FCKeditor(转摘)
37、DOM编程详解
38、从Google身上可以学到的14个东西
39、人生第一本入手
40、FCKeditor——强大的HTML文本编辑插件
41、自己翻译的Java.In.A.Nutshell.5th中泛型一章,欢迎拍砖把文章砸的漂亮一些
42、Java多线程程序设计详细解析
43、Java对象序列化
44、最新的配置MyEclipse5.0加Eclipse3.2的配置
45、XML、Java 与 XMLBeans 结合应用的商业价值
46、两个表的双循环排列
47、java 生成excel文件 可以做为简单的报表工具
48、[转]一个程序员如何月进万金的
49、tomcat连接池的配置与使用数据库mysql[转]
50、通用工具类
51、用js控制输入前12位是*号后4位为输入的数值.
52、Spring JPetStore(三) 实现自已的Sunlight Netstore
53、在项目中,用到的关于时间操作的一些常用方法!!
54、Java中正则表达式使用方法详解
55、Use Case 中 include 与 extend 的区别
56、Work Ajax with dwr for java
57、最全的在线查询
58、权限的设计分析
59、Java的异常处理
60、Oracle:PL/SQL 中如何使用Array
61、计算机常用英语
62、java中的时间操作 定时任务
63、让我们成为Java的主宰者
64、生活指南:计算机族必喝的健康饮料
65、hibernate的一些资料
66、通过MD5做个简单的邮箱注册认证功能
67、JavaScript 随笔汇集
68、Socket收发邮件--SMTP和POP3
69、[rcp系列]MVC领悟
70、java读取oracle的存储过程
71、通过读取xml文件动态建表
72、软件架构师
73、Spring JPetStore(一) 发布JPetStore应用
74、面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
75、成功的部门经理一周速成(转载)
76、html 4种提示
77、40种网页常用小技巧(javascript)
78、正则表达式(转载)
79、[ZT]道哥为什么失败与互联网创业
80、PowerDesigner设计数据库
81、UML程序列表
82、Insert text file into MySQL
83、JAVA教程:解析Java的多线程机制
84、怎样学习Java,如何迅速成为Java高手(经典收藏)
85、WebServices带来了什么
86、Java程序的执行顺序
87、编写自己的单点登录(SSO)服务
88、单点登录系统的设计与实现方案
89、袁红岗:Ajax,只是一种过渡技术
90、JAVA中DWR开发项目实战经验
91、邦定jTextField和jLabel进行显示和相关切换
92、计算机语言(java)学习的人生领悟
93、公司实习中的领悟
94、程序员四大忌 你该如何避免呢?
95、java2 核心编程必须掌握的问题,看看你知道多少?
96、程序员-建立你的商业意识 闫辉 著
97、为Apusic的JSF开源喝彩!
98、『蚂蚁学模式』之接口
99、J2EE 全面简介
100、入侵基于JSP+Tomcat的Web网站实录
101、Servlet、Jsp性能优化
102、JSP安全编程实例浅析(中级)2
103、JSP安全编程实例浅析(中级)1
104、struts+hibernate的替代方案:struts+newxy?
105、[zt]Effective Java读书笔记
106、window.open()和window.showModalDialog()使用方法
107、再写一遍struts解决中文乱码问题
108、解决jsp+MysQL输入和输出中文乱码的方法!
109、计算机语言(java)学习的人生领悟
110、[转帖]工作了才知道!
111、全国计算机等级考试四级考试中英文术语对照
posted @ 2006-09-24 22:56 CoderDream 阅读(246) | 评论 (0)编辑 收藏

1、JSP语法
2、基于javascript的用户登录页面验证
3、得到网上邻居
4、通过读取xml文件动态建表
5、java.util.ArrayList
6、七剑与java开源工具java程序员一定要看
7、关于日期的处理的总结
8、java读取oracle的存储过程
9、servlet线程
10、Struts常见异常信息和解决方法
11、审视 Ajax,第 1 部分: 透过华而不实的广告看本质
posted @ 2006-09-19 23:09 CoderDream 阅读(237) | 评论 (0)编辑 收藏

JavaScript 的基本语法

JavaScript的标识符

标识符是指JavaScript中定义的符号,例如,变量名、函数名、数组名等。
标识符可以由字母、数字、下划线(_)和美元($)
注意:标识符不能以数字开头

JavaScript大小写敏感

JavaScript程序代码的格式
以分号(;)结束

JavaScript程序的注释
① // 单行注释
② /*  ....  */ 中可以嵌套"//",但是/*  */不能相互嵌套

基本数据类型与常量

整型常量
   a、十六进制:以0x或者0X开头,例如:0x8a、0Xff
   b、八进制:以0开头,例如:0123
   c、十进制:例如:12345

实型常量(即浮点型):12.32、5E7、4e59

布尔值:true 和 false

字符串型常量:"a book of JavaScript"、"abc"、"a"、""。

字符串中的特殊字符,需要以反斜杠(\)后跟一个普通字符来表示,例如:\r、\n,\b,\',\",\\

null 常量 变量已经有值而且值为空

undefined 常量:变量不存在或者类型未定义

 1 <html>
 2     <head>
 3         <meta http-equiv="Content-Type" content="TEXT/HTML; Charset=GB2312">
 4         <title> 未定义类型 </title>
 5     </head>
 6     <body bgcolor="white">
 7         <script language = JavaScript>
 8             <!--
 9                 var number;
10                 alert(number + " abc");
11             //-->
12         </script>
13     </body>
14 </html>

         输出结果为:undefined abc

                      snap0005.gif


变量

定义一个变量,系统就会为之分配一块内存,程序可以用变量名来表示这块内存中的数据。

JavaScript为弱类型,所以不能指定变量类型,系统会自动指定类型

声明变量要使用Var关键字
例如:var name

声明变量的同时为其赋值
例如:var name=222222222;

对已赋值的变量赋予一个其他类型的数据
var name2 = "222";
name2 = 333;
name2 = name2 + 1; // name2等于334

变量可以不先声明直接使用
例如:x=1234

运算符

算术运算符
+ 加法运算符或正值运算符 例如,x+5,+6。
 + 还能实现多个字符串的相连,而且也能将字符串与其它类型的数据类型相连成一个字符串,条件是该表达式中至少有一个字符串,例如:"x"+123的结果为"x123"。
 
% 求模运算符(算术中的求余)a%b结果中的符号取决于a 的符号。
 

1     var a = 104;
2     var b = a%10;    
3     var c = a%(-10);
4     
5     var x = -104;
6     var y = x%10;
7     var z = x%(-10);
8     
9     alert("b = " + b + "; c = " + c + "; y = " + y + "; z = " + z);

               运行结果:

                       snap0006.gif


赋值运算符:
=    将一个值或表达式的结果赋给变量
       例如:x=3
+=    将变量与所赋的值相加后的结果在赋给变量

比较运算符
==    当左边操作数等于右边操作数相等时返回True

逻辑运算符
&&   逻辑与 两边只能是比较运算的结果(布尔型)
||       逻辑或
!       逻辑非

位运算符

&       只有参加运算的两位都为1,运算的结果才为1,否则就为0。
|         只有参加运算的两位都为0,运算的结果才为0,否则就为1。
^        只有参加运算的两位不相同,运算的结果才为1,否则就为0。

>>(右移运算符): 将左边操作数在内存中的二进制数据右移右边操作数指定的位数,左边移空的部分补1
相对于除2

 1             alert(8 >> 1);        // 将8右移1位
 2             
 3             /*
 4                          0000 1000(8)
 5               右移1位    0000 0100(4)
 6             */
 7             
 8             alert(-8 >> 1);
 9             /*
10             负数在内存中以补码形式保存
11             原码:0000 1000
12             反码:1111 0111
13             补码:1111 1000 (补码为原码取反加1)
14             
15             右移:1111 1100  (得到补码形式的结果)
16             反码:0000 0011 
17                          0000 0001 (减1,相对于加负1)
18             原码:0000 0100 (-4)
19             
20             */

               运行结果:8右移1位得到4,-8右移1位得到-4

                      snap0007.gif       snap0008.gif

<< (左移运算符):右边空位补0
相对于乘2

>>>  将左边操作数在内存中的二进制数据右移右边操作数指定的位数,左边移空的部分补0

 1 var a = 0x80000000 >> 1;
 2 alert(a.toString(16));
 3 
 4 var b = 0x80000000 >>> 1;
 5 alert(b.toString(16));
 6 /*
 7            8: 1000
 8 >>      c: 1100 -40000000  右移1位,左边补1
 9 >>>    4: 0100  40000000  右移1位,左边补0
10     
11 */
12 

          输出结果为:-40000000 和 40000000

                                snap0010.gif         snap0009.gif

注意:移位操作不能改变操作数的值!

1             var  b = 8;
2             alert(b >> 1);       // 结果为:4
3             alert(b);                // 结果为:8
4             b = b >> 1;           // 将b右移1位后的结果赋给b
5             alert(b);                // 结果为:4

          输出结果:先输出4,然后输出8,最后输出4

            snap0011.gif          snap0012.gif         snap0013.gif
posted @ 2006-09-17 13:01 CoderDream 阅读(359) | 评论 (0)编辑 收藏
仅列出标题
共24页: First 上一页 16 17 18 19 20 21 22 23 24 下一页 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(9)

我参与的团队

随笔分类(245)

随笔档案(239)

文章分类(3)

文章档案(3)

收藏夹(576)

友情链接

搜索

  •  

积分与排名

  • 积分 - 456257
  • 排名 - 114

最新评论

阅读排行榜

评论排行榜