??xml version="1.0" encoding="utf-8" standalone="yes"?>天堂成人在线,午夜无码国产理论在线,日本国产精品http://www.aygfsteel.com/peacess/zh-cnSat, 17 May 2025 11:17:27 GMTSat, 17 May 2025 11:17:27 GMT60q_目中的qhttp://www.aygfsteel.com/peacess/archive/2013/09/04/403677.html中东中东Wed, 04 Sep 2013 13:25:00 GMThttp://www.aygfsteel.com/peacess/archive/2013/09/04/403677.htmlhttp://www.aygfsteel.com/peacess/comments/403677.htmlhttp://www.aygfsteel.com/peacess/archive/2013/09/04/403677.html#Feedback0http://www.aygfsteel.com/peacess/comments/commentRss/403677.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/403677.htmlH然有一天有一个机会在目中把一些我认ؓ有用的东西抽取出来放到那里,。。。。?br />H然有一天发现原来自己抽取出来的东西从来没有用过。。。。?br />每当遇到问题要解xQ总还是网上到处找Q突然找C个文章写的很好。。。。。。最后发现这个文章是自己写的
多了旉久了Q就会忘记?br />
目开始:
在项目开始初期d目有一大堆的想法,要把q个做成公用Q要把那个独立出来,。。。。是否是要做一个通用的^台出来,以后开发就省事了。。。。。?br />
目q行中:
客户的要求在变化。。。?br />团队在变化。。。?br />代码量也上来了。。。?br />q时目的设计变化在不断的进行着Q经常同样一件事情会反复做多ơ。。。?br />客户的压力、团队h员的情A{也产生了,q时目的时间也不多了。。。。?br />
目目l束中:
客户在一天天的要求进度。。。。?br />团队人员已开始做下一个项目的准备Q在想下一个项目一定做好。。。。?br />客户团队都处在痛苦中。。。。?br />目开始进入大量的加班中。。。。?br />
目l束了?br />
ȝQ?要在目开始的时候设一个宏大的目标Q做那多的抽取吗Q如果不做抽取,目会不会做的质量高一点,加班加的一炏V?br />

。。。。。不理怎么PW一要解决问题,不然其它什么都{于零?br />

中东 2013-09-04 21:25 发表评论
]]>
ant中的文g复制问题http://www.aygfsteel.com/peacess/archive/2007/08/11/136034.html中东中东Sat, 11 Aug 2007 08:02:00 GMThttp://www.aygfsteel.com/peacess/archive/2007/08/11/136034.htmlhttp://www.aygfsteel.com/peacess/comments/136034.htmlhttp://www.aygfsteel.com/peacess/archive/2007/08/11/136034.html#Feedback0http://www.aygfsteel.com/peacess/comments/commentRss/136034.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/136034.html    ant没有M提示Q也没有把文件复制到指定的地方(源文件已l改变)。这L怼使用E序~译或运行生奇怪的错误Q因为它使用了旧的没有更新的文g
解决Ҏ(gu)
    在复制文件之前,先把文g删除Q如果文件不能被删除Qant会有提示Q?/span>
    在jar之前也要做相同的事情



