zx_bing

人生路漫漫,多学些知识总是有益处的
随笔 - 32, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

2012年7月25日

sql browser 无法启动终极解决办法

一、为 SQL 启用远程连接

1. 单击“开始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后单击“SQL Server 外围应用配置器”。
2. 在“SQL Server 2005 外围应用配置器”页上,单击“服务和连接的外围应用配置器”。
3. 在“服务和连接的外围应用配置器”页上,展开“数据库引擎”,依次单击“远程连接”和“本地连接和远程连接”,单击适用于您的环境的相应协议,然后单击“应用”。

注意:请在接收到以下消息时单击“确定”:
直到重新启动数据库引擎服务后,对连接设置所做的更改才会生效。
4. 在“服务和连接的外围应用配置器”页上,展开“数据库引擎”,依次单击“服务”和“停止”,等待 MSSQLSERVER 服务停止,然后单击“启动”以重新启动 MSSQLSERVER 服务。

二、启用 SQL Server Browser 服务

1. 单击“开始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后单击“SQL Server 外围应用配置器”。
2. 在“SQL Server 2005 外围应用配置器”页上,单击“服务和连接的外围应用配置器”。
3. 在“服务和连接的外围应用配置器”页上,单击“SQL Server Browser”,在“启动类型”中单击“自动”选项,然后单击“应用”。

注意:在单击“自动”选项后,每次启动 Microsoft Windows 时将自动启动 SQL Server Browser 服务。
4. 单击“启动”,然后单击“确定”。

三、在 Windows 防火墙中为SQL Server
2005 创建例外

1. 在 Windows 防火墙中,单击“例外”选项卡,然后单击“添加程序”。
2. 在“添加程序”窗口中,单击“浏览”。
3. 单击 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe 可执行程序,单击“打开”,然后单击“确定”。

注意:上述路径可能会根据 SQL Server
2005 的安装位置而不同。

四、在 Windows 防火墙中为 SQL Server Browser 服务创建例外

1. 在 Windows 防火墙中,单击“例外”选项卡,然后单击“添加程序”。
2. 在“添加程序”窗口中,单击“浏览”。
3. 单击 C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe 可执行程序,单击“打开”,然后单击“确定”。

注意:上述路径可能会根据 SQL Server
2005 的安装位置而不同。

五、远程连接端口设置(很关键的一步,很多方法只讲了一到四步,却没有讲到第五步)

1、在服务器上打开SQL Server Configuration Manager。选择SQL Server配置治理器->SQL Server 2005网络配置->MSSQLSERVER的协议->TCP/IP,在弹出对话框中选择IP地址->IPALL->TCP端口,设置为可用端口。(如果默认的1433端口老是连接不上,你就设置为你确认已经打开的端口试试,如21端口等)

2、在“服务和连接的外围应用配置器”页上,展开“数据库引擎”,依次单击“服务”和“停止”,等待 MSSQLSERVER 服务停止,然后单击“启动”以重新启动 MSSQLSERVER 服务。

六、测试连接

1、打开SQL2005登陆界面,输入服务器IP和用户名及密码。
如:
服务器名称:
192.168.1.200,21
用户名:sa
密码:sa
点连接,结果连接成功。
PS:上面的服务器名称中的,21中的21第五步中第1步中设置的IPALL中的TCP端口

posted @ 2012-07-30 07:23 zx_bing| 编辑 收藏

hibernate+java+sql 之间数据类型转换关系














































































































Hibernate映射类型java类型标准SQL类型
integerjava.lang.Integerinteger
longjava.lang.Longbigint
shortjava.lang.Shortsmallint
floatjava.lang.Floatfloat
doublejava.lang.Floatdouble
big_decimaljava.math.BigDecimalnumeric
characterjava.lang.Stringchar(1)
stringjava.lang.Stringvarchar
bytebyte或java.lang.Bytetinyint
booleanboolean或java.lang.Boolean  bit
yes_no    boolean或java.lang.Booleanchar(1)('Y'/'N')
true_falseboolean或java.lang.Booleanchar(1)('Y'/'N')
datejava.util.Date或java.sql.Datedate
timejava.util.Date或java.sql.Timetime
timestampjava.util.Date或java.sql.timestamptimestamp
calendarjava.util.Calendartimestamp
calendar_datejava.util.Calendardate
binarybyte[]varbinary或blob
textjava.lang.Stringclob
serializablejava.io.Serializable实例varbinary或blob
clobjava.sql.Clobclob
blobjava.sql.Blobvarbinary或blob
classjava.lang.Classvarchar
localejava.util.Localevarchar
timezonejava.util.TimeZonevarchar
currencyjava.util.Currencyvarchar

posted @ 2012-07-27 14:37 zx_bing| 编辑 收藏

外键查询 遇到错误:could not initialize proxy - the owning Session was close

关于lazy机制:

延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。

下面把Customer.hbm.xml文件的<class>元素的lazy属性设为true,表示使用延迟检索策略:

<class name="mypack.Customer" table="CUSTOMERS" lazy="true">

当执行Session的load()方法时,Hibernate不会立即执行查询CUSTOMERS表的select语句,仅仅返回Customer类的代理类的实例,这个代理类具由以下特征:

(1) 由Hibernate在运行时动态生成,它扩展了Customer类,因此它继承了Customer类的所有属性和方法,但它的实现对于应用程序是透明的。
(2) 当Hibernate创建Customer代理类实例时,仅仅初始化了它的OID属性,其他属性都为null,因此这个代理类实例占用的内存很少。
(3)当应用程序第一次访问Customer代理类实例时(例如调用customer.getXXX()或customer.setXXX()方法), Hibernate会初始化代理类实例,在初始化过程中执行select语句,真正从数据库中加载Customer对象的所有数据。但有个例外,那就是当应用程序访问Customer代理类实例的getId()方法时,Hibernate不会初始化代理类实例,因为在创建代理类实例时OID就存在了,不必到数据库中去查询。

提示:Hibernate采用CGLIB工具来生成持久化类的代理类。CGLIB是一个功能强大的Java字节码生成工具,它能够在程序运行时动态生成扩展 Java类或者实现Java接口的代理类。关于CGLIB的更多知识,请参考:http://cglib.sourceforge.net/。

以下代码先通过Session的load()方法加载Customer对象,然后访问它的name属性:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.getName();
tx.commit();

在运行session.load()方法时Hibernate不执行任何select语句,仅仅返回Customer类的代理类的实例,它的OID为1,这是由load()方法的第二个参数指定的。当应用程序调用customer.getName()方法时,Hibernate会初始化Customer代理类实例,从数据库中加载Customer对象的数据,执行以下select语句:

select * from CUSTOMERS where ID=1;
select * from ORDERS where CUSTOMER_ID=1;

当<class>元素的lazy属性为true,会影响Session的load()方法的各种运行时行为,下面举例说明。

1.如果加载的Customer对象在数据库中不存在,Session的load()方法不会抛出异常,只有当运行customer.getName()方法时才会抛出以下异常:

ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 1, of class:
mypack.Customer

2.如果在整个Session范围内,应用程序没有访问过Customer对象,那么Customer代理类的实例一直不会被初始化,Hibernate不会执行任何select语句。以下代码试图在关闭Session后访问Customer游离对象:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
tx.commit();
session.close();
customer.getName();

由于引用变量customer引用的Customer代理类的实例在Session范围内始终没有被初始化,因此在执行customer.getName()方法时,Hibernate会抛出以下异常:

ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed

由此可见,Customer代理类的实例只有在当前Session范围内才能被初始化。

