这是关于用JAVA创建Socket的一段代码:
import java.io.* ;
import java.net.* ;
public class SocketTest
{
public static void main( String[] args )
{
try{
Socket s = new Socket(“time-A.timefreq.bldrdoc.gov” , 13 ) ;
BufferedReader br = new BufferedReader( new InputStreamReader( s.getInputStream() ) ) ;
boolean more = true ;
while( more )
{
String line = br.readLine() ;
if ( line == null )
more = false ;
else
System.out.println( line ) ;
}
}catch( Exception e)
{
e.printStackTrace() ;
}
}
}
1:字符串与字节数组间的双向转换:
2:UDP接受程序必须先启动运行起来,才能接受UDP发送程序发送的数据;
3: 还学习到了一点DOS的知识:
4: UDP网络程序编写时中文问题的解决:
******************************************************************
这个是发送端的代码:
import java.net.* ;
public class UDPSender
{
public static void main( String[] args ) throws Exception
{
DatagramSocket ds = new DatagramSocket() ;
String str = “米晓辉” ;
ds.send( new DatagramPacket(str.getBytes() ,
str.getBytes().length ,
InetAddress.getByName( “192.168.0.88” ) , 3000)) ;
ds.close() ;
}
}
******************************************************************
这个是接收端的代码:
import java.net.* ;
public class UDPReceiver
{
public static void main( String[] args ) throws Exception
{
DatagramSocket ds = new DatagramSocket( 3000 ) ;
byte[] buf = new byte[1024] ;
DatagramPacket dp = new DatagramPacket(buf , 1024 ) ;
ds.receive( dp ) ;
System.out.println( new String( dp.getData() , 0 , dp.getLength() ) );
System.out.println( dp.getAddress().getHostAddress()) ;
System.out.println( dp.getPort() ) ;
ds.close() ;
}
}
**********************************************************************
内涵不断扩展
经历了分分合合,中国电信市场正在崛起3家大型全业务运营商,如果把中国电信业的重组放到国际范围内来看,这次巨变也代表了国际上的电信发展趋势。国内有学者指出,“全业务(full service)”这个概念,是中国化的。欧美国家与之相近的表述为“多业务(multi-service)”或“综合业务(comprehensive service)”。不过,随着中国电信企业在世界上的影响力的增加,全业务的概念也逐渐被欧美国家所认知和接受。设备制造商爱立信公司近年大力推广的“全业务宽带(full service broadband)”也借鉴了这一概念。 More …
BSD开源协议
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: More …
Extranet的特性
不久前,联邦捷运企业(简称Fedex)向公众公开了它的货运跟踪系统,Fedex的客户可以访问Fedex的Web、浏览货运表、填写必要的表格,甚至可以跟踪自己货物的运行路线。Fedex的Web站点是最早的和最著名的Extranet的例子之一。 More …
什么是主键
在关系数据库中主键是用来识别和区分同一表的不同记录的一个字段,主键可以保证每条记录的唯一性。
作为主键的字段必须满足以下条件:
1:不允许为null
2:每条记录具有唯一的主键值,不允许主键值重复
3:每条主键值永远不允许改变。
当作为主键的字段有业务含义的时候,这样的主键称为“自然主键” 。
看以下的表定义语句:
CREATE TABLE student(
name varchar(20) PRIMARY KEY,
sex tinyint);
在这个表定义语句中,使用作为主键的name字段即为“自然主键” 。这样的主键定义方法是不可取的,会给后期的数据库维护带来困难。
更合理的方式是使用“代理主键”。即使用不具备业务含义的字段,这个字段一般取名为“ID”或“XID”。
CREATE TABLE student(
id int PRIMARY KEY ,
name varchar(20) ,
sex tinyint);
代理主键通常为整数类型,大部分的数据库都提供了自动生成代理主键的机制。
MySQL自动代理主键的生成机制
在MySQL数据库中,将表的主键设置为 auto_increment,则数据库会自动为主键赋值,MySQL支持多种类型的数据库表,依表类型不同其自增属性也有所差异。以下一一分析。
ISAM表
ISAM(索引顺序存储方法)是旧的MySQL标准。在版本3.23.0中,MyISAM类型代替了它(在MySQL的版本4.1中仍然可用,但不推荐)。MyISAM表类型与ISAM表类型的主要区别是前者的索引比后者要小的多。
对于ISAM表类型,如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。
把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。
当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。
当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况:情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。
如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
如果用Update命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。
如果用replace命令基于AUTO_INCREMENT数据列里的值来修改数据表里的现有记录,即AUTO_INCREMENT数据列出现在了replace命令的where子句里,相应的AUTO_INCREMENT值将不会发生变化。但如果replace命令是通过其它的PRIMARY KEY or UNIQUE索引来修改现有记录的(即AUTO_INCREMENT数据列没有出现在replace命令的where子句中),相应的AUTO_INCREMENT值–如果设置其为NULL(如没有对它赋值)的话–就会发生变化。
last_insert_id()函数可获得自增列自动生成的最后一个编号。但该函数只与服务器的本次会话过程中生成的值有关。如果在与服务器的本次会话中尚未生成AUTO_INCREMENT值,则该函数返回0。
其它数据表的自动编号机制都以ISAM表中的机制为基础。
MyISAM数据表
MyISAM表类型从版本3.23.0开始使用,用来代替ISAM表类型。同ISAM表类型相比,索引要小的多。可以使用更少的资源执行带有索引的的SELECT。
删除最大编号的记录后,该编号不可重用。
可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。
可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值。
可使用复合索引在同一个数据表里创建多个相互独立的自增序列,具体做法是这样的:为数据表创建一个由多个数据列组成的PRIMARY KEY or UNIQUE索引,并把AUTO_INCREMENT数据列包括在这个索引里作为它的最后一个数据列。这样,这个复合索引里,前面的那些数据列每构成一种独一无二的组合,最末尾的AUTO_INCREMENT数据列就会生成一个与该组合相对应的序列编号。
HEAP数据表
HEAP数据表从MySQL4.1开始才允许使用自增列。
自增值可通过Create TABLE语句的 AUTO_INCREMENT=n选项来设置。
可通过Alter TABLE语句的AUTO_INCREMENT=n选项来修改自增始初值。
编号不可重用。
HEAP数据表不支持在一个数据表中使用复合索引来生成多个互不干扰的序列编号。
BDB数据表
不可通过Create TABLE or Alter TABLE的AUTO_INCREMENT=n选项来改变自增初始值。
可重用编号。
支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。
InnDB数据表
不可通过Create TABLE or Alter TABLE的AUTO_INCREMENT=n选项来改变自增初始值。
不可重用编号。
不支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号。
在使用AUTO_INCREMENT时,应注意以下几点:
AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。
设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。
AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。
AUTO_INCREMENT数据列必须具备NOT NULL属性。
AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。
当进行全表删除时,AUTO_INCREMENT会从1重新开始编号。全表删除的意思是发出以下两条语句时:
delete from table_name;
or
truncate table table_name
这是因为进行全表操作时,MySQL实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制MySQL的优化:
delete from table_name where 1;
这将迫使MySQL为每个删除的数据行都做一次条件表达式的求值操作。
强制MySQL不复用已经使用过的序列值的方法是:另外创建一个专门用来生成AUTO_INCREMENT序列的数据表,并做到永远不去删除该表的记录。当需要在主数据表里插入一条记录时,先在那个专门生成序号的表中插入一个NULL值以产生一个编号,然后,在往主数据表里插入数据时,利用LAST_Insert_ID()函数取得这个编号,并把它赋值给主表的存放序列的数据列。如:
insert into id set id = NULL;
insert into main set main_id = LAST_Insert_ID();
可用alter命令给一个数据表增加一个具有AUTO_INCREMENT属性的数据列。MySQL会自动生成所有的编号。
要重新排列现有的序列编号,最简单的方法是先删除该列,再重建该,MySQL会重新生连续的编号序列。
在不用AUTO_INCREMENT的情况下生成序列,可利用带参数的LAST_Insert_ID()函数。如果用一个带参数的LAST_Insert_ID(expr)去插入或修改一个数据列,紧接着又调用不带参数的LAST_Insert_ID()函数,则第二次函数调用返回的就是expr的值。下面演示该方法的具体操作:
先创建一个只有一个数据行的数据表:
create table seq_table (id int unsigned not null);
insert into seq_table values (0);
接着用以下操作检索出序列号:
update seq_table set seq = LAST_Insert_ID( seq + 1 );
select LAST_Insert_ID();
通过修改seq+1中的常数值,可生成不同步长的序列,如seq+10可生成步长为10的序列。
该方法可用于计数器,在数据表中插入多行以记录不同的计数值。再配合LAST_Insert_ID()函数的返回值生成不同内容的计数值。这种方法的优点是不用事务或LOCK,UNLOCK表就可生成唯一的序列编号。不会影响其它客户程序的正常表操作。
一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。一般来讲,在一个MIS系统分析、设计、测试和试运行阶段,因为数据量较小,设计人员和测试人员往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。笔者依据多年来设计和使用数据库的经验,提出以下一些设计准则,供同仁们参考。 More …
TRUNCATE TABLE
与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:
所用的事务日志空间较少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。
使用的锁通常较少。
当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。
如无例外,在表中不会留有任何页。
执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。
与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义与其索引和其他关联对象一起保留在数据库中。
DROP TABLE
删除一个或多个表定义以及这些表的所有数据、索引、触发器、约束和指定的权限。任何引用已删除表的视图或存储过程都必须使用 DROP VIEW 或 DROP PROCEDURE 显式删除。
备注
不能使用 DROP TABLE 删除被 FOREIGN KEY 约束引用的表。必须先删除引用 FOREIGN KEY 约束或引用表。如果要在同一个 DROP TABLE 语句中删除引用表以及包含主键的表,则必须先列出引用表。
可以在任何数据库中删除多个表。如果一个要删除的表引用了另一个也要删除的表的主键,则必须先列出包含该外键的引用表,然后再列出包含要引用的主键的表。
删除表时,表的规则或默认值将被解除绑定,与该表关联的任何约束或触发器将被自动删除。如果要重新创建表,则必须重新绑定相应的规则和默认值,重新创建某些触发器,并添加所有必需的约束。
如果使用 DELETE tablename 删除表中的所有行或使用 TRUNCATE TABLE 语句,则在被移除之前,表将一直存在。
注意:这里说的delete是指不带where子句的delete语句
相同点
truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
个人总结,欢迎大家补充
在实际应用中,三者的区别是明确的。
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.
若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是,TRUNCATE TABLE 速度更快,并且使用更少的系统资源和事务日志资源。
有关某个命令的详细信息,请键入 HELP 命令名
———————-文件及目录管理——————————–
COMP 比较两个或两套文件的内容。
CHDIR 显示当前目录的名称或将其更改。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
MD 创建目录。
MKDIR 创建目录。
XCOPY 复制文件和目录树。
TYPE 显示文本文件的内容。
MOVE 将文件从一个目录移到另一个目录。
PUSHD 保存当前目录,然后对其进行更改。
RD 删除目录。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
COPY 将至少一个文件复制到另一个位置。
ERASE 删除至少一个文件。
FC 比较两个或两套文件,并显示不同处。
FIND 在文件中搜索文字字符串。
FINDSTR 在文件中搜索字符串。
———————-磁盘管理——————————–
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。您不能转换当前驱动器。
CHKDSK 检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
VERIFY 告诉 Windows 是否验证文件是否已正确写入磁盘。
VOL 显示磁盘卷标和序列号。
FORMAT 格式化磁盘,以便跟 Windows 使用。
———————-时间日期——————————–
DATE 显示或设置日期。
TIME 显示或设置系统时间。
———————-cmd配置——————————–
COLOR 设置默认控制台前景和背景颜色。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
VER 显示 Windows 版本。
HELP 提供 Windows 命令的帮助信息。
PROMPT 更改 Windows 命令提示符。
SET 显示、设置或删除 Windows 环境变量。
START 启动另一个窗口来运行指定的程序或命令。
TITLE 设置 CMD.EXE 会话的窗口标题。
PATH 显示或设置可执行文件的搜索路径。
ECHO 显示消息,或将命令回显打开或关上。
EXIT 退出 CMD.EXE 程序(命令解释程序)。
————————-调用图形化的系统工具——————————-
appwiz.cpl
添加删除程序
control userpasswords2
用户帐户设置
cleanmgr
垃圾整理
CMD
命令提示符可以当作是 Windows 的一个附件,Ping,Convert 这些不能在图形环境下 使用的功能要借助它来完成。
jview
察看Java虚拟机版本。
command.com
调用的则是系统内置的 NTVDM,一个 DOS虚拟机。它完全是一个类似 Virtual PC 的 虚拟环境,和系统本身联系不大。当我们在命令提示符下运行 DOS 程序时,实际上也 是自动转移到 NTVDM虚拟机下,和 CMD 本身没什么关系。
calc
启动计算器
chkdsk.exe
Chkdsk磁盘检查
compmgmt.msc
计算机管理
conf
启动 netmeeting
control userpasswords2
User Account 权限设置
devmgmt.msc
设备管理器
diskmgmt.msc
磁盘管理实用程序
dfrg.msc
磁盘碎片整理程序
drwtsn32
系统医生
dvdplay
启动Media Player
dxdiag
DirectX Diagnostic Tool
gpedit.msc
组策略编辑器
gpupdate /target:computer /force
强制刷新组策略
eventvwr.exe
事件查看器
explorer
打开资源管理器
logoff-
注销命令
lusrmgr.msc
本机用户和组
msinfo32
系统信息
msconfig
系统配置实用程序
net start (servicename)
启动该服务
net stop (servicename)
停止该服务
notepad
打开记事本
nusrmgr.cpl
同control userpasswords,打开用户帐户控制面板
Nslookup
IP地址侦测器
oobe/msoobe /a
检查XP是否激活
perfmon.msc
计算机性能监测程序
progman
程序管理器
regedit–
注册表编辑器
regedt32
注册表编辑器
regsvr32 /u *.dll
停止dll文件运行
route print
查看路由表
rononce -p
15秒关机
rsop.msc
组策略结果集
rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen—-
启动一个空白的Windows 图片和传真查看器
secpol.msc
本地安全策略
services.msc
本地服务设置
sfc /scannow
启动系统文件检查器
sndrec32
录音机
taskmgr
任务管理器(适用于2000/xp/2003)
tsshutdn
60秒倒计时关机命令
winchatXP
自带局域网聊天
winmsd
系统信息
winver
显示About Windows 窗口
wupdmgr
Windows Update
———————–其它命令——————————————
ASSOC 显示或修改文件扩展名关联。
AT 计划在计算机上运行的命令和程序。
ATTRIB 显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
CACLS 显示或修改文件的访问控制列表(ACLs)。
CALL 从另一个批处理程序调用这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设置活动代码页数。
DISKCOMP 比较两个软盘的内容。
DISKCOPY 将一个软盘的内容复制到另一个软盘。
DOSKEY 编辑命令行、调用 Windows 命令并创建宏。
ENDLOCAL 结束批文件中环境更改的本地化。
FOR 为一套文件中的每个文件运行一个指定的命令。
FTYPE 显示或修改用于文件扩展名关联的文件类型。
GOTO 将 Windows 命令解释程序指向批处理程序中某个标明的行。
GRAFTABL 启用 Windows 来以图像模式显示扩展字符集。
IF 执行批处理程序中的条件性处理。
LABEL 创建、更改或删除磁盘的卷标。
MODE 配置系统设备。
MORE 一次显示一个结果屏幕。
PAUSE 暂停批文件的处理并显示消息。
POPD 还原 PUSHD 保存的当前目录的上一个值。
PRINT 打印文本文件。
RECOVER 从有问题的磁盘恢复可读信息。
REM 记录批文件或 CONFIG.SYS 中的注释。
SETLOCAL 开始批文件中环境更改的本地化。
SHIFT 更换批文件中可替换参数的位置。
SORT 对输入进行分类。
SUBST 将路径跟一个驱动器号关联。
TREE 以图形模式显示驱动器或路径的目录结构。