SSH Secure Shell Client 中文显示乱码怎么解决

1

Java代码  收藏代码
  1. #vi /etc/sysconfig/i18n

将内容改为

Java代码  收藏代码
  1. LANG=”zh_CN.GB18030″
  2. LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
  3. SUPPORTED=”zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en”
  4. SYSFONT=”lat0-sun16″

这样中文在SSH,telnet终端就可以正常显示了。

 

2

使用linux,在用户根目录下有一个.bash_profile配置文件,该配置只对当前用户有效.

使用ll -a命令可以查看到该文件.使用vi编辑器打开该文件后,在其中加入

LANG=zh_CN.GBK
export LANG

即可正常显示中文.更改.bash_profile配置文件后,该文件内容如下:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
LANG=zh_CN.GBK
export LANG
export PATH
unset USERNAME

Centos用户登录后修改密码

Centos用户登录后修改密码 直接键入 passwd 就可以了。

Android界面开发之工具使用

Android-ui-utils开源项目包含了一系列工具,帮助我们更好的设计和开发Android用户界面。项目主页为http://code.google.com/p/android-ui-utils/。它主要包含以下几个主要工具:

一、Android Asset Studio

这是一个基于网页的工具,可以帮助用户生成Android的图像资源。地址为:http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html。Android Asset Studio包含两个工具:
1、图标生成器 – 为应用创建图标
图标生成器可以很快速和方便的从现有图片、文本生成Android应用的图标。它可以分别生成如下类别的图标:
启动器图标
菜单图标
活动栏(Action bar)图标(Android 3.0+)
标签(Tab)图标
通知图标
图标生成器整体界面非常简单美观(使用了jQuery UI的界面),功能也很齐全,可以生成各种API Level以及分辨率的图标。

 

2、设备结构生成器 – 查看设计图在不同屏幕Android手机上的真实效果
设备结构生成器可以快速的把一张设计图放到不同的Android设备上,以便于比较和查看真实效果。它支持几种常见的手机,分别为Nexus One、Nexus S、Galaxy Nexus、Motorola XOOM。地址为http://android-ui-utils.googlecode.com/hg/asset-studio/dist/device-frames.html
使用方法是将电脑里的图片拖拽到如下几个手机设备上,右边将会显示实际的效果图(这个拖拽交互效果的实现我们又要感谢HTML5,所以请用Chrome打开):

 

对于这个工具,我的感受是如果支持更多机型和Tab就更好了。

二、Android Design Preview

你们的设计师是不是经常把设计图导入到手机上,然后和产品经理、开发工程师一起查看和讨论界面设计?Android Design Preview可以让这一个流程更加方便和简单。它让人可以实时的在真实设备上查看Android高保真的设计图,让视觉设计师像开发工程师一样所见即所得的工作。这个工具的作者是Google的Roman Nurik,它还同时支持Mac和Windows平台。

 

使用方法:
1、先在http://code.google.com/p/android-ui-utils/左下方选择合适的包下载(Windows是jar包,Mac是dmg格式)。
2、连接到Android手机并双击运行下载后的文件,运行界面如下图所示(同时它还在你的Android手机上安装了名为Design Preview的应用):

 

3、点击“Select Mirror Region”,电脑屏幕上会出现如下的界面,这个格子可以拖动,双击或者按Esc隐藏(注意:仅仅是隐藏而已)。

 

4、把格子拖动到任何你想要的地方,你可以同时看到格子里面的内容已经实时出现在你的Android手机上。如果你在Photoshop里设计Andoid应用的界面,你所有的变更将所见即所得的同步显示在Android手机上。下面是我在电脑上的格子里查看Word文档时手机上显示的内容:

 

现在很多工作都变得非常方便和容易,是不是?

.htaccess500错误处理指南

当删除网页.htaccess文件后可以正常访问,添上.htaccess就出错。方法一(没成功):