3.net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显式初始化代理类实例,isInitialized()方法用于判断代理类实例是否已经被初始化。例如:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
if(!Hibernate.isInitialized(customer))
Hibernate.initialize(customer);
tx.commit();
session.close();
customer.getName();

以上代码在Session范围内通过Hibernate类的initialize()方法显式初始化了Customer代理类实例,因此当Session关闭后,可以正常访问Customer游离对象。

4.当应用程序访问代理类实例的getId()方法时,不会触发Hibernate初始化代理类实例的行为,例如:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.getId();
tx.commit();
session.close();
customer.getName();

当应用程序访问customer.getId()方法时,该方法直接返回Customer代理类实例的OID值,无需查询数据库。由于引用变量 customer始终引用的是没有被初始化的Customer代理类实例,因此当Session关闭后再执行customer.getName()方法, Hibernate会抛出以下异常:

ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed


解决方法:

由于hibernate采用了lazy=true,这样当你用hibernate查询时,返回实际为利用cglib增强的代理类,但其并没有实际填充;当你在前端,利用它来取值(getXXX)时,这时Hibernate才会到数据库执行查询,并填充对象,但此时如果和这个代理类相关的session已关闭掉,就会产生种错误.
在做一对多时,有时会出现"could not initialize proxy - clothe owning Session was sed,这个好像是hibernate的缓存问题.问题解决:需要在<many-to-one>里设置lazy="false". 但有可能会引发另一个异常叫

failed to lazily initialize a collection of role: XXXXXXXX, no session or session was closed

此异常解决方案请察看本人博客(http://hi.baidu.com/kekemao1)的Hibernate异常中的《failed to lazily initialize a collection of role异常》

?
解决方法:在web.xml中加入
<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>
     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    </filter-class>
</filter
<filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>
就可以了;

参考了:
Hibernate与延迟加载:

Hibernate对象关系映射提供延迟的与非延迟的对象初始化。非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一起读取出来。这有时会导致成百的(如果不是成千的话)select语句在读取对象的时候执行。这个问题有时出现在使用双向关系的时候,经常会导致整个数据库都在初始化的阶段被读出来了。当然,你可以不厌其烦地检查每一个对象与其他对象的关系,并把那些最昂贵的删除,但是到最后,我们可能会因此失去了本想在ORM工具中获得的便利。


一个明显的解决方法是使用Hibernate提供的延迟加载机制。这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。这个过程对开发者来说是透明的,而且只进行了很少的数据库操作请求,因此会得到比较明显的性能提升。这项技术的一个缺陷是延迟加载技术要求一个Hibernate会话要在对象使用的时候一直开着。这会成为通过使用DAO模式将持久层抽象出来时的一个主要问题。为了将持久化机制完全地抽象出来,所有的数据库逻辑,包括打开或关闭会话,都不能在应用层出现。最常见的是,一些实现了简单接口的DAO实现类将数据库逻辑完全封装起来了。一种快速但是笨拙的解决方法是放弃DAO模式,将数据库连接逻辑加到应用层中来。这可能对一些小的应用程序有效,但是在大的系统中,这是一个严重的设计缺陷,妨碍了系统的可扩展性。

在Web层进行延迟加载

幸运的是,Spring框架为Hibernate延迟加载与DAO模式的整合提供了一种方便的解决方法。对那些不熟悉Spring与Hibernate集成使用的人,我不会在这里讨论过多的细节,但是我建议你去了解Hibernate与Spring集成的数据访问。以一个Web应用为例,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我们可以随意选择一个类来实现相同的功能。两种方法唯一的不同就在于interceptor在Spring容器中运行并被配置在web应用的上下文中,而Filter在Spring之前运行并被配置在web.xml中。不管用哪个,他们都在请求将当前会话与当前(数据库)线程绑定时打开Hibernate会话。一旦已绑定到线程,这个打开了的Hibernate会话可以在DAO实现类中透明地使用。这个会话会为延迟加载数据库中值对象的视图保持打开状态。一旦这个逻辑视图完成了,Hibernate会话会在Filter的doFilter方法或者Interceptor的postHandle方法中被关闭。下面是每个组件的配置示例:



Interceptor的配置:


<beans>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">

</bean>

<bean name="openSessionInViewInterceptor"
class="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
</beans>

Filter的配置


<web-app>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*. spring </url-pattern>
</filter-mapping>

</web-app>


实现Hibernate的Dao接口来使用打开的会话是很容易的。事实上,如果你已经使用了Spring框架来实现你的Hibernate Dao,很可能你不需要改变任何东西。方便的HibernateTemplate公用组件使访问数据库变成小菜一碟,而DAO接口只有通过这个组件才可以访问到数据库。下面是一个示例的DAO:


public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {

public Product getProduct(Integer productId) {
return (Product)getHibernateTemplate().load(Product.class, productId);
}

public Integer saveProduct(Product product) {
return (Integer) getHibernateTemplate().save(product);
}

public void updateProduct(Product product) {
getHibernateTemplate().update(product);
}
}


在业务逻辑层中使用延迟加载

即使在视图外面,Spring框架也通过使用AOP 拦截器 HibernateInterceptor来使得延迟加载变得很容易实现。这个Hibernate 拦截器透明地将调用配置在Spring应用程序上下文中的业务对象中方法的请求拦截下来,在调用方法之前打开一个Hibernate会话,然后在方法执行完之后将会话关闭。让我们来看一个简单的例子,假设我们有一个接口BussinessObject:


public     interface    BusinessObject     {
public     void    doSomethingThatInvolvesDaos();
}
类BusinessObjectImpl实现了BusinessObject接口:

public     class    BusinessObjectImpl    implements    BusinessObject     {
public     void    doSomethingThatInvolvesDaos()     {
//    lots of logic that calls
//    DAO classes Which access
//    data objects lazily 





通过在Spring应用程序上下文中的一些配置,我们可以让将调用BusinessObject的方法拦截下来,再令它的方法支持延迟加载。看看下面的一个程序片段:



<beans>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl">
<property name="someDAO"><ref bean="someDAO"/></property>
</bean>
<bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target"><ref bean="businessObjectTarget"/></property>
<property name="proxyInterfaces">
<value>com.acompany.BusinessObject</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
</list>
</property>
</bean>
</beans>

当businessObject被调用的时候,HibernateInterceptor打开一个Hibernate会话,并将调用请求传递给BusinessObjectImpl对象。当BusinessObjectImpl执行完成后,HibernateInterceptor透明地关闭了会话。应用层的代码不用了解任何持久层逻辑,还是实现了延迟加载。


在单元测试中测试延迟加载

最后,我们需要用J-Unit来测试我们的延迟加载程序。我们可以轻易地通过重写TestCase类中的setUp和tearDown方法来实现这个要求。我比较喜欢用这个方便的抽象类作为我所有测试类的基类。


public abstract class MyLazyTestCase extends TestCase {

private SessionFactory sessionFactory;
private Session session;

public void setUp() throws Exception {
super.setUp();
SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory");
session = SessionFactoryUtils.getSession(sessionFactory, true);
Session s = sessionFactory.openSession();
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s));

}

protected Object getBean(String beanName) {
//Code to get objects from Spring application context
}

public void tearDown() throws Exception {
super.tearDown();
SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
Session s = holder.getSession();
s.flush();
TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory);
}

--------------------------------------------------------------
--------------------------------------------------------------

Java代码 复制代码 收藏代码
  1. <?xml version="1.0"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC 
  3.     "-//Hibernate/Hibernate Mapping DTD//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
  5. <hibernate-mapping package="com.isoftstone.lms.model"
  6.     <class name="Order" table="sv_order"
  7.         <id name="orderId" column="sv_order_id" type="string"
  8.             <generator class="sequence"
  9.                 <param name="sequence">SEQ_ORDERID</param> 
  10.             </generator> 
  11.         </id> 
  12.          
  13.         many-to-one name="style" column="sv_style_id" lazy="false" /> 
  14.         <many-to-one name="state" column="sv_state_id"  lazy="false"/> 
  15.         <many-to-one name="client" column="sv_client_id" lazy="false" /> 
  16.         <many-to-one name="baseOrder" column="sv_order_baseid"  lazy="false"/> 
  17.         <property name="orderNo" column="sv_order_orderno" type="long" /> 
  18.         <property name="createDate" column="sv_order_createdate" type="date" /> 
  19.         <property name="sendDate" column="sv_order_senddate" type="string" /> 
  20.         <property name="sendAddress" column="sv_order_sendAddress" type="string" /> 
  21.         <property name="accepter" column="sv_order_accepter" type="string" /> 
  22.         <property name="postNo" column="sv_order_postNo" type="string" /> 
  23.         <property name="phone" column="sv_order_phone" type="string" /> 
  24.         <property name="totalMoney" column="sv_order_totalmoney" type="double" /> 
  25.         <property name="isinvoice" column="sv_order_isinvoice" type="int" /> 
  26.         <property name="remark" column="sv_order_remark" type="string" /> 
  27.          
  28.         <set name="orderGoodss" inverse="true" lazy="extra" cascade="all"
  29.             <key column="sv_order_id"/> 
  30.             <one-to-many class="OrderGoods"/> 
  31.         </set> 
  32.     </class
  33. </hibernate-mapping> 

[color=red]
Java代码 复制代码 收藏代码
  1. <many-to-one name="style" column="sv_style_id" lazy="false" /> 
  2. <many-to-one name="state" column="sv_state_id"  lazy="false"/> 
  3. <many-to-one name="client" column="sv_client_id" lazy="false" /> 
  4. <many-to-one name="baseOrder" column="sv_order_baseid"  lazy="false"/> 
[/color]

posted @ 2012-07-27 14:13 zx_bing| 编辑 收藏

Hibernate基于外键查询

Java代码 复制代码 收藏代码
  1. public List<Order> getClientOrder(String clientId) { 
  2.  
  3.         Session session = null
  4.         List<Order> orderList = null
  5.         try
  6.             session = HibernateUtil.getSession(); 
  7.             session.beginTransaction(); 
  8.             orderList = session.createQuery("from Order o where o.client.clientId = ?"
  9.                                 .setParameter(1,clientId) 
  10.                                 .list(); 
  11.             session.getTransaction().commit(); 
  12.         } catch (Exception e) { 
  13.             e.printStackTrace(); 
  14.             session.getTransaction().rollback(); 
  15.         } finally
  16.             HibernateUtil.closeSession(session); 
  17.         } 
  18.  
  19.         return orderList; 
  20.     } 