中东 2007-08-11 16:02 发表评论
]]>
gwt目开发的l验?---会一直增?/title><link>http://www.aygfsteel.com/peacess/archive/2007/08/06/84950.html</link><dc:creator>中东</dc:creator><author>中东</author><pubDate>Mon, 06 Aug 2007 14:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/peacess/archive/2007/08/06/84950.html</guid><wfw:comment>http://www.aygfsteel.com/peacess/comments/84950.html</wfw:comment><comments>http://www.aygfsteel.com/peacess/archive/2007/08/06/84950.html#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://www.aygfsteel.com/peacess/comments/commentRss/84950.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/peacess/services/trackbacks/84950.html</trackback:ping><description><![CDATA[     摘要: 13Q用gwt在web中实C下文菜单Q右键菜单、弹单) 2007q???<br>12Qgwt中用float样式实现 完成 2007q??8?<br>11Q?1Q文件下载(downloatQ通过表单方式Q?完成 2007q???<br>10Q阻止事件传到父对象 2007q??1?<br>9Q文件上传客LQ隐藏表单) 2007q??9?<br>8Q不换行Q表格字W、多Uwidget的组?计划?<br>7Qcss的(Ҏ(gu)Qmargin、border、padding、width、height与dom对象的属clientWidth、offsetWidth、offsetHeight{的关系及gwt的获取与讄> 完成 2007q???<br>6Q学习资? 完成 2006q?2?1?<br>5Q给gwt的uilg增加事g 完成 2006q?2?7?<br>4Q按钮的鼠标q出样式 完成 2006q?2?4?<br>3Q元素宽度计? 完成 <br>2Q对话框居中 完成 <br><  <a href='http://www.aygfsteel.com/peacess/archive/2007/08/06/84950.html'>阅读全文</a><img src ="http://www.aygfsteel.com/peacess/aggbug/84950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/peacess/" target="_blank">中东</a> 2007-08-06 22:41 <a href="http://www.aygfsteel.com/peacess/archive/2007/08/06/84950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gwt在eclipse、tomcat中单步调试客户与服务的完整实?--Q升Uؓgwt1.4 q行中)http://www.aygfsteel.com/peacess/archive/2007/07/26/55795.html中东中东Thu, 26 Jul 2007 12:44:00 GMThttp://www.aygfsteel.com/peacess/archive/2007/07/26/55795.htmlhttp://www.aygfsteel.com/peacess/comments/55795.htmlhttp://www.aygfsteel.com/peacess/archive/2007/07/26/55795.html#Feedback2http://www.aygfsteel.com/peacess/comments/commentRss/55795.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/55795.html
完整的源代码Qؓ了方便编译后的文件也保留了)Q?a href="http://www.aygfsteel.com/Files/peacess/Wylpeace-tomcat.rar">Wylpeace-tomcat

环境的徏?br>1Q下载eclipse3.3 :http://download.eclipse.org/eclipse/downloads/index.php
2Q下载tomcat6.0 : http://tomcat.apache.org/download-60.cgi
3Q下载Tomcat PluginQ?a >http://www.sysdeo.com/eclipse/tomcatplugin
4Q安装(怎么安装p己去google吧)

正式开?br>Z个用eclipse开发的gwt目Q如果不惛_立,可以下蝲源代码)
    gwt的命令行方式:http://code.google.com/webtoolkit/gettingstarted.html
   
在eclipse中配|tomcat的运行环?br>   
    首先把插仉|好
    window--》preference--》tomcatQ配|?#8220;tomcat home”?#8220;tomcat vesion” --》advanced Q配|?#8220;tomcat base”Q与“tomcat home”相同Q?--》jvm setting Q?选择“jre”Q注意一定是jdk下的jreQ不然不能调试服务端代码
   
    然后呢(配置的内Ҏ(gu)较多Q没有办法)
    1Q在目下徏Q如下目录wylpeace.samples.select.WylpeaceSelect/WEB-INF/classes、wylpeace.samples.select.WylpeaceSelect/WEB-INF/lib
    2Q在“WEB-INF”下加入文?#8220;web.xml”内容如源代码
    3Q把文ggwt-user.jar、gwt-dev-windows.jar、gwt-ll.dll、swt-win32-3235.dll、ojdbc14.jar攑օlib目录?br>    4Q增加库引用“gwt-user.jar、gwt-dev-windows.jar、ojdbc14.jar ”
    5Q修改class文g的输\径,如下?br>

配置gwt的hosted
   
    1Q右键项?#8220;Wylpeace”--》debug as--》debug如下图所C?br>

    注意图中的选中部分“-noserver -port 8080”(用这U方式可以改变gwt的默认端?888)Q?br>    q是在这个图?#8220;classpath”标签q行修改,参见Q?a href="http://www.aygfsteel.com/peacess/archive/2007/07/24/49447.html">http://www.aygfsteel.com/peacess/archive/2007/07/24/49447.html

配置tomcat插g


所有配|都完成了,我们可以开始单步调试了
首先重vtomcatQ在eclipse中)Q在调试q行“wylpeace”
q时会提C找不到|页Q修改url为:http://localhost:8080/wylpeace.samples.select.WylpeaceSelect/WylpeaceSelect.html
好了整个q程l束Q如果有什么问题请联系
    mailQpeacess@163.com
    qqQ?4407724
你也可以参考:http://jroller.com/page/masini?entry=deploy_and_debug_google_web
你也可以参考:http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/338c4b765d7dfc39/c9382d0e65266248?q=tomcat&rnum=3#c9382d0e65266248