打开.htaccess,把 Options +FollowSymLinks注释掉,# Options +FollowSymLinks,因为http.conf里有;
打开http.conf,把这句LoadModule rewrite_module modules/mod_rewrite.so前的注释符号去了。

方法二(没成功):
把.htaccess中的#RewriteBase / 去掉#

方法三(没成功):
还有很多人说是文件权限问题、.htaccess语法有误。在我这里都没有出现。

最终解决方法:
我看着自己apache配置文件是突然看到LoadModule rewrite_module modules/mod_rewrite.so,他的apache是不是没有开启mod_rewrite?
Ubuntu执行sudo a2enmod rewrite命令。然后重启apache :sudo /etc/init.d/apache2 restart.

centos IPtables

Linux上iptables防火墙的基本应用教程
/etc/init.d/iptables restart
#重启防火墙以便改动生效,当然如果不觉得麻烦也可重启系统(命令:reboot)
/etc/rc.d/init.d/iptables save
#将更改进行保存
实际应用中-i添加通过是好用的,但是-a不好用,规则填写在了不同位置。(个人怀疑是i是插入从上倒下的前排,但是-a是添加到队列尾)
1、安装iptables防火墙
如果没有安装iptables需要先安装,CentOS执行:
yum install iptables
Debian/Ubuntu执行:
apt-get install iptables
2、清除已有iptables规则
iptables -F
iptables -X
iptables -Z
3、开放指定的端口
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp –dport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
4、屏蔽IP
#如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
5、查看已添加的iptables规则
iptables -L -n
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M) vps侦探
n:只显示IP地址和端口号,不将ip解析为域名
6、删除已添加的iptables规则
将所有iptables以序号标记显示,执行:
iptables -L -n –line-numbers
比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8
7、iptables的开机启动及规则保存
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:
chkconfig –level 345 iptables on
将其加入开机启动。
service iptables save#
#CentOS上可以执行:保存规则。
另外更需要注意的是Debian/Ubuntu上iptables是不会保存规则的。
需要按如下步骤进行,让网卡关闭是保存iptables规则,启动时加载iptables规则:
创建/etc/network/if-post-down.d/iptables 文件,添加如下内容:
#!/bin/bash
iptables-save > /etc/iptables.rules
执行:chmod +x /etc/network/if-post-down.d/iptables 添加执行权限。
创建/etc/network/if-pre-up.d/iptables 文件,添加如下内容:
#!/bin/bash
iptables-restore < /etc/iptables.rules
执行:chmod +x /etc/network/if-pre-up.d/iptables 添加执行权限。
关于更多的iptables的使用方法可以执行:iptables –help或网上搜索一下iptables参数的说明。

XDebug,在php.ini下的配置

1 路径中不要要空格
2 注意双引号
2 代码:

1
2
3
4
5
zend_extension_ts = D:\PHP\php_xdebug-2.1.2-5.2-vc6.dll
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9001 //默认是9000 建议该一下

3 查询与下载xdebug的网址:

http://www.xdebug.org/find-binary.php   把phpinfo()输出的htmlCopy进入里面,自动匹配正确的版本进行下载即可

Linux查看文件大小

当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。
df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
du可以查看文件及文件夹的大小。
两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。
下面分别简要介绍
df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子:

以下是代码片段:
[yayug@yayu ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 3.9G 300M 3.4G 8% /
/dev/sda7 100G 188M 95G 1% /data0
/dev/sdb1 133G 80G 47G 64% /data1
/dev/sda6 7.8G 218M 7.2G 3% /var
/dev/sda5 7.8G 166M 7.2G 3% /tmp
/dev/sda3 9.7G 2.5G 6.8G 27% /usr
tmpfs 2.0G 0 2.0G 0% /dev/shm

参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。
上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。
接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。
du:查询文件或文件夹的磁盘使用空间
如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:–max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小.
提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。

以下是代码片段:
[root@bsso yayu]# du -h –max-depth=1 work/testing
27M work/testing/logs
35M work/testing
[root@bsso yayu]# du -h –max-depth=1 work/testing/*
8.0K work/testing/func.php
27M work/testing/logs
8.1M work/testing/nohup.out
8.0K work/testing/testing_c.php
12K work/testing/testing_func_reg.php
8.0K work/testing/testing_get.php
8.0K work/testing/testing_g.php
8.0K work/testing/var.php
[root@bsso yayu]# du -h –max-depth=1 work/testing/logs/
27M work/testing/logs/
[root@bsso yayu]# du -h –max-depth=1 work/testing/logs/*
24K work/testing/logs/errdate.log_show.log
8.0K work/testing/logs/pertime_show.log
27M work/testing/logs/show.log

值得注意的是,看见一个针对du和df命令异同的文章:《du df 差异导致文件系统误报解决》。
du 统计文件大小相加
df 统计数据块使用情况
如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。
如此一来在定期删除 /var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。
使用下面的命令杀掉进程之后,系统恢复。
fuser -u /var/spool/clientmqueue

查看linux文件目录的大小和文件夹包含的文件数
统计总数大小
du -sh xmldb/
du -sm * | sort -n //统计当前目录大小 并安大小 排序
du -sk * | sort -n
du -sk * | grep guojf //看一个人的大小
du -m | cut -d “/” -f 2 //看第二个/ 字符前的文字
查看此文件夹有多少文件 /*/*/* 有多少文件
du xmldb/
du xmldb/*/*/* |wc -l
40752
解释:
wc [-lmw]
参数说明:
-l :多少行
-m:多少字符
-w:多少字

Linux:ls以K、M、G为单位查看文件大小
#man ls

……

-h, –human-readable

print sizes in human readable format (e.g., 1K 234M 2G)

……

# ls

cuss.war nohup.out

# ls -l

total 30372

-rw-r–r– 1 root root 31051909 May 24 10:07 cuss.war

-rw——- 1 root root 0 Mar 20 13:52 nohup.out

# ls -lh

total 30M

-rw-r–r– 1 root root 30M May 24 10:07 cuss.war

-rw——- 1 root root 0 Mar 20 13:52 nohup.out

# ll -h

total 30M

-rw-r–r– 1 root root 30M May 24 10:07 cuss.war

-rw——- 1 root root 0 Mar 20 13:52 nohup.out

Java Date Calendar 使用与转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
     * 返回一天中时间最大的毫秒数
     * @return
     */

    public static Long getMaxTimeOfToday(){
        Calendar lastTimeOfToday = Calendar.getInstance();
        lastTimeOfToday.set(Calendar.HOUR_OF_DAY, 23);
        lastTimeOfToday.set(Calendar.MINUTE, 59);
        lastTimeOfToday.set(Calendar.SECOND, 59);
        lastTimeOfToday.set(Calendar.MILLISECOND, 999);
        return lastTimeOfToday.getTimeInMillis();
    }
    /**
     * 返回有点击量的一天中的最大时间
     * @return
     */

    public static Long getMaxTimeOfClickToday(Long maxclicktime){
        Calendar lastTimeOfToday = Calendar.getInstance();
        Date date = new Date(maxclicktime);
        lastTimeOfToday.setTime(date);
        lastTimeOfToday.set(Calendar.HOUR_OF_DAY, 23);
        lastTimeOfToday.set(Calendar.MINUTE, 59);
        lastTimeOfToday.set(Calendar.SECOND, 59);
        lastTimeOfToday.set(Calendar.MILLISECOND, 999);
        return lastTimeOfToday.getTimeInMillis();
    }
    public static Long getCurrentTime(){
        return new Date().getTime();
    }

 

1.计算某一月份的最大天数

Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year); //year 为 int
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化

