wasw100's Blog
2012/02/23

Google AD

2009年10月26日

把sql脚本导入powerdesigner

前几天研究wordpress的数据库设计,直接看sql导出的sql语句不直观,于是使用了powerdesigner的导入sql脚本功能,这样分析数据库的设计就更直观了。

1.安装wordpress后,程序就自动创建好了表(这个功能很人性化),我们要做的就是把创建表的sql语句导出,使用mysqldump命令导出

D:\>mysqldump -uroot -proot wpblog > wpblog.sql

D:\>

那么在D盘就生成了wordpress的数据库脚本,然后删掉注释和插入数据的语句(注释和插入数据挨着,所以删除很简单),不删除一些数据,powerdesigner可能会没响应

2.打开powerdesigner,选择File –> Reverse Engineer –> Database……

Model name随便写,我填的是wpblog,DBMS选MySQL 5.0

然后确定

在Selection选项卡中选:Using scripts files:添加刚才的导出的sql脚本(wpblog.sql)

Options选项卡中的File Encoding 选择:UTF8+QuickDetect

然后确定,一切OK

看来用powerdesigner设计数据库,导出SQL(右击空白处–>Properties–>Preview),用sql脚本看数据库的设计真的很方便。

–EOF–

2009年10月18日

xp下apache+php的环境的安装

想看一下php,在xp下配置了一个apache+php环境。

软件版本:

  1. apache_2.2.14-win32-x86-openssl-0.9.8k.msi
  2. php-5.2.11-Win32.zip(直接解压就可以用)

以上软件都在官方网站下载。

1、安装apache
直接安装(我安装的目录是D:\tools\Apache2.2)
中间有个填写服务器名的地方,可直接填写自己的计算机名,邮件填写自己的邮件。
在浏览器输入http://127.0.0.1/如果输出:

It works!

那么apache服务器就安装成功了。

2、安装php
直接解压即可,我解压到了D:\tools\php-5.2.11-Win32

3、配置
将php目录(D:\tools\php-5.2.11-Win32)下的php.ini-recommended另存为php.ini保存到C:\WINDOWS下(以后配置php就需要修改这个文件)
libmysql.dll(支持MySQL数据库),
php5ts.dll(apache服务器支持php)
复制到C:\WINDOWS\system32(在win2k,nt复制到C:\WINNT\system32下)

剩下的就是修改配置文件了。
开始-》所有程序-》Apache Server 2.2-》Configure Apache Server-》Edit the Apache httpd.conf Configuration File
或者直接用文本编辑器打开:D:\tools\Apache2.2\conf(apache安装目录下conf文件夹)下的httpd.conf

搜索LoadModule,按对应的方式添加上:

LoadModule php5_module D:\tools\php-5.2.11-Win32\php5apache2_2.dll

然后搜索 AddType,在
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
后面添上

 AddType application/x-httpd-php .php
 AddType application/x-httpd-php .htm

重启一下服务器,这样服务器就支持php了

4、测试
新建一个文本文件,内容如下

<?php
phpinfo();
?>

保存到apache安装目录下的htdocs文件夹下(我的D:\tools\Apache2.2\htdocs),保存名为:test.php
打开浏览器,输入http://127.0.0.1/test.php
如果成功,就输出一些系统信息,如果失败,应该就原样输出
我也是第一次安装(接触)php,如有问题,请留言,大家共同探讨。

<!–今天(10月19号)做连接MySQL数据库是发现没有成功,下面是解决方法,有问题大家讨论–>
今天发现数据库还是连接不上,一连数据库出现下面的错误(要有错误显示,需要修改c:\windows下php.ini的display_errors = Off改为display_errors = On,负责不显示数据):

Fatal error: Call to undefined function mysql_connect() in D:\tools\Apache2.2\htdocs\connsql.php on line 8

然后Google,最后终于发现了问题的所在,既然apache连接php成功
php连接不上MySQL,那问题出现在php的配置上,而不是apache的配置上,所以继续修改php.ini

在C:\Windows\php.ini下搜索:extension_dir,原来的配置是”.\”,你修改为你php解压到的路径,我的是修改为

extension_dir = "D:\tools\php-5.2.11-Win32\ext"

然后继续搜索extension,把

extension=php_curl.dll
extension=php_dba.dll
……
extension=php_imap.dll
……
extension=php_mysql.dll
extension=php_mysqli.dll

之前的分号去,重启apache服务器,问题解决。

<!– 10月20日更新 WordPress显示问题  –>

今天研究博客数据库的设计,下载了大名鼎鼎的WordPress中文版,安装一切正常,管理界面也正常,但是一访问主页就显示文件列表

修改了一下apache的配置文件(开始-》所有程序-》Apache Server 2.2-》Configure Apache Server-》Edit the Apache httpd.conf Configuration File)

搜索index.html,修改为index.php 问题解决,修改后如下

<IfModule dir_module>
    DirectoryIndex index.php
</IfModule>

重启apache,问题解决

–EOF–

2009年10月14日

jdk1.5新特性总结