中东 2007-07-26 20:44 发表评论
]]>
gwt 1.4学习--数据库记录显C实玎ͼ?1Q?把源来的内容升为gwt1.4)http://www.aygfsteel.com/peacess/archive/2007/07/24/49447.html中东中东Tue, 24 Jul 2007 14:42:00 GMThttp://www.aygfsteel.com/peacess/archive/2007/07/24/49447.htmlhttp://www.aygfsteel.com/peacess/comments/49447.htmlhttp://www.aygfsteel.com/peacess/archive/2007/07/24/49447.html#Feedback5http://www.aygfsteel.com/peacess/comments/commentRss/49447.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/49447.html实现的功?br>   在gwt开发中实现Q与数据库(oracleQ的q接(jdbc)Qƈ昄数据记录集,说白了就是在ajax的gwt架构下与数据库交互?br>相关工具
gwt1.4Qeclipse3.3
首先说明一下要原理
分ؓ两部分:客户端部分与服务端部?br>如果对gwt的远E调用不怎么清楚Q请参见Q?a >http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html

客户端部?/strong>
   ׃客户端只支持jdk1.4的包util与langQ没有jdbcQ,所以只能自己写一个类存放记录集,如下
public class PeaceResultSet {
    private String[] cols;
    /**
     * @gwt.typeArgs <java.lang.String[]>
     */
    private List rows;
    public String[] getCols() {
        return cols;
    }
    public void setCols(String[] cols) {
        this.cols = cols;
    }
    public List getRows() {
        return rows;
    }
    public void setRows(List rows) {
        this.rows = rows;
    }
}
    Ҏ(gu)cM一个简单的说明。cols是存攑ֈ名的Qrows是存放记录行的,h意在它前面的那一个注释(/**
     * @gwt.typeArgs <java.lang.String[]>
     */Q,一定不能少的,因ؓQ最l这个java代码会被转换成javascriptQ这里告诉{换的cd?br>有了记录集,我们可以用FlexTable来把我们的记录集昄出来?如下
public class PeaceTable extends Composite{

    private FlexTable table = new FlexTable();
    public FlexTable getTable() {
        return table;
    }
    public PeaceTable() {
        this.initWidget(table);
    }
    public void showResultSet(PeaceResultSet re)
    {
        this.table.clear();
        if(re != null && re.getRows()!= null && re.getRows().size()>0)
        {
            String[] cols = re.getCols();
            List rows = re.getRows();

            for(int j = cols.length-1; j >= 0; j--)
            {
                table.setText(0,j,cols[j]);
            }

            for(int i = 0; i < rows.size(); i++)
            {
                cols = (String[])rows.get(i);
                for(int j = cols.length-1; j >= 0; j--)
                {
                    table.setText(i+1,j,cols[j]);
                }
            }
        }
        else
        {
            table.setText(0,0,"no data");
        }
    }
    public void callServer(String sql) {
        PeaceSelectResultSetAsync.Util.getInstance().select(sql, new AsyncCallback() {
            public void onFailure(Throwable caught) {
            }
            public void onSuccess(Object result) {
                showResultSet((PeaceResultSet) result);
            }
          });
    }
服务端部?/strong>
q一部分是完全的javaQ可以用java可以使用的全部库Q当然自己写的也可以Q?br>我这里用的是jdbc来连接数据库Q只是最单的Q因里不是说明数据怎么操作的)Q代码如?br>public class PeaceSelectResultSetImpl extends RemoteServiceServlet implements
        PeaceSelectResultSet {

    private static final long serialVersionUID = 1L;

    public PeaceResultSet select(String sql) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet se = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
            String url = "jdbc:oracle:thin:@192.168.1.11:1521:XXXX"; // orclK�ݿK�SID
            String user = "uuser";
            String password = "pwd";
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            se = stmt.executeQuery(sql);
            ResultSetMetaData rsmd = se.getMetaData();

            String[] cols = new String[rsmd.getColumnCount()];
            List rows = new ArrayList();
            for (int i = cols.length; i > 0; i--) {
                cols[i - 1] = rsmd.getColumnName(i);
            }
            while (se.next()) {
                String[] row = new String[cols.length];
                rows.add(row);
                for (int i = cols.length - 1; i >= 0; i--) {
                    row[i] = se.getString(cols[i]);
                }
            }
            PeaceResultSet kfse = new PeaceResultSet();
            kfse.setCols(cols);
            kfse.setRows(rows);
            return kfse;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (se != null)
                try {
                    se.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            if (stmt != null)
                try {
                    stmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            if (conn != null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }
        return null;
    }
}
在下一部分中,我将说明一些注意事,以及l出完整的源代码Q!


中东 2007-07-24 22:42 发表评论
]]>
gwt 1.4 学习--数据库记录显C实玎ͼ?2Q?把源来的内容升为gwt1.4)http://www.aygfsteel.com/peacess/archive/2007/07/24/49600.html中东中东Tue, 24 Jul 2007 14:42:00 GMThttp://www.aygfsteel.com/peacess/archive/2007/07/24/49600.htmlhttp://www.aygfsteel.com/peacess/comments/49600.htmlhttp://www.aygfsteel.com/peacess/archive/2007/07/24/49600.html#Feedback1http://www.aygfsteel.com/peacess/comments/commentRss/49600.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/49600.html注意事项Q?br>    在客L部分Q只能用jdk的一部分
    把服务端的程序写完后Q记得在文g“WylpeaceSelect.gwt.xml”中进行配|,如下代码
       <module>
          。。。。。。?br>          <servlet path='/peaceselect' class='wylpeace.samples.select.service.PeaceSelectResultSetImpl'/>
          。。。。。。。?br>       </module>
    在eclipse中调试时Q会提示找不数据库相的类Q要C做如下操?br>       。。?#8220;debug”----》选中“WylpeaceSelect”----》选中“classpath”Q单d下的“restore default entries”Q再单击“addvaced”增加源代码目?br>如图Q?img src="file:///C:/DOCUME%7E1/wpeace/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="">