(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();

(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);

3.把字符串转化为java.util.Date
方法一:
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”);
java.util.Date dt=sdf.parse(“2005-2-19″);
System.out.print(sdf.format(dt));    //输出结果是:2005-2-19

方法二:
java.util.Date dt=null;
DateFormat df=DateFormat.getDateInstance();
dt=df.parse(“2005-12-19″);
System.out.println(dt);              //输出结果为:Mon Dec 19 00:00:00 CST 2005
System.out.println(df.format(dt)); //输出结果为:2005-2-19

4.把字符串转化为java.sql.Date
字符串必须是”yyyy-mm-dd”格式,否则会抛出IllegalArgumentException异常
java.sql.Date sdt=java.sql.Date.valueOf(“2005-9-6″);
System.out.println(sdt);          //输出结果为:2005-9-6
5.格式化输出日期时间 (这个用的比较多)

Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String time=df.format(date);
System.out.println(time);

需要注意的一点:SimpleDateFormat类格式化一个字符串时,可根据需要调用 format() 或 parse() 函数;只不过format()返回String类型,parse()返回java.util.Date类型

6.计算一年中的第几星期

(1)计算某一天是一年中的第几星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号
SimpleDateFormat df=new SimpleDateFormat(“yyyy-MM-dd”);
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
输出:
2006-01-02

7.add()和roll()的用法(不太常用)

(1)add()方法
SimpleDateFormat df=new SimpleDateFormat(“yyyy-MM-dd”);
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出:
2006-08-30
2006-09-03
(2)roll方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出:
2006-09-29
2006-09-03
可见,roll()方法在本月内循环,一般使用add()方法;