posted @ 2012-07-27 14:11 zx_bing| 编辑 收藏

hibernate 多条件查询

Java代码 复制代码 收藏代码
  1. public List<Client> searchClients(String clientName, String tel, 
  2.             String identityNo) { 
  3.  
  4.         StringBuffer sb = new StringBuffer("from Client c where 1=1"); 
  5.          
  6.         if(clientName != null && !"".equals(clientName) ){ 
  7.             sb.append("and c.name like '%" + clientName + "%'"); 
  8.         } 
  9.         if(tel != null && !"".equals(tel)){ 
  10.             sb.append("and c.tel = " + tel); 
  11.         } 
  12.         if(identityNo != null && !"".equals(identityNo)){ 
  13.             sb.append("and c.identityNo = " + identityNo); 
  14.         } 
  15.         return clientDao.searchClients(sb.toString()); 

posted @ 2012-07-27 14:08 zx_bing| 编辑 收藏

输入框要求用JAVASCRIPT去验证不能超过12个数字或英文或数字英文组合,还要求不能超过6个汉字,还要验证汉字和字母,数字的组合

<input name="username" value="" length="12" maxlengthd="12"/>
数据库里面username vachar2(12)

这个输入框要求用JAVASCRIPT去验证不能超过12个数字或英文或数字英文组合,还要求不能超过6个汉字,还要验证汉字和字母,数字的组合

如:用户名1999(就可以),麦克斯韦1999(就不行)

因为数据库里面要求的长度是12,一个汉字就占两个,但是在页面可以输入12个汉字
请用JAVASCRIPT写出你的解决方案?



Js代码 复制代码 收藏代码
  1. <html>   
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
  3. 输入待测字串: &nbsp;<input type="text" onblur="test(this.value);">   
  4. </html>   
  5. <script language="javascript">   
  6. <!--    
  7. //测试匹配情况    
  8. function test(inputVal)    
  9. {    
  10.     //去除首尾空格    
  11.     inputValinputVal = inputVal.replace(/^\s*|\s*$/g,"");    
  12.     //零长字串不作处理    
  13.     if ( inputVal.length == 0 )    
  14.     {    
  15.         return;    
  16.     }    
  17.     //只能匹配数字,字母或汉字    
  18.     var _match = inputVal.match(/^[a-zA-Z0-9\u4e00-\u9fa5]+$/g);    
  19.     //匹配数字或字母(包括大小写)    
  20.     var codeMatch = inputVal.match(/[a-zA-Z0-9]/g);    
  21.     //匹配汉字    
  22.     var charMatch = inputVal.match(/[\u4e00-\u9fa5]/g);    
  23.     //数字或字母个数    
  24.     var codeNum = codeMatch ? codeMatch.length : 0;    
  25.     //汉字个数    
  26.     var charNum = charMatch ? charMatch.length : 0;    
  27.     //成功    
  28.     if ( _match && codeNum + 2*charNum <= 12 )    
  29.     {    
  30.         alert("输入正确!");    
  31.         return;    
  32.     }    
  33.     //失败    
  34.     alert("输入错误!");     
  35. }    
  36. //-->   
  37. </script> 

posted @ 2012-07-27 14:06 zx_bing| 编辑 收藏

Ajax 模拟动态列表

three.html
Java代码 复制代码 收藏代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. <html> 
  3.     <head> 
  4.         <title>index.html</title> 
  5.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"
  6.         <meta http-equiv="description" content="this is my page"
  7.         <meta http-equiv="content-type" content="text/html; charset=GBK"
  8.         <script type="text/javascript"
  9.         var xmlhttp; 
  10.         function loadXMLDoc(valueFromSelect1){ 
  11.             var url = "three.jsp?valueFromSelect=" + valueFromSelect1 + "&" + Math.random(); 
  12.             alert(url); 
  13.             xmlhttp=null
  14.             if (window.XMLHttpRequest){ 
  15.               xmlhttp=new XMLHttpRequest(); 
  16.             } 
  17.             else if (window.ActiveXObject){ 
  18.               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
  19.             } 
  20.             if (xmlhttp!=null){ 
  21.               xmlhttp.onreadystatechange=updatePage; 
  22.               xmlhttp.open("GET",url,true); 
  23.               xmlhttp.send(null); 
  24.             } 
  25.             else
  26.               alert("Your browser does not support XMLHTTP."); 
  27.             } 
  28.         } 
  29.          
  30.         function state_Change(){ 
  31.             if (xmlhttp.readyState==4){ 
  32.                 if (xmlhttp.status==200){ 
  33.                     updatePage(); 
  34.                 } 
  35.                 else
  36.                     alert("Problem retrieving XML data"); 
  37.                 } 
  38.             } 
  39.         } 
  40.          
  41.         function updatePage(){             
  42.             // 清空select2 
  43.             while(select2.options[0] != null){ 
  44.                 select2.options[0] = null
  45.             } 
  46.              
  47.             // 设置select2 
  48.             var xmlDoc = xmlhttp.responseXML; 
  49.             alert(xmlDoc); 
  50.             var labelValueBeanElements = xmlDoc.getElementsByTagName("labelValueBean"); 
  51.            
  52.             for (var i = 0; i < labelValueBeanElements.length; i++){ 
  53.                 var entityValue = xmlDoc.getElementsByTagName("value")[i].childNodes[0].nodeValue; 
  54.                 var entityLabel = xmlDoc.getElementsByTagName("label")[i].childNodes[0].nodeValue; 
  55.                 select2.options[i] = new Option(entityLabel,entityValue,false,false); 
  56.             } 
  57.         } 
  58.         </script> 
  59.     </head> 
  60.  
  61.     <body> 
  62.         select1: 
  63.         <select id="select1" onchange="loadXMLDoc(this.value)"
  64.             <option value="1">1</option> 
  65.             <option value="2">2</option> 
  66.         </select> 
  67.         <br/> 
  68.         select2: 
  69.         <select id="select2"
  70.         </select> 
  71.         <input type="button" value="显示select2的值" onclick="alert(select2.value)"
  72.     </body> 
  73. </html> 