完整个代码(eclipseQ:WylpeaceSelect
注意Q?br>     下蝲代码后修改WylpeaceSelect.launch中的gwt包的路径
      注意加入你的数据库包Qoracle的jdbcQ?br>

中东 2007-07-24 22:42 发表评论
]]>
hibernate 多对多关pdmysql、oracle中的不同http://www.aygfsteel.com/peacess/archive/2007/06/11/123485.html中东中东Mon, 11 Jun 2007 15:19:00 GMThttp://www.aygfsteel.com/peacess/archive/2007/06/11/123485.htmlhttp://www.aygfsteel.com/peacess/comments/123485.htmlhttp://www.aygfsteel.com/peacess/archive/2007/06/11/123485.html#Feedback1http://www.aygfsteel.com/peacess/comments/commentRss/123485.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/123485.html下面是表的代码(配置为annotationQ?br>UserQ?br>

package sub;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
@Entity
public class User implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Long id;
    private Set<Role> roles;
    @Id
    @GeneratedValue
    public Long getId()
    {
        return id;
    }
    public void setId(Long id)
    {
        this.id = id;
    }
    @ManyToMany
    @JoinTable(name="UserRole",joinColumns={@JoinColumn(name="user_ID")},inverseJoinColumns={@JoinColumn(name="role_ID")})
    public Set<Role> getRoles()
    {
        return roles;
    }
    public void setRoles(Set<Role> roles)
    {
        this.roles = roles;
    }
}

RoleQ?br>

package sub;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
@Entity
public class Role implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Long id;
    private Set<User> users;
    @Id
    @GeneratedValue
    public Long getId()
    {
        return id;
    }
    public void setId(Long id)
    {
        this.id = id;
    }
    @ManyToMany
    @JoinTable(name="UserRole",joinColumns={@JoinColumn(name="role_ID")},inverseJoinColumns={@JoinColumn(name="user_ID")})
    public Set<User> getUsers()
    {
        return users;
    }
    public void setUsers(Set<User> users)
    {
        this.users = users;
    }
}

UserRoleIdQ?br>

package sub;
import java.io.Serializable;
import javax.persistence.Embeddable;
@Embeddable
public class UserRoleId implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Long userId;
    private Long roleId;
    public UserRoleId(Long userId, Long roleId)
    {
        this.userId = userId;
        this.roleId = roleId;
    }
    public UserRoleId()
    {
        this(null,null);
    }
    @Override
    public boolean equals(Object obj)
    {
        if(obj == this)return true;
        if(obj instanceof UserRoleId)
        {
            final UserRoleId other = (UserRoleId) obj;
            Long userT = getUserId();
            Long userOther = other.getUserId();
            Long roleT = getRoleId();
            Long roleOther = other.getRoleId();

            return ((userT == userOther) || (userT != null &&
                    userOther != null && userT.equals(userOther))) &&
                    ((roleT == roleOther) || (roleT != null &&
                            roleOther != null && roleT.equals(
                                    roleOther)));
        }
        return false;
    }
    @Override
    public int hashCode()
    {
        int re = 17;
        re += (userId == null?0:userId.hashCode());
        re += (roleId == null?0:roleId.hashCode());
        return 37*re;
    }
    public Long getUserId()
    {
        return userId;
    }
    public void setUserId(Long userId)
    {
        this.userId = userId;
    }
    public Long getRoleId()
    {
        return roleId;
    }
    public void setRoleId(Long roleId)
    {
        this.roleId = roleId;
    }
}