面试的时候面试官问我jdk1.5的新特性,居然只回答上两个(泛型,增强for循环),回来一查,其实都接触过,而且好几个特性自己还经常用。

下面就总结一下:1.泛型(Generic) 2.增强for循环(For-Each循环) 3.自动装箱与拆箱(Autoboxing/unboxing) 4.静态导入(static import) 5.格式化打印(formatted print) 6.枚举(Enum) 7.可变参数(varargs)

1、泛型(Generic)
可以在编译的时候检测出类型错误,编译后和没有使用泛型的效果是相同的,但是使用泛型可以让你在编译时就发现错误,例如:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class GenericTest {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(new Integer(1));
		c.add("123");
		for(Iterator i=c.iterator();i.hasNext();){
			String s = (String) i.next();
			System.out.println(s);
		}
	}
}

运行结果:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
	at GenericTest.main(GenericTest.java:12)

Collection应该只存放String对象,但是我们“不小心”添加了一个Integer类型的对象,编译正常进行,程序在运行时才发现错误。

下面是使用了泛型后的程序

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class GenericTest {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<String>();
		c.add(new Integer(1));
		c.add("123");
		for(Iterator<String> i=c.iterator();i.hasNext();){
			String s = i.next();
			System.out.println(s);
		}
	}
}

运行结果
D:\test>javac GenericTest.java
GenericTest.java:8: 无法将 java.util.Collection<java.lang.String> 中的 add(java.lang.String) 应用于 (java.lang.Integer)
                c.add(new Integer(1));
                 ^
1 错误

D:\test>

使用了泛型之后在编译时就发现了错误,可以增强程序的健壮性,而其i.next();也不用使用强制类型转换了。

2、增强for循环(For-Each)
For-Each的内部是用Iterator实现的,但是使用起来更简单,例如使用For-Each实现1-2如下

import java.util.ArrayList;
import java.util.Collection;

public class GenericTest {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<String>();
		c.add("aa");
		c.add("bb");
		for(String s:c){
			System.out.println(s);
		}
	}
}
运行结果:
aa
bb

比Integer方便多了吧?可以使程序员更加注重逻辑,而不是代码本身。

3、自动装箱拆箱(Autoboxing/unboxing)

Integer i = new Integer(2);
//i自动拆箱为int类型
System.out.println(i==2);
//3自动装箱为Integer类型
System.out.println(i.equals(3));

4、静态导入(static import)

//静态导入Math的random方法
import static java.lang.Math.random;

public class StaticImportTest {
	public static void main(String[] args){
		//类中生成随机数数可以直接使用静态引入的random方法了,而不用Math.random()这样调用了
		System.out.println(random());
	}
}

5、格式化打印(formatted print)

C语言中printf()风格的格式化输出。

这里只举一个thinking in java的一个例子:

public class SimpleFormat {
	public static void main(String[] args) {
		int x = 5;
		double y = 5.332542;
		//The old way
		System.out.println("Row 1: ["+x+" "+y+"]");
		//The new way
		System.out.format("Row 1: [%d %f]\n", x,y);
		//or
		System.out.printf("Row 1: [%d %f]\n", x, y);
	}
}

运行结果:
Row 1: [5 5.332542]
Row 1: [5 5.332542]
Row 1: [5 5.332542]

可以看到,format和printf是等价的,他们只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符

6、枚举(Enum)

当每一类型可取值范围是有限的时候,可以使用枚举,例如每个学生登记只能用ABCD表示,如果直接用E的话,那么编译不会出错,但是却不符合输入要求,而使用枚举增加程序的易读性和健壮性?

public class GradeTest {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.setName("wasw100");
		stu.setGrade(Grade.A);
		//输出学生信息
		System.out.println(stu);
	}
}

/**
 * 枚举:Grader 学生考试等级
 * @author wasw100
 */
enum Grade{
	A,B,C,D
}

class Student {
	private String name;
	private Grade grade;

	//重写toString()方法
	public String toString(){
		return "name:+"+name+"\ngrader:"+grade;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Grade getGrade() {
		return grade;
	}

	public void setGrade(Grade grade) {
		this.grade = grade;
	}

}

7、可变长参数(varargs)

方法的参数是不固定的我们一般会使用重载或者使用数组参数。重载需要些更多写更多的方法,数组需要在使用时先声明。

可能参数是一个不错的解决方案。

下面是网上一个 唐僧 给 悟空 将佛经的例子

public class VarargsTest {
	public void speak(String name, Object... arguments) {
		System.out.print(name+": ");
		for (Object object : arguments) {
			System.out.print(object);
		}
		System.out.println();
	}

	public static void main(String[] args) {
		VarargsTest vt = new VarargsTest();
		vt.speak("悟空", "人和妖精都是妈生的,");
		vt.speak("悟空", "不同的人是人他妈生的,", "妖是妖他妈生的,");
	}
}

运行结果:
悟空: 人和妖精都是妈生的,
悟空: 不同的人是人他妈生的,妖是妖他妈生的,

可变长参数只能作为最后一个参数。

返回顶部