three.jsp
Java代码 复制代码 收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
  2.     pageEncoding="UTF-8"%> 
  3.      
  4. <%! 
  5.     private String fromDB (String valueFromSelect)  { 
  6.         StringBuffer sb = new StringBuffer(); 
  7.  
  8.         if (valueFromSelect.equals("1")) { 
  9.             sb.append("    <labelValueBean>\n"); 
  10.             sb.append("        <value>haha</value>\n"); 
  11.             sb.append("        <label>哈哈</label>\n"); 
  12.             sb.append("    </labelValueBean>\n"); 
  13.             sb.append("    <labelValueBean>\n"); 
  14.             sb.append("        <value>hehe</value>\n"); 
  15.             sb.append("        <label>呵呵</label>\n"); 
  16.             sb.append("    </labelValueBean>\n"); 
  17.         } else if (valueFromSelect.equals("2")) { 
  18.             sb.append("    <labelValueBean>\n"); 
  19.             sb.append("        <value>heihei</value>\n"); 
  20.             sb.append("        <label>嘿嘿</label>\n"); 
  21.             sb.append("    </labelValueBean>\n"); 
  22.             sb.append("    <labelValueBean>\n"); 
  23.             sb.append("        <value>gaga</value>\n"); 
  24.             sb.append("        <label>嘎嘎</label>\n"); 
  25.             sb.append("    </labelValueBean>\n"); 
  26.             sb.append("    <labelValueBean>\n"); 
  27.             sb.append("        <value>woyun</value>\n"); 
  28.             sb.append("        <label>我晕</label>\n"); 
  29.             sb.append("    </labelValueBean>\n"); 
  30.             sb.append("    <labelValueBean>\n"); 
  31.             sb.append("        <value>123</value>\n"); 
  32.             sb.append("        <label>456</label>\n"); 
  33.             sb.append("    </labelValueBean>\n"); 
  34.         } 
  35.         return sb.toString(); 
  36.     } 
  37.  
  38. %> 
  39. <% 
  40.     String valueFromSelect = request.getParameter("valueFromSelect"); 
  41.  
  42.     StringBuffer sb = new StringBuffer(); 
  43.     sb.append("<?xml version=\"1.0\" encoding=\"gb2312\"?>\n"); 
  44.     sb.append("<resultFromDB>\n"); 
  45.     sb.append(fromDB(valueFromSelect)); 
  46.     sb.append("</resultFromDB>\n"); 
  47.     response.setHeader("content-type", "text/xml;charset=GBK"); 
  48.     System.out.println(sb); 
  49.     out.println(sb.toString()); 
  50.     //out.flush(); 
  51.     out.close(); 
  52.      
  53.     %> 

posted @ 2012-07-27 14:04 zx_bing| 编辑 收藏

全选调用的JS函数