UserRoleQ?br>

package sub;
import java.io.Serializable;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class UserRole implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private UserRoleId id;
    private Role role;
    private User user;
    @EmbeddedId
    @AttributeOverrides( {
            @AttributeOverride(name = "userId", column = @Column(name = "user_ID", unique = false, nullable = false, insertable = true, updatable = true)),
            @AttributeOverride(name = "roleId", column = @Column(name = "role_ID", unique = false, nullable = false, insertable = true, updatable = true)) })
    public UserRoleId getId()
    {
        return id;
    }
    @ManyToOne(cascade = {})
    @JoinColumn(name = "role_ID", unique = false, nullable = false, insertable = false, updatable = false)
    public Role getRole()
    {
        return role;
    }
    @ManyToOne(cascade = {}, fetch = FetchType.EAGER)
    @JoinColumn(name = "user_ID", unique = false, nullable = false, insertable = false, updatable = false)
    public User getUser()
    {
        return user;
    }
    public void setId(UserRoleId id)
    {
        this.id = id;
    }
    public void setRole(Role role)
    {
        this.role = role;
    }
    public void setUser(User user)
    {
        this.user = user;
    }
}

    在mysql数据库中Q保存UserRole时出错。而完全相同的代码在oracle数据中正?br>操作如下Q?br>
        User user;
        Role role;
        //l过多步操作以后Quser与role都保存到数据库,与之相关联的session已关?br>        Session s = null;//取得s的代码没有写出来
        s.beginTransaction();
        UserRole userRole = new UserRole();
        userRole.setId(new UserRoleId(user.getId(),role.getId()));
        userRole.setUser(user);
        userRole.setRole(role);
        s.persist(userRole);
        s.getTransaction().commit();
//一提交出错,提示user没有保存Q但是奇怪的是ؓ什么在oracle中完全正?br>//最后在mysql中作如下的修改可以正保?br>//?nbsp;userRole.setUser(user)与userRole.setRole(role)删除
有那位知道是什么问题,请告?


中东 2007-06-11 23:19 发表评论
]]>
失去了什?---提高目q度http://www.aygfsteel.com/peacess/archive/2006/11/20/82387.html中东中东Mon, 20 Nov 2006 14:03:00 GMThttp://www.aygfsteel.com/peacess/archive/2006/11/20/82387.htmlhttp://www.aygfsteel.com/peacess/comments/82387.htmlhttp://www.aygfsteel.com/peacess/archive/2006/11/20/82387.html#Feedback1http://www.aygfsteel.com/peacess/comments/commentRss/82387.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/82387.html当项目进度被一再加快时Q到最后项目还是做出来了,到底从中失去了什么?Q?br />
做开发的失去了什么?做管理的失去了什么?做客L失去了什么?产品呢,它又失去什么?

可能都失MQ因为后l的工作量比开发的q要大的多,如果目l理不下大力气加班的话,整个目可能

都没有办法维护?br />
可能都没有失去,因ؓ没有完全相同的两个项目来q行比较Q谁也没有办法量化,到底失去了什么?



到底失去了什么?到底失去了什么?Q?br />