8.计算两个任意时间中间的间隔天数(这个比较常用)
(1)传进Calendar对象
public int getIntervalDays(Calendar startday,Calendar endday){
if(startday.after(endday)){
Calendar cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTimeInMillis();
long el=endday.getTimeInMillis();

long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(2)传进Date对象

public int getIntervalDays(Date startday,Date endday){
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(3)改进精确计算相隔天数的方法
public int getDaysBetween (Calendar d1, Calendar d2){
if (d1.after(d2)){
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) – d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2){
d1 = (Calendar) d1.clone();
do{
days += d1.getActualMaximum(Calendar.DAY_F_YEAR);//得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配 最好装化成 long去比较
如:1年前日期(注意毫秒的转换)
java.util.Date myDate=new java.util.Date();
long myTime=(myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);
3周前的日期
Calendar cal3 = Calendar.getInstance();
cal3.add(cal3.DATE, -21);//取3周前的日期
String date = formatter.format(cal3.getTime());

9. String 和 Date ,Long 之间相互转换 (最常用)

字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时间--long-比较

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(“M/dd/yyyy hh:mm:ss a”,java.util.Locale.US);
java.util.Date d = sdf.parse(“5/13/2003 10:31:37 AM”);
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String mDateTime1=formatter.format(d);

10. 通过时间求时间

年月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat(“yyyy-MM F E”);
java.util.Date date2= formatter2.parse(“2003-05 5 星期五”);
SimpleDateFormat formatter3 = new SimpleDateFormat(“yyyy-MM-dd”);
String mydate2=formatter3.format(date2);

求是星期几
mydate= myFormatter.parse(“2001-1-1″);
SimpleDateFormat formatter4 = new SimpleDateFormat(“E”);
String mydate3=formatter4.format(mydate);

11. java 和 具体的数据库结合

在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类 型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver 数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型
你可以使用dateFormat定义时间日期的格式,转一个字符串即可

class Datetest{
*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)
*@param dateString 需要转换为timestamp的字符串
*@return dataTime timestamp

public final static java.sql.Timestamp string2Time(String dateString)
throws java.text.ParseException {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat(“yyyy-MM-dd kk:mm:ss.SSS”, Locale.ENGLISH);//设定格式
//dateFormat = new SimpleDateFormat(“yyyy-MM-dd kk:mm:ss”, Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
return dateTime;
}

*method 将字符串类型的日期转换为一个Date(java.sql.Date)
*@param dateString 需要转换为Date的字符串
*@return dataTime Date

public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat(“yyyy-MM-dd”, Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
return dateTime;
}

public static void main(String[] args){
Date da = new Date();
注意:这个地方da.getTime()得到的是一个long型的值
System.out.println(da.getTime());

由日期date转换为timestamp

第一种方法:使用new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
System.out.println(t);

第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
Timestamp tt = new Timestamp(Calendar.getInstance().get(
Calendar.YEAR) – 1900, Calendar.getInstance().get(
Calendar.MONTH), Calendar.getInstance().get(
Calendar.DATE), Calendar.getInstance().get(
Calendar.HOUR), Calendar.getInstance().get(
Calendar.MINUTE), Calendar.getInstance().get(
Calendar.SECOND), 0);
System.out.println(tt);

try {
String sToDate = “2005-8-18″;//用于转换成java.sql.Date的字符串
String sToTimestamp = “2005-8-18 14:21:12.123″;//用于转换成java.sql.Timestamp的字符串
Date date1 = string2Date(sToDate);
Timestamp date2 = string2Time(sToTimestamp);
System.out.println(“Date:”+date1.toString());//结果显示
System.out.println(“Timestamp:”+date2.toString());//结果显示
}catch(Exception e) {
e.printStackTrace();
}
}
}
一、Date的构造函数

1.1构造一个反映当时时间的Date实例
Date
public Date()
构造一个Date对象并对其进行初始化以反映当前时间。

1.2从一个长整型数据构造一个Date实例
Date
public Date(long date)
构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。
参数:
date – 相对于GMT 1970年1月1日00:00:00的毫秒数。

1.3从年月日时分秒构造一个Date实例
Date
public Date(int year,
int month,
int date)
public Date(int year,
int month,
int date,
int hrs,
int min)
public Date(int year,
int month,
int date,
int hrs,
int min,
int sec)
这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。

inner join on, left join on, right join on

inner join on, left join on, right join on

 

1.inner join on
只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。
以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为
准合并起来。其实就是取他们的交集

语法

FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2

 

INNER JOIN 操作包含以下部分:

部分 说明

table1, table2 要组合其中的记录的表的名称。
field1,field2 要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。
compopr
任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。
说明

可以在任何 FROM 子句中使用 INNER JOIN 操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,Inner 联接就会组合这些表中的记录。

可以将 INNER JOIN 用于 Departments 及 Employees 表,以选择出每个部门的所有雇员。而要选择所有部分(即使某些部门中并没有被分配雇员)或者所有雇员(即使某些雇员没有分配到任何部门),则可以通过 LEFT JOIN 或者 RIGHT JOIN 操作来创建外部联接。

如果试图联接包含备注或 OLE 对象数据的字段,将发生错误。

可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。

下例展示了如何通过 CategoryID 字段联接 Categories 和 Products 表:

 

SELECT CategoryName, ProductNameFROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID;

 

 

在前面的示例中,CategoryID 是被联接字段,但是它不包含在查询输出中,因为它不包含在 SELECT 语句中。若要包含被联接字段,请在 SELECT 语句中包含该字段名,在本例中是指 Categories.CategoryID。

也可以在 JOIN 语句中链接多个 ON 子句,请使用如下语法:

 

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];

 

 

也可以通过如下语法嵌套 JOIN 语句:

 

代码

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

 

 

LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。
2.操作实例

表A记录如下:
aID               aNum
1                  a20050111
2                  a20050112
3                  a20050113
4                  a20050114
5                  a20050115

表B记录如下:
bID               bName
1                   2006032401
2                  2006032402
3                  2006032403
4                  2006032404
8                  2006032408
实验如下:
1.left join

sql语句如下:

 

select * from A
left join B
on A.aID = B.bID

 

结果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
5                   a20050115                NULL              NULL
(所影响的行数为 5 行)

结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.

2.right join
sql语句如下:

select * from A
right join B
on A.aID = B.bID

 

结果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
NULL           NULL                          8                     2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:

 

select * from A
innerjoin B
on A.aID = B.bID

 

结果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

———————————————————-我的总结———————————————————————-

1.inner join on 就是说两个表中都有相关数据时才显示出来

2. left join on  左表中数据全部显示,右表根据条件显示

3. right join on 右表全部显示,左表根据条件显示

————————————————————-签名部分————————————————————————

Openmeetings安装过程

最近帮别人能一个视频会议的东西,因为他的项目是在openmeetings上做的二次开发,所以现在机子上架了一个openmeetings!说起来也挺悲哀的,整整弄了一天。我想还是网上的一篇博客误导了我,导致我把简单的东西复杂化了!

      说到openmeetings就应该提一下red5因为openmeetings的视频服务是加载red5上面的。Red5是一款基于JAVA的免费的开源的Flash流媒体server.是当前最好的替代Adobe提供的FMS的开源软件。而且在可扩展性上有FMS不可比拟的优势。Openmeetings是一款基于Flex开发的开源视频软件,通过RTMP和HTTP协议传送视频数据。支持在线聊天,视频,文件共享,桌面共享。支持多语言。

说一下openmeetings的安装步骤:

1. 安装并配置java环境。(这一步不用多说了吧)。

 

2. 安装mysql。(网上有的是教程)。

 

3. 安装openoffice,安装这个软件的原因是,openmeetings进行幻灯片或其他文本展示的时候openoffice是一个转换工具。安装后在命令提示符界面输入:

soffice.exe-headless-nologo-norestore-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager使其监听8100端口。然后再输入netstat –anp tcp如果在显示的列表中能找到TCP 127.0.0.1:8100 0.0.0.0:0 LISTENING,则表明启动成功。

 

4. 安装Swftool。下载地址:http://www.swftools.org/download.html。安装过程比较简单一路下一步就行了!

 

5. 安装ImageMagick 。下载地址:http://www.imagemagick.org/script/binary-releases.php。同样下一步到底就行了!

6. 安装red5服务器。其实这个不是必需的,因为openmeetings项目中集成了tomcat和red5 服务器。安装red5的时候时要注意的因为red5的运行是需要java环境的,安装的时候会提示你本机的jre路径,添加上去就行了!

7.下载openmeetings项目。下载地址:http://code.google.com/p/openmeetings/downloads/list

8. 1.安装完以上软件后,解压缩下载的openmeetings压缩包,修改openmeetings\webapps\openmeetings\conf 下的 mysql_hibernate.cfg.xml

<hibernate-configuration>
<!– a SessionFactory instance listed as /jndi/name –>
<session-factory>  <!– User  / Password –>
<property name=”connection.username”>root(Mysql数据库用户名)</property>
<property name=”connection.password”>******(Mysql数据库密码)</property>
<!– Database Settings –>
<property name=”connection.driver_class”>com.mysql.jdbc.Driver</property>
<!–  for performance reasons changed to MyISAM from org.hibernate.dialect.MySQLInnoDBDialect –>
<property name=”dialect”>org.hibernate.dialect.MySQLMyISAMDialect</property>
<property name=”connection.url”>jdbc:mysql://localhost:3306(Mysql数据库端口号)/openmeetings(你建立的 Mysql数据库名称)

</property>

Red5启动后在浏览器中输入:http://localhost:5080/openmeetings/install (red5默认监听端口为5080)即可以看到一个安装向导,按照提示输入相关信息(这里注意两点:①填写Ghostscript、Swftool的安装路径时后面需要加上“\”,也可以在安装后重新配置。②需要一个邮件服务器来支持用户自助注册,如果没有可以不填,只是用户不能自助注册,只能管理员一个个添加。)