Java代码 复制代码 收藏代码
  1. function selectall()  
  2. {  
  3.     //获取页面上所有的输入元素 
  4.     var a = document.getElementsByTagName("input");  
  5.     //如果全选按钮按上 
  6.     if(document.getElementById("quanxuanbutton").checked == true
  7.     { 
  8.         //循环是checkbox类型的,就设置为true 
  9.         for (var i=0; i<a.length; i++) 
  10.         { 
  11.             if (a[i].type == "checkbox"
  12.             { 
  13.                 a[i].checked =true
  14.             } 
  15.         }        
  16.          
  17.     }else{ //如果全选按钮没有按上 
  18.       for (var i=0; i<a.length; i++) 
  19.         { 
  20.             if (a[i].type == "checkbox"
  21.             { 
  22.                  
  23.                 a[i].checked =false
  24.             } 
  25.         }   
  26.     } 
  27. }  

posted @ 2012-07-27 14:03 zx_bing| 编辑 收藏

dwr 实现二级联动 js

Java代码 复制代码 收藏代码
  1. //省市联动  
  2. var c_cigy = ''
  3. //记录第二个列表id,以备回调函数用 
  4. var cityItemName = ''
  5.  
  6. function  changeCityOyp(province,city,relateItemName) { 
  7.     ServerDwrUtil.getCityList(province.value,setCityOption); 
  8.     //记录二级下拉的 id relateItemName 供回调函数使用 
  9.     cityItemName = relateItemName; 
  10.     // 中国 则 二级下拉 不能选择 
  11.     if(province.value == '0001') { 
  12.         document.getElementById(cityItemName).disabled = true
  13.     } else
  14.         document.getElementById(cityItemName).disabled = false
  15.     } 
  16.     //省份在一个单元格里,省份前面有个input输入框,得到input对象,再把省份传进去 
  17.     var provinceInput  = province.parentNode.firstChild; 
  18.     //如果省份为空,则单元格为空 
  19.     if (province.value == '') { 
  20.         provinceInput.value = ''
  21.         return
  22.     } 
  23.     provinceInput.value = province.options[province.selectedIndex].text; 
  24.      
  25. // 回调函数 args返回的是list.add(Map) map中{id},经过 spring配置 对于一些特例返回的Class,且dwr不能识别的, 
  26. //</dwr:configuration> 
  27. // 设置二级下拉列表 
  28. function setCityOption (args) { 
  29.     alert(args.toString()); 
  30.     DWRUtil.removeAllOptions(cityItemName); 
  31.     DWRUtil.addOptions(cityItemName, [ "" ]); 
  32.     //id和name怎么确保的   args{[id:xxx,name:yyy],[id:xxx,name:yyyy]} 
  33.     DWRUtil.addOptions(cityItemName, args, "id", "name"); 

posted @ 2012-07-27 14:02 zx_bing| 编辑 收藏

javascript获取select的值全解

Js代码 复制代码 收藏代码
  1. 获取显示的汉字 
  2.  
  3. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
  4.  
  5. 获取数据库中的id 
  6.  
  7. window.document.getElementById("bigclass").value 
  8.  
  9. 获取select组分配的索引id 
  10.  
  11. window.document.getElementById("bigclass").selectedIndex 
  12.  
  13.  
  14. 例子: 
  15.  
  16. <select name="bigclass" id="bigclass" onChange="javascript:updatePage2();"
  17. <option value="" selected="selected">ajax实验</option> 
  18. <option value="4">我适宜市哈</option> 
  19. </select> 
  20.  
  21.  
  22. 使用 
  23. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
  24. 的结果是:我适宜市哈 
  25.  
  26. 使用 
  27. window.document.getElementById("bigclass").value 
  28. 的结果是:4 
  29.  
  30. 使用 
  31. window.document.getElementById("bigclass").selectedIndex 
  32. 的结果是:1 

posted @ 2012-07-27 14:01 zx_bing| 编辑 收藏

js变量作为URL参数 中文乱码解决方法

1--前台页面

Java代码 复制代码 收藏代码
  1. var uuid = encodeURI(encodeURI(oRecord.getData("uuid"))); 
  2.              var uname =encodeURI(encodeURI(oRecord.getData("uname"))); 
  3.               alert(uuid+"--"+uname); 
  4.               var updateURL =  contextPath+"/yuidemo/userManager.do?method=updateUser?uuid="+uuid+"&uname="+uname; 



2--控制层

Java代码 复制代码 收藏代码
  1. String uuid =  java.net.URLDecoder.decode(request.getParameter("uuid"),"utf-8"); 

posted @ 2012-07-27 14:00 zx_bing| 编辑 收藏

Hibernate query 学习笔记

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-27 13:51 zx_bing| 编辑 收藏

MySQL 5.1参考手册

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 08:06 zx_bing| 编辑 收藏

mysql 时间列自动插入当前日期时间

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 08:05 zx_bing| 编辑 收藏

从mysql 表中随机找出10条记录

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 08:04 zx_bing| 编辑 收藏

mysql授权指令

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 08:03 zx_bing| 编辑 收藏

监听器实现获取网络在线人数

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 08:00 zx_bing| 编辑 收藏

Hibernate的generator属性

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 07:59 zx_bing| 编辑 收藏

Tomcat的跨区域访问

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 07:57 zx_bing| 编辑 收藏

自定义Struts2中全局转换器

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 07:56 zx_bing| 编辑 收藏

利用百度地图的API定位地理位置

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 07:55 zx_bing| 编辑 收藏

java执行存储过程

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-26 07:53 zx_bing| 编辑 收藏

SpringMVC框架介绍


Spring框架提供了构造Web应用程序的全能MVC模块。Spring
MVC
分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行制定。是一个标准的MVC框架。



那你猜一猜哪一部分应该是哪一部分?






SpringMVC框架图




posted @ 2012-07-25 06:54 zx_bing| 编辑 收藏

java 技术博客

犀利中带点柔情 的博客
http://fengtiejun.iteye.com/blog/1606365

posted @ 2012-07-25 06:48 zx_bing| 编辑 收藏

提高js性能注意事项

一.执行效率
1. DOM
1.1 使用DocumentFragment优化多次append
说明:添加多个dom元素时,先将元素append到DocumentFragment中,最后统一将DocumentFragment添加到页面。
该做法可以减少页面渲染dom元素的次数。经IE和Fx下测试,在append1000个元素时,效率能提高10%-30%,Fx下提升较为明显。

服用前:
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    document.body.appendChild(el);
}

服用后:
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);

1.2 通过模板元素clone,替代createElement
说明:通过一个模板dom对象cloneNode,效率比直接创建element高。
性能提高不明显,约为10%左右。在低于100个元素create和append操作时,没有优势。

服用前:
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);   

服用后:
var frag = document.createDocumentFragment();
var pEl = document.getElementsByTagName('p')[0];
for (var i = 0; i < 1000; i++) {
    var el = pEl.cloneNode(false);
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);

1.3 使用一次innerHTML赋值代替构建dom元素
说明:根据数据构建列表样式的时候,使用设置列表容器innerHTML的方式,比构建dom元素并append到页面中的方式,效率有数量级上的提高。

服用前:
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);

服用后:
var html = [];
for (var i = 0; i < 1000; i++) {
    html.push('' + i + '
');
}
document.body.innerHTML = html.join('');

1.4 使用firstChild和nextSibling代替childNodes遍历dom元素
说明:约能获得30%-50%的性能提高。逆向遍历时使用lastChild和previousSibling。

服用前:
var nodes = element.childNodes;
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
……
}

服用后:
var node = element.firstChild;
while (node) {
……
node = node.nextSibling;
}


2. 字符串

2.1 使用Array做为StringBuffer,代替字符串拼接的操作
说明:IE在对字符串拼接的时候,会创建临时的String对象;经测试,在IE下,当拼接的字符串越来越大时,运行效率会急剧下降。Fx和Opera都对字符串拼接操作进行了优化;经测试,在Fx下,使用Array的join方式执行时间约为直接字符串拼接的1.4倍。

服用前:
var now = new Date();
var str = '';
for (var i = 0; i < 10000; i++) {
    str += '123456789123456789';
}
alert(new Date() - now);

服用后:
var now = new Date();
var strBuffer = [];
for (var i = 0; i < 10000; i++) {
    strBuffer.push('123456789123456789');
}
var str = strBuffer.join('');
alert(new Date() - now);


3. 循环语句

3.1 将循环控制量保存到局部变量
说明:对数组和列表对象的遍历时,提前将length保存到局部变量中,避免在循环的每一步重复取值。

服用前:
var list = document.getElementsByTagName('p');
for (var i = 0; i < list.length; i++) {
    ……
}

服用后:
var list = document.getElementsByTagName('p');
for (var i = 0, l = list.length; i < l; i++) {
    ……
}


3.2 顺序无关的遍历时,用while替代for
说明:该方法可以减少局部变量的使用。比起效率优化,更能直接看到的是字符数量的优化。该做法有程序员强迫症的嫌疑。

服用前:
var arr = [1,2,3,4,5,6,7];
var sum = 0;
for (var i = 0, l = arr.length; i < l; i++) {
    sum += arr[i];
}   

服用后:
var arr = [1,2,3,4,5,6,7];
var sum = 0, l = arr.length;
while (l--) {
    sum += arr[l];
}

4. 条件分支

4.1 将条件分支,按可能性顺序从高到低排列
说明:可以减少解释器对条件的探测次数。

4.2 在同一条件子的多(>2)条件分支时,使用switch优于if
说明:switch分支选择的效率高于if,在IE下尤为明显。4分支的测试,IE下switch的执行时间约为if的一半。

4.3 使用三目运算符替代条件分支
服用前:
if (a > b) {
num = a;
} else {
num = b;
}

服用后:
num = a > b ? a : b;


5. 定时器

5.1 需要不断执行的时候,优先考虑使用setInterval
说明:setTimeout每一次都会初始化一个定时器。setInterval只会在开始的时候初始化一个定时器

服用前:
var timeoutTimes = 0;
function timeout () {
    timeoutTimes++;
    if (timeoutTimes < 10) {
        setTimeout(timeout, 10);
    }
}
timeout();

服用后:
var intervalTimes = 0;
function interval () {
    intervalTimes++;
    if (intervalTimes >= 10) {
        clearInterval(interv);
    }
}
var interv = setInterval(interval, 10);

5.2 使用function而不是string
说明:如果把字符串作为setTimeout和setInterval的参数,浏览器会先用这个字符串构建一个function。

服用前:
var num = 0;
setTimeout('num++', 10);   

服用后:
var num = 0;
function addNum () {
    num++;
}
setTimeout(addNum, 10);


6. 其他

6.1 尽量不使用动态语法元素
说明:eval、Function、execScript等语句会再次使用javascript解析引擎进行解析,需要消耗大量的执行时间。

6.2 重复使用的调用结果,事先保存到局部变量
说明:避免多次取值的调用开销。

服用前:
var h1 = element1.clientHeight + num1;
var h2 = element1.clientHeight + num2;