中东 2006-11-20 22:03 发表评论
]]>
清空数据库数据(表)的一个解x?/title><link>http://www.aygfsteel.com/peacess/archive/2006/11/09/80208.html</link><dc:creator>中东</dc:creator><author>中东</author><pubDate>Thu, 09 Nov 2006 09:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/peacess/archive/2006/11/09/80208.html</guid><wfw:comment>http://www.aygfsteel.com/peacess/comments/80208.html</wfw:comment><comments>http://www.aygfsteel.com/peacess/archive/2006/11/09/80208.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.aygfsteel.com/peacess/comments/commentRss/80208.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/peacess/services/trackbacks/80208.html</trackback:ping><description><![CDATA[ <br />     在做数据库开发中Q经帔R要清I(deleteQ数据或删除QdropQ所有的表。然而,外键的存在,l这个工作带来了很大的不ѝ这里用jdbc写一个通用的类Q生出清空或删除表的顺序?br />以下代码在mysql与oracle下面q行正常<br /><br />(在同行的下作了一些改q,又增加了一些功能,见类注释)<br />代码Q?br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">package createData.tryDemo;<br /><br />import java.sql.Connection;<br />import java.sql.DatabaseMetaData;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Statement;<br />import java.util.ArrayList;<br />import java.util.Iterator;<br />import java.util.List;<br /><br />/**<br /> * 外键工具<br /> * 1Q返回清I(删除Q数据库表的先后序<br /> * 2Q找出数据库中的外键?br /> * 3Q找出数据库中的对同一个表的重复外键关?br /> * <br /> * 注:外键环(不知道在数据库中Q对此情冉|没有别的命名Q?br /> *  情况1Q外键表是自?Q自外键环、小外键环、单外键环)<br /> *  情况2QaTable的外键表是bTableQ而bTable的外键表又是aTableQ双外键环)<br /> *  情况3Q就是多个表之间形成的外键环Q多外键环)<br /> * @author wpeace<br /> *<br /> */<br />public class ExportedKeysTools<br />{<br />    public static void main(String[] args)<br />    {<br />        //得到一个数据库的连接,q里׃l说?br />        Connection connection = null;<br />        <br />        List<String> tables = ExportedKeysTools.getDeleteOrder(connection);<br />        <br />        System.out.print(tables);<br />        //清空数据,以oracleZ<br />        StringBuilder scrip = new StringBuilder();<br />        for(String it : tables)<br />        {<br />            scrip.append(String.format("delete from %s;\r\n", it));<br />        }<br />        System.out.print(scrip);<br />        //删除所有表,以oracleZ<br />        <br />        for(String it : tables)<br />        {<br />            scrip.append(String.format("drop table %s;\r\n", it));<br />        }<br />        System.out.print(scrip);<br />        <br />        //提示关闭q接Q!Q?br /><br />    }<br />    public static List<String> getDeleteOrder(Connection connection)<br />    {<br />        String userName = null;<br />        try<br />        {<br />            userName = connection.getMetaData().getUserName();<br />        }<br />        catch (SQLException e)<br />        {<br />            e.printStackTrace();<br />        }<br />        return ExportedKeysTools.getDeleteOrder(connection, userName);<br />    }<br />    /**<br />     * q回清空Q删除)数据库表的先后顺?br />     * @param connection jdbcq接<br />     * @param userName 如果为null的话Q在oracle数据库下面是所有的用户的所有表?br />     * 在mysql下是当前用用LQ这个与数据库厂商的jdbc驱动有关p?br />     * @return q回清空Q删除)数据库表的先后顺?br />     */<br />    public static List<String> getDeleteOrder(Connection connection,String userName)<br />    {<br />        ResultSet reTables = null;<br />        ResultSet refk = null;<br />        try<br />        {<br />            DatabaseMetaData dm = connection.getMetaData();<br />            //如果是oracle数据库的话,清空闪回?br />            if(dm.getDatabaseProductName().toUpperCase().indexOf("ORACLE")>=0)<br />            {<br />                Statement state = connection.createStatement();<br />                state.execute("PURGE RECYCLEBIN");<br />                state.close();<br />            }<br />            //取得?br />            reTables = dm.getTables(null, userName, null, new String[]{"TABLE","VIEW"});<br />            List<TableMeta> tableMetaList = new ArrayList<TableMeta>();<br />            while(reTables.next())<br />            {<br />                String tableName = reTables.getString("TABLE_NAME").trim(); <br />                if(tableName == null || tableName.length()<1)<br />                {<br />                    continue;<br />                }<br />                TableMeta tem = new TableMeta(tableName);<br />                tableMetaList.add(tem);<br />                //取得外键?br />                refk = dm.getExportedKeys(null, userName, tableName);<br />                while(refk.next())<br />                {<br />                    String fkTableName = refk.getString("FKTABLE_NAME").trim();<br />                    if(fkTableName == null || fkTableName.length() < 1 ||<br />                            fkTableName.equals(tableName)) //Ld键是自己的小?br />                    {<br />                        continue;<br />                    }<br />                    tem.addFK(fkTableName);<br />                }<br />                if(refk != null)refk.close();<br />            }<br />            <br />            Iterator<TableMeta> iterator = tableMetaList.iterator();<br />            TableMeta tableMeta = iterator.next();<br />            List<String> deleteOrder = new ArrayList<String>();<br />            int counts = tableMetaList.size();<br />            for(;true;)<br />            {<br />                //没有外键?br />                if(!tableMeta.isFKTable())<br />                {<br />                    iterator.remove();<br />                    deleteOrder.add(tableMeta.tableName);<br />                    <br />                    //清除表所使用的所有外键表<br />                    for(TableMeta it : tableMetaList)<br />                    {<br />                        it.deleteFK(tableMeta.tableName);<br />                    }<br />                }<br /><br />                if(!iterator.hasNext())<br />                {<br />                    //一ơ@环完成后Q如果tableMeta的长度(也不为零Q没有减,<br />                    //那么说明在tableMeta中的表之间有循环外键兌的“环”,要退出整个@?br />                    //不然此处׃有一个死循环Q此时在tableMeta中的表的设计也许是有问题?br />                    //如果要分?br />                    if(tableMetaList.size() == counts || tableMetaList.size() < 1)<br />                    {<br />                        break;<br />                    }<br />                    iterator = tableMetaList.iterator();<br />                }<br />                tableMeta = iterator.next();<br />            }<br />           return deleteOrder;<br />        }<br />        catch (SQLException e)<br />        {<br />            if(refk != null)<br />                try<br />                {<br />                    refk.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            if(reTables != null)<br />                try<br />                {<br />                    reTables.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    /**<br />     * q回外键?br />     * @param connection q接<br />     * @param userName 用户名,可以为空<br />     * @return q回外键?br />     */<br />    public static List<String> getExportedKeysLoop(Connection connection,String userName)<br />    {<br />        ResultSet reTables = null;<br />        ResultSet refk = null;<br />        try<br />        {<br />            DatabaseMetaData dm = connection.getMetaData();<br />            //如果是oracle数据库的话,清空闪回?br />            if(dm.getDatabaseProductName().toUpperCase().indexOf("ORACLE")>=0)<br />            {<br />                Statement state = connection.createStatement();<br />                state.execute("PURGE RECYCLEBIN");<br />                state.close();<br />            }<br />            //取得?br />            reTables = dm.getTables(null, userName, null, new String[]{"TABLE","VIEW"});<br />            List<TableMeta> tableMetaList = new ArrayList<TableMeta>();<br />            while(reTables.next())<br />            {<br />                String tableName = reTables.getString("TABLE_NAME").trim(); <br />                if(tableName == null || tableName.length()<1)<br />                {<br />                    continue;<br />                }<br />                TableMeta tem = new TableMeta(tableName);<br />                tableMetaList.add(tem);<br />                //取得外键?br />                refk = dm.getExportedKeys(null, userName, tableName);<br />                while(refk.next())<br />                {<br />                    String fkTableName = refk.getString("FKTABLE_NAME").trim();<br />                    if(fkTableName == null || fkTableName.length() < 1 ||<br />                            fkTableName.equals(tableName)) //Ld键是自己的小?br />                    {<br />                        continue;<br />                    }<br />                    tem.addFK(fkTableName);<br />                }<br />                if(refk != null)refk.close();<br />            }<br />            <br />            Iterator<TableMeta> iterator = tableMetaList.iterator();<br />            TableMeta tableMeta = iterator.next();<br />            List<String> exportedKeysLoop = new ArrayList<String>();<br />            int counts = tableMetaList.size();<br />            for(;true;)<br />            {<br />                //没有外键?br />                if(!tableMeta.isFKTable())<br />                {<br />                    iterator.remove();                    <br />                    //清除表所使用的所有外键表<br />                    for(TableMeta it : tableMetaList)<br />                    {<br />                        it.deleteFK(tableMeta.tableName);<br />                    }<br />                }<br /><br />                if(!iterator.hasNext())<br />                {<br />                    //一ơ@环完成后Q如果tableMeta的长度(也不为零Q没有减,<br />                    //那么说明在tableMeta中的表之间有循环外键兌的“环”,要退出整个@?br />                    //不然此处׃有一个死循环Q此时在tableMeta中的表的设计也许是有问题?br />                    //如果要分?br />                    if(tableMetaList.size() == counts || tableMetaList.size() < 1)<br />                    {<br />                        for(TableMeta it : tableMetaList)<br />                        {<br />                            exportedKeysLoop.add(it.tableName);<br />                        }<br />                        break;<br />                    }<br />                    iterator = tableMetaList.iterator();<br />                }<br />                tableMeta = iterator.next();<br />            }<br />           return exportedKeysLoop;<br />        }<br />        catch (SQLException e)<br />        {<br />            if(refk != null)<br />                try<br />                {<br />                    refk.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            if(reTables != null)<br />                try<br />                {<br />                    reTables.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    /**<br />     * 有重复外键的?br />     * @param connection q接<br />     * @param userName 用户名,可以为空<br />     * @return 有重复外键的?br />     */<br />    public static List<String> getRepeatExportedKeys(Connection connection,String userName)<br />    {<br />        ResultSet reTables = null;<br />        ResultSet refk = null;<br />        try<br />        {<br />            DatabaseMetaData dm = connection.getMetaData();<br />            //如果是oracle数据库的话,清空闪回?br />            if(dm.getDatabaseProductName().toUpperCase().indexOf("ORACLE")>=0)<br />            {<br />                Statement state = connection.createStatement();<br />                state.execute("PURGE RECYCLEBIN");<br />                state.close();<br />            }<br />            <br />            List<String> repeatExportedKeys = new ArrayList<String>();<br />            //取得?br />            reTables = dm.getTables(null, userName, null, new String[]{"TABLE","VIEW"});<br />            while(reTables.next())<br />            {<br />                String tableName = reTables.getString("TABLE_NAME").trim(); <br />                if(tableName == null || tableName.length()<1)<br />                {<br />                    continue;<br />                }<br />                TableMeta tem = new TableMeta(tableName);<br />                //取得外键?br />                refk = dm.getExportedKeys(null, userName, tableName);<br />                while(refk.next())<br />                {<br />                    String fkTableName = refk.getString("FKTABLE_NAME").trim();<br />                    if(fkTableName == null || fkTableName.length() < 1)<br />                    {<br />                        continue;<br />                    }<br />                    if(tem.findFK(fkTableName))<br />                    {<br />                        repeatExportedKeys.add(tem.tableName);<br />                        break;<br />                    }<br />                 }<br />                if(refk != null)refk.close();<br />            }<br />           return repeatExportedKeys;<br />        }<br />        catch (SQLException e)<br />        {<br />            if(refk != null)<br />                try<br />                {<br />                    refk.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            if(reTables != null)<br />                try<br />                {<br />                    reTables.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    public static class TableMeta{<br />        //表名<br />        public String tableName;<br />        //外键?br />        private List<String> fkTable = new ArrayList<String>(1);<br />        public TableMeta(String table)<br />        {<br />            this.tableName = table;<br />        }<br />        public boolean findFK(String table)<br />        {<br />            return fkTable.contains(table);<br />        }<br />        public void deleteFK(String table)<br />        {<br />            fkTable.remove(table);<br />        }<br />        //是否存在外键?br />        public boolean isFKTable()<br />        {<br />            return fkTable.size() > 0;<br />        }<br />        public void addFK(String table)<br />        {<br />            //重名处理<br />            if(!findFK(table))<br />            {<br />                fkTable.add(table);<br />            }<br />        }<br />    }<br /><br />}<br /><br /></span><span style="color: rgb(0, 0, 0);"><br /></span></div><br /><br /><br /><br /><img src ="http://www.aygfsteel.com/peacess/aggbug/80208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/peacess/" target="_blank">中东</a> 2006-11-09 17:18 <a href="http://www.aygfsteel.com/peacess/archive/2006/11/09/80208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个基于gwt的开源项?-- Dunehttp://www.aygfsteel.com/peacess/archive/2006/08/04/61790.html中东中东Fri, 04 Aug 2006 08:54:00 GMThttp://www.aygfsteel.com/peacess/archive/2006/08/04/61790.htmlhttp://www.aygfsteel.com/peacess/comments/61790.htmlhttp://www.aygfsteel.com/peacess/archive/2006/08/04/61790.html#Feedback2http://www.aygfsteel.com/peacess/comments/commentRss/61790.htmlhttp://www.aygfsteel.com/peacess/services/trackbacks/61790.html说明Q基于gwt的项目管理的开源项?br />
1Q实C像jsp一Lsession理Q这一Ҏ(gu)相当好的一个参考实?br />2Q有一个表格的实现
3Q对gwt自n的例子参考比较多Q比如“sink”等
4Q。。。。。?br />



中东 2006-08-04 16:54 发表评论
]]>
վ֩ģ壺 ͨ| ̨| | | | | | Į| կ| | Ϫ| | ѧ| ½| | ͬ| | | | | | Ϫ| | | | ʡ| | ͬ| | | | | | ɽ| Ϣ| ƾ| Դ| | | | |