服用后:
var eleHeight = element1.clientHeight;
var h1 = eleHeight + num1;
var h2 = eleHeight + num2;

6.3 使用直接量
说明:
var a = new Array(param,param,...) -> var a = []
var foo = new Object() -> var foo = {}
var reg = new RegExp() -> var reg = /.../

6.4 避免使用with
说明: with虽然可以缩短代码量,但是会在运行时构造一个新的scope。
OperaDev上还有这样的解释,使用with语句会使得解释器无法在语法解析阶段对代码进行优化。对此说法,无法验证。

服用前:
with (a.b.c.d) {
property1 = 1;
property2 = 2;
}


服用后:
var obj = a.b.c.d;
obj.property1 = 1;
obj.property2 = 2;


6.5 巧用||和&&布尔运算符

服用前:
function eventHandler (e) {
if(!e) e = window.event;
}


服用后:
function eventHandler (e) {
e = e || window.event;
}


服用前:
if (myobj) {
doSomething(myobj);
}


服用后:
myobj && doSomething(myobj);


6.6 类型转换
说明:
1).    数字转换成字符串,应用"" + 1,性能上:("" +) > String() > .toString() > new String();
2).    浮点数转换成整型,不使用parseInt(), parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,建议使用Math.floor()或者Math.round()
3).    对于自定义的对象,推荐显式调用toString()。内部操作在尝试所有可能性之后,会尝试对象的toString()方法尝试能否转化为String。


二.内存管理

2.1 循环引用
说明:如果循环引用中包含DOM对象或者ActiveX对象,那么就会发生内存泄露。内存泄露的后果是在浏览器关闭前,即使是刷新页面,这部分内存不会被浏览器释放。

简单的循环引用:
var el = document.getElementById('MyElement');
var func = function () {…}
el.func = func;
func.element = el;


但是通常不会出现这种情况。通常循环引用发生在为dom元素添加闭包作为expendo的时候。

如:
function init() {
    var el = document.getElementById('MyElement');
el.onclick = function () {……}
}
init();


init在执行的时候,当前上下文我们叫做context。这个时候,context引用了el,el引用了function,function引用了context。这时候形成了一个循环引用。

下面2种方法可以解决循环引用:

1)    置空dom对象

服用前:
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {……}
}
init();


服用后:
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {……}
el = null;
}
init();


将el置空,context中不包含对dom对象的引用,从而打断循环应用。
如果我们需要将dom对象返回,可以用如下方法:

服用前:
function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
    return el;
}
init();


服用后:
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {……}
try{
return el;
} finally {
    el = null;
}
}
init();

2)    构造新的context
服用前:
function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
}
init();


服用后:
function elClickHandler() {……}
function init() {
    var el = document.getElementById('MyElement');
    el.onclick = elClickHandler;
}
init();

把function抽到新的context中,这样,function的context就不包含对el的引用,从而打断循环引用。

2.2 通过javascript创建的dom对象,必须append到页面中
说明:IE下,脚本创建的dom对象,如果没有append到页面中,刷新页面,这部分内存是不会回收的!

示例代码:

    function create () {
        var gc = document.getElementById('GC');
        for (var i = 0; i < 5000 ; i++)
        {
            var el = document.createElement('div');
            el.innerHTML = "test";

            //下面这句可以注释掉,看看浏览器在任务管理器中,点击按钮然后刷新后的内存变化
            gc.appendChild(el);
        }
    }


2.3 释放dom元素占用的内存
说明:
将dom元素的innerHTML设置为空字符串,可以释放其子元素占用的内存。
在rich应用中,用户也许会在一个页面上停留很长时间,可以使用该方法释放积累得越来越多的dom元素使用的内存。

2.4 释放javascript对象
说明:在rich应用中,随着实例化对象数量的增加,内存消耗会越来越大。所以应当及时释放对对象的引用,让GC能够回收这些内存控件。
对象:obj = null
对象属性:delete obj.myproperty
数组item:使用数组的splice方法释放数组中不用的item

2.5 避免string的隐式装箱
说明:对string的方法调用,比如'xxx'.length,浏览器会进行一个隐式的装箱操作,将字符串先转换成一个String对象。推荐对声明有可能使用String实例方法的字符串时,采用如下写法:
var myString = new String('Hello World');

posted @ 2012-07-25 06:44 zx_bing| 编辑 收藏

彻底删除SQL Server注册表信息

1.彻底删除SQL Server:
hkey_local_machine\software\Microsoft\MSSQLServer
hkey_local_machine\software\Microsoft\Microsoft SQL Server
hkey_current_user\software\Microsoft\Microsoft SQL Server
hkey_current_user\software\Microsoft\MSSQLServer
hkey_local_machine\system\currentcontrolset\control\sessionmanager\pendingfileren      
ameoperations


 


2。注册表中的相关信息删除:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC。

3。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目
4。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\setup
删除ExceptionComponents



3、运行注册表,删除如下项:
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL
Server
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer

posted @ 2012-07-25 06:40 zx_bing| 编辑 收藏

AndroMDA开发环境搭建

翻译者:Jason S.H.Chen
(英文地址:http://www.andromda.org/index.php?option=com_content&view=article&id=105:environment-setup&catid=42:getting-started-java&Itemid=89

环境设置
本节将一步步的指导你完成AndroMDA开发环境的设置。我们假定你工作在Windows操作系统上。
通过此节,你将安装多种程序。每种程序的推荐安装路径以及所需要的其他目录已列在下面。你可以根据你的系统配置和个人喜好自由的修改这些目录。比如,你可以选择将程序安装在D盘而不是C盘。无论如何,请注意一件事情,有些程序会因为你所设置的路径名中包含空格而不能正常工作。所以,在安装配置程序过程中尽可能复制粘贴下面推荐的路径。
推荐安装路径 用途
C:\Documents and Settings\你的用户名\.m2\repository Maven本地库
C:\Program Files\Apache Software Foundation\maven-2.0.8 Maven安装路径
C:\Program Files\Java\jdk1.6.0_xx JDK
C:\Program Files\Java\jre1.6.0_xx JRE,Java 运行引擎
C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库服务器
C:\eclipse Eclipse集成开发环境(可选)
C:\jboss-4.0.5 JBoss应用服务器
你还需要设置一些相关的环境变量。在控制面板中可完成环境的设置(控制面板>系统>高级>环境变量)。注意:任何程序的安装目录被修改后,你必须确保将与之相关的环境变量的取值修改与之一致。
准备开发环境
请按照下面的步骤开始准备AndroMDA的开发环境。
安装Java
请从这里下载JDK6安装程序并执行安装。此版本是AndroMDA推荐的JDK安装版本。AndroMDA也支持JDK1.5.我们不再支持JDK1.4.
确保JAVA_HOME环境变量指向的目录是JDK的安装目录。也许你已经设置了这个环境变量,但最好还是检查一下:
1. 进入【控制面板】,双击【系统】。
2. 选择【高级】选项卡,点击【环境变量】。
3. 查看JAVA_HOME的值是否指向你的JDK安装目录。如果不是请编辑JAVA_HOME变量的值,让他指向JDK的安装目录(比如:C:\Program Files\Java\jdk1.6.0_06)。
安装Maven
Maven是AndroMDA的首选应用系统构建部署工具。基于项目对象模型(POM)的概念,Maven可以管理一个项目的构建,报告和文档等。如果你熟悉Ant的话,Maven与之有不少相同之处,但Maven提供了更多的功能:
1. 可继承的构建环境配置,在POM文件(pom.xml)中配置的参数可以传递给所有子项目的POM文件。
2. 标准化的构建任务(清除,构建,安装,部署等)。
3. 能表达构建和部署任务所依赖的库,不管是内部依赖库还是外部依赖库,都必须指明所依赖的具体版本号。
4. 提供一个包含所有项目所依赖的版本的库文件的仓库。在系统的构建和部署过程中会用到仓库(有点类似于.net的全局汇编缓存的概念)。
按照下面的步骤安装Maven2.0.8.
1. 点击这里下载Maven2.0.8.
2. 将文件解压到C:\Program Files\Apache Software Foundation这个目录,一个名为maven-2.0.8的目录将被创建,此目录下面就是Maven2.0.8的程序。
注意:如果你使用代理服务器上网的话,你必须配置Maven使用代理。详细的配置你可以在这里找到。
安装JBoss应用服务器
JBoss应用服务器是一款应用很广泛的开源应用服务器。按照下面的步骤安装JBoss4.0.5.
1. 点击这里转到JBoss的下载页面。
2. 在下载列表上选择JBoss Application Server version 4.0.5的下载按钮,系统将把你带到SourceForge的下载页面。
3. 点击名为“jboss-4.0.5GA.zip”的下载链接,进行下载。
4. 下载完毕,将下载的文件解压到C盘,一个名为jboss-4.0.4GA的目录将被创建。此目录下包含JBoss应用服务器的程序文件。
5. 如果你打算在你的机器上也安装Oracle数据库的话,你必须将JBoss的 http端口8080修改成其他端口。Oracle也默认使用此端口,而且Oracle的配置不容易修改。如果你要修改JBoss的http端口的话,请打开C:\jboss-4.0.5\server\default\deploy\jbossweb-tomcat55.sar这个目录下的名为server.xml的文件,将文件中所有8080数字修改为其他的值,比如9090.这样即可解决Oracle和JBoss之间的冲突。如果你将8080端口修改成了9090,那么手册中所有使用到8080端口的地方,对于你来说都是9090端口。
设置环境变量
前面我们已经通过设置环境变量JAVA_HOME讲解了怎样设置环境变量。强烈推荐先设置完下面列出的环境变量后在继续后面的学习。为了保持文章的完整性,我们将环境变量JAVA_HOME也列在了下面。
环境变量名 环境变量值 是否必须
JAVA_HOME JAVA安装目录,比如C:\Program Files\Java\jdk1.6.0_06 必须
JBOSS_HOME JBoss安装目录,比如C:\jboss-4.0.5 必须
M2_HOME Maven安装目录,比如C:\Program Files\Apache Software Foundation\maven-2.0.8 必须
M2_REPO Maven本地库 必须
MAVEN_OPTS 运行Maven的JVM参数(推荐:-XX:MaxPermSize=128m -Xmx512m,构建大型项目最好设置) 可选
PATH 将%JAVA_HOME%\bin;%M2_HOME%\bin添加到PATH值中 必须

测试Maven并创建本地Maven库
Maven is based on the concept of a central(这句不知道怎样翻译合理), local repository located on your machine, where it stores artifacts such as 3rd party libraries as well as components created by you.本地Maven库存在你的电脑上,在库中存储着很多项目需要使用的第三方库和你自己创建的库。当你创建一个新项目时,你必须创建一个名为pom.xml用于描述项目对象信息的文件。在这个文件中,你告诉maven你的应用会依赖哪些第三方库以及他们的具体版本。当Maven开始构建应用的时候,他会首先从远程库(通过网络)中获取项目所依赖的这些库,并把从远程库获取的库复制到本地库。因为这样你以后就可以完全通过本地库完成构建应用。默认情况下,你的本地库在“C:\Documents and Settings\{你的用户名}\.m2\repository”这个目录下(其中,你的用户名是只你登录系统的用户名)。到目前为止,我们只安装了Maven程序,还没有创建本地库。按照下面的步骤测试你是否已经正确安装了Maven和创建你的本地库。我们将使用Maven的标准插件创建一个临时项目进行测试,测试完可以删除临时项目。
1. 开启命名提示窗口,将当前路径切换到任何一个临时文件目录下,比如c:\temp
2. 执行下面的命令检查你是否正确安装配置了Mavne:
Mvn --version
3. 窗口中出现如下信息,则标示你安装配置正确。
Maven version:2.0.2
4. 执行下面的命令创建一个临时项目:
mvn archetype:create -DgroupId=testapp -DartifactId=testapp
必须确保在此命令执行完毕,你得到的反馈信息是“Build Successful”.有时候会因为网络问题导致maven不能下载所有所依赖的库文件而失败。如果你也是遇到这个问题的话,你不妨多执行几次上面的命令,直到成功执行此命令为止。
5. 到当前目录中去核实一下,看是否有个名为testapp的临时项目被创建,同时到上面提到的仓库路径目录去核实一下本地仓库是否被创建了。如果这两项工作都成功地完成,那么你可以删除刚才测试时所产生的临时项目了。
安装AndroMDA插件
下面我们将下载并安装AndroMDA的maven插件到你的本地maven库。此插件是Java调用AndroMDA的入口程序。这事唯一一个需要安装的AndroMDA文件。其他的文件(比如代码生成器)将根据构建工作的需要自动下载。按照下面的步骤进行安装:
1. 点击这里下载AndroMDA插件安装程序。
2. 在安装文件在你的本地maven库的目录下(C:\Documents and Settings\{你的用户名}\.m2\repository)进行解压缩。
3. 请确认下面的目录是否存在,存在则继续
C:\Documents and Settings\你的用户名 \.m2\repository\org\andromda\maven\plugins\andromdapp-maven-plugin
4. 创建一个临时文件夹,比如:c:\andromda-temp
5. 在临时文件夹中创建一个pom.xml文件,并将下面的内容拷贝到pom.xml文件中并保存。
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>samples.test</groupId>
    <artifactId>test</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <name>test</name>

    <build>
        <defaultGoal>compile</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.andromda.maven.plugins</groupId>
                <artifactId>andromdapp-maven-plugin</artifactId>
                <version>3.3</version>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>andromda</id>
            <name>AndroMDA Repository</name>
            <url>http://team.andromda.org/maven2</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>andromda</id>
            <name>AndroMDA Repository</name>
            <url>http://team.andromda.org/maven2</url>
        </pluginRepository>
    </pluginRepositories>
</project>
6. 打开dos窗口,并将当强目录切换为刚才创建的pom.xml文件所在的目录,输入 mvn (不需要带参数)回车。确保命令执行完后,屏幕上显示的信息是“BUILD SUCCESSFUL”(有时候会因为网络的原因不能下载完毕所有需要的库文件,故不能执行成功,如果遇到这种问题,请多执行几次这个命令,直到成功执行为止)。
7. 可以将刚才创建的临时目录删除了。
安装一款UML工具
安装一款UML建模工具,你能使用他进行应用系统的建模,并能将创建的模型导成AndroMDA能识别的格式的文档。AndroMDA目前支持UML1.4/XMI1.2和UML2/EMF几种格式的文档。下面列出了推荐使用的UML建模工具大安装配置链接,你可以根据自己选择的UML工具参考对应的安装配置链接。如果你已经安装了下面推荐的某款UML工具,你也最好看看其相应的配置页面。
ArgoUML(支持UML1.4/XMI1.2)
MagicDraw9.x(支持UML1.4/XMI1.2)
MagicDraw15.5(支持UML2/EMF)
RSM6(Rational Software Modeler/Architect 支持UML2/EMF)
安装数据库服务器
安装任一款Hibernate支持的数据库。点击这里查看Hibernate所支持的所有数据库的列表。此手册中我们使用MySQL5.0(一款应用非常广泛的开源数据库)。如果你安装是Hibernate支持的其他的数据库,请对JBoss和Hibernate的配置做相应的调整。按照下面的步骤安装配置MySQL.
1. 点击这里到MySQL的下载页面。
2. 下载Windows版的安装程序(确切的说是“Windows(X86)”,不是“Essentials”)。将MySQL安装在C:\Program Files\MySQL\MySQL Server 5.0目录下。请记住所使用的端口(port),用户账号和密码。每次你通过控制台连接数据库都需要用到,在应用程序中数据库连接配置中也要用到。
3. 下载安装MySQL GUI Tool Bundle(MySQL数据库图形化的管理查询工具)。
4. 下载MySQL Connector/J version 5.0.4,MySQL的JDBC驱动程序。解压到C:\Program Files\MySQL目录。
5. 将MySQL的JDBC驱动程序C:\Program Files\MySQL\mysql-connector-java-5.0.4\mysql-connector-java-5.0.4-bin.jar拷贝到JBoss的C:\jboss-4.0.5\server\default\lib目录。请将mysql-connector-java-5.0.4-bin.jar的文件名改为mysql-connector-java-5.0.4.jar,这样更符合maven的规范。有了JDBC驱动程序,JBoss就可以访问你的数据库了。
安装Eclipse(可选)
Eclipse是一款非常流程的开源的JAVA应用集成开发环境(IDE).AndroMDA并不需要他,但是我们推荐你使用他以提高你的开发效率。Eclipse用户应该非常高兴,因为AndroMDA可以为你们生成项目的.project和.classpath文件。你们只需要简单地将项目导入Eclipse即可进行代码的编写了。
你可从这里下载Eclipse.我们推荐下载Eclipse IDE for Java EE Developers这个版本。按照下面的步骤安装配置Eclipse.
1. 将下载的文件解压到你的硬盘上,推荐C:\eclipse
2. 编辑C:\eclipse目录下的eclipse.ini文件以增加分配给Eclipse的内存。下面是推荐你向文件中添加的内容:
-vmargs
-Xms256m
-Xmx512m
-XX:PermSize=64m
-XX:MaxPermSize=128m
3. 双击Eclipse.exe开启Eclipse.
4. Eclipse会要求你设置一个存放项目的文件夹。这个文件夹被成为Eclipse的工作区。将这个目录设置为你通常用来保存创建项目的目录,比如c:\projects目录。
5. 从【Window】菜单中选择【参数设置】(Preferences)菜单项。
6. 在出现的面板的左边依次选择Java>Build Path>Classpath Variables.
7. 点【新建】(New)。
8. 将“M2_REPO”填写在名称文本框(Name),将你本机的maven库的路径(C:\Documents and Settings\{你的用户名}\.m2\repository,前面所设置的)填写在路径文本框(Path)。当导入AndroMDA产生的项目时,项目会根据此变量查找所引用的Maven库中的库文件。
9. 点击2次【确定】(ok)关闭所有对话框。
好的,现在我们已经将AndroMDA开发环境搭建好,我们已经准备好拿日志跟踪系统来试验AndroMDA了。下节我们将在讲解具体怎样开发日志跟踪系统之前先带大家体验一下我们已经开发完毕的系统,让你在学习过程中也好做到心中有数。

posted @ 2012-07-25 06:38 zx_bing| 编辑 收藏

widow orcal 卸载

oracle在默认安装下会安装5个计算机服务(右键我的电脑-管理-计算机管理-服务与应用程序-服务)或者(控制面板-管理工具-服务),同时,五个服务分别为
Oracle代码 复制代码 收藏代码
  1. OracleDBConsoleorcl 
  2. OracleJobSchedulerORCL 
  3. OracleOraDb10g_home1iSQL*Plus 
  4. OracleOraDb10g_home1TNSListener 
  5. OracleServiceORCL 
  6. (默认数据库为orcl) 
  7. 另外还有注册表项 
  8. Oracle.orcl 
  9. Oracle in OraDb10g_home1 
  10. 此外 
  11. OracleOraDb10g_home1根据不同电脑配置会有所不同,也可能是 
  12. OracleOraDb10g_home2 
  13. OracleOraDb10g_home3 



在程序没有完全损坏的情况下,尤其是卸载程序尚可使用,建议先卸载程序,再清空注册表。如果程序已经已经损坏,只能从清理注册表开始了。
清理注册表之后,删除oracle安装目录下所有文件(有需要备份酌情考虑吧)

使用命令进入注册表:
Cmd代码 复制代码 收藏代码
  1. regedit 

清理一下节点
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\SYSMAN 有1项 (OracleDBConsoleorcl) 
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application  
  3. 3项 (其中有Oracle.orcl) 
  4. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services  有5项 
  5. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application   
  6. 3项 (其中有Oracle.orcl) 
  7. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services  有5项 
  8. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application  
  9. 3项 (其中有Oracle.orcl) 
  10. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services 有5项 


如果是正常卸载的话,可能有些节点会减少,不过按理说清空这些就差不多了。然后删除oracle目录下所有文件,重启电脑,会发现五个服务都已经没有了,这时候就可以重新安装一个新的oracle了。
当然,有可能会提示安装目录被使用,这时候进入注册表搜索那些节点占用了安装目录,删除掉,重启后继续安装就行了。

下面提供以下需要清理的注册表项的位置

OracleDBConsoleorcl
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\SYSMAN 
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\OracleDBConsoleorcl 
  3. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleDBConsoleorcl 
  4. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application\OracleDBConsoleorcl 
  5. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleDBConsoleorcl 
  6. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\OracleDBConsoleorcl 
  7. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleDBConsoleorcl 


OracleJobSchedulerORCL
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleJobSchedulerORCL 
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleJobSchedulerORCL 
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleJobSchedulerORCL 


OracleOraDb10g_home2iSQL*Plus
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\OracleOraDb10g_home2iSQL*Plus 
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleOraDb10g_home2iSQL*Plus 
  3. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application\OracleOraDb10g_home2iSQL*Plus 
  4. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleOraDb10g_home2iSQL*Plus 
  5. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\OracleOraDb10g_home2iSQL*Plus 
  6. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleOraDb10g_home2iSQL*Plus 


OracleOraDb10g_home2TNSListener
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleOraDb10g_home2TNSListener 
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleOraDb10g_home2TNSListener 
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleOraDb10g_home2TNSListener 


OracleServiceORCL
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleServiceORCL 
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleServiceORCL 
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleServiceORCL 


Oracle.orcl
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application  
  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application 
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application 


Oracle in OraDb10g_home
Regedit代码 复制代码 收藏代码
  1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI 
  2. 可能有home1 home2等等 

呵呵 ,还会为oracle不能干净卸载、重新安装发愁么,有兴趣的来试一下吧……
此外,听说360也能清理注册表,不知道是不是真的,我还没用过那个清理,期待有人出来说说啊……



1、停止所有Oracle服务

2、删除注册表中的所有关于Oracle项

(1)在HKEY_LOCAL_MACHINE\SOFTWARE下,删除Oracle目录

(2)在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services下,删除所有Oracle项

(3)在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services下,删除所有Oracle项

(4)在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,删除所有Oracle项

(5)在HKEY_CLASSES_ROOT下,删除所有Oracle项

3、删除硬盘上所有Oracle文件

(1)Oracle安装文件

(2)系统目录下,在Program files文件夹中的Oracle文件

4、有些文件删不去,重启后再删,完成卸载。


posted @ 2012-07-25 06:34 zx_bing| 编辑 收藏

MySQL删除注册表

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-07-25 06:30 zx_bing 阅读(37) | 评论 (0)编辑 收藏