PHP中如何将变量跟字符串连接?

    时间:2009-10-1 作者:天空下的雨 分类: 编程设计 浏览:9838

    ASP能用连接符&连接变量和字符,对于初学者,我们在PHP语言下怎么解决这个问题呢?下面天空下的雨给个例子吧

    例如这几个变量,与字符串相连接。
    $a="aaa";
    $b="bbb";
    $c="ccc";


    $echo "我们要这里是输出a的变量:$a变量";

    经测试,很显然上面的方式是不能达到效果的,在php里面是用点(.)来表示的。

    $echo "我们要这里是输出a的变量:".$a."变量";

    Continue

    ASP/PHP在线发送内容到邮箱的实例和完整代码

    时间:2009-9-27 作者:天空下的雨 分类: 编程设计 浏览:6299

    PHP发送订单或留言可以使用phpmailer的类来实现,可以使用变量来扩展。很多朋友遇到使用phpmailer的问题,第一有些虚拟主机是不支持的,第二正确的配置非常重要,第三邮箱不支持。错误分析:提示connect_host通常表示连接SMTP服务器配置错误或PHP服务器不支持此操作,提示recipients_failedaaa@test.com,是发送邮箱配置错误。

    其实很简单这里就不多说了,下面是经过调试成功的代码和phpmailer类下载,供大家参考。

    下载地址(天空下的雨修改版16K):phpmailer.rar

    <?php
    /*******************************
    *   天空下的雨 调试
    *******************************/
    require_once("class.phpmailer.php");    'phpmailer类调用


    $mail = new PHPMailer();   //建立对象
    $mail->IsSMTP();               // 发送类型 SMTP
    $mail->Host = "smtp.126.com"; // SMTP服务器
    $mail->SMTPAuth = true;         // 是否验证
    $mail->Username = "aaa@126.com";   // 用户名(普通邮件认证不需要加 @域名)
    $mail->Password = "123456";        // 邮箱密码
    $mail->From = "aaaa@126.com";      // 发件人邮箱,与SMTP服务器一致
    $mail->FromName = "发件人名字" ;  // 发件人


    $mail->CharSet = "GB2312";            // 页面编码,经测试使用uft-8收邮件可能会产生乱码
    $mail->AddAddress("aaaa@68080.com","天空下的雨");  // 收件人邮箱和姓名
    //$mail->AddReplyTo("aaa@68080.com","天空下的雨");  // 回复的地址和名字,可以不设置


    //$mail->AddAttachment("/var/tmp/file.tar.gz");   // 附件部分
    //$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
    $mail->IsHTML(true);    // 是否支持HTML
    $mail->Subject = "邮件主题";  // 邮件主题


    // 邮件内容
    $mail->Body ='
    <html><head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
    </head>
    <body>内容</body>
    </html>
    ';                                                                      
    $mail->AltBody ="text/html";
    if(!$mail->Send())
    {
      echo "邮件发送有误 <p>";
      echo "邮件错误信息: " . $mail->ErrorInfo;
      exit;
    }
    else {
      echo "邮件发送成功!<br />";
    }
    ?>


    ASP使用Jmail组件来实现邮件发送功能已经很常用了,代码如下:

    <%
    '==================================================
    ' 参数设置开始
    myemail="chenzhou@73500.cn"    '用来接收邮件的邮箱,可以与SMTP服务器发信邮箱不同
    smtpserver ="smtp.126.com"    '发送邮件所使用的SMTP服务器,例如smtp.163.com
    smtpuser ="aaaa"   '与SMTP服务器对应的邮箱用户名
    smtppwd ="123456"   '与SMTP服务器对应的邮箱密码
    smtpemail ="aaa@126.com"   'SMTP服务器发信邮箱,与发送服务器对应
    ' 参数设置结束
    '==================================================
    sendname = trim(Request("ename"))  '发件人名字
    email = myemail  '收件人邮箱
    zhuti = trim(Request("zhuti"))    '邮件标题


    mailbody=mailbody &"邮件的内容"    ‘内容部分1,可使用变量
    mailbody=mailbody &"邮件的内容"   ‘内容部分2
     
    if sendname <> "" and email <> "" then
    set jmail= server.CreateObject ("jmail.message")  '调用Jmail组件
    jmail.Silent = true
    jmail.Charset = "gb2312"
    JMail.ContentType = "text/html"
    '=================================
    '调用变量内容
    jmail.From = smtpemail
    jmail.FromName = sendname  
    jmail.ReplyTo = email
    jmail.Subject = zhuti   
    jmail.AddRecipient myemail
    jmail.Body = mailbody    
    jmail.MailServerUserName = smtpuser
    jmail.MailServerPassWord = smtppwd


    isgo = jmail.Send(smtpserver)   '发送邮件
    '=================================
    if isgo then
    msg="发送成功"
    else
    msg = "发送失败,请检查参数"
    end if
    jmail.Close
    set jmail = nothing
    end if
    end if
    %>

    Continue

    JSP实现标题加省略号效果 函数实现

    时间:2009-6-1 作者:天空下的雨 分类: 编程设计 浏览:8202

    制作动态网页中经常用碰到标题很长,我们只想显示一部分内容,JSP实现的方法如下。

    以下是我用JSP写的一个JavaBean,函数strcut(String str,int len)就是字符串截断函数了,参数str用于给出源字符串,len决定截断后的长度,返回值就是截断之后的字符串,长度超过len的就加上...

    import java.sql.*;
    public class fun
    {
    public String strcut(String str,int len)
    {
    if(str.length()>len)
    {
    String resultstr;
    resultstr=str.substring(0,len)+"...";
    return resultstr;
    }
    else
    {
    return str;
    }
    }
    }

    Continue

    优化SQL数据库读取 实战经验

    时间:2009-3-7 作者:天空下的雨 分类: 编程设计 浏览:3223

    大家都在讨论关于数据库优化方面的东东,刚好参与开发了一个数据仓库方面的项目,以下的一点东西算是数据库优化方面的学习+实战的一些心得体会了,拿出来大家共享。欢迎批评指正阿!

    SQL语句:
    是对数据库(数据)进行操作的惟一途径;
    消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;
    可以有不同的写法;易学,难精通。

    SQL优化:
    固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高。
    应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致

    ORACLE优化器:
    在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是
    要么结果表达式能够比源表达式具有更快的速度
    要么源表达式只是结果表达式的一个等价语义结构
    不同的SQL结构有时具有同样的操作(例如:= ANY (subquery) and IN (subquery)),ORACLE会把他们映射到一个单一的语义结构。

    1 常量优化:
    常量的计算是在语句被优化时一次性完成,而不是在每次执行时。下面是检索月薪大于2000的的表达式:
    sal > 24000/12
    sal > 2000
    sal*12 > 24000
    如果SQL语句包括第一种情况,优化器会简单地把它转变成第二种。
    优化器不会简化跨越比较符的表达式,例如第三条语句,鉴于此,应尽量写用常量跟字段比较检索的表达式,而不要将字段置于表达式当中。否则没有办法优化,比如如果sal上有索引,第一和第二就可以使用,第三就难以使用。

    2 操作符优化:
    优化器把使用LIKE操作符和一个没有通配符的表达式组成的检索表达式转换为一个“=”操作符表达式。
    例如:优化器会把表达式ename LIKE 'SMITH'转换为ename = 'SMITH'
    优化器只能转换涉及到可变长数据类型的表达式,前一个例子中,如果ENAME字段的类型是CHAR(10), 那么优化器将不做任何转换。
    一般来讲LIKE比较难以优化。

    其中:
    ~~ IN 操作符优化:
         优化器把使用IN比较符的检索表达式替换为等价的使用“=”和“OR”操作符的检索表达式。
         例如,优化器会把表达式ename IN ('SMITH','KING','JONES')替换为
    ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES‘

    ~~ ANY和SOME 操作符优化:
         优化器将跟随值列表的ANY和SOME检索条件用等价的同等操作符和“OR”组成的表达式替换。
         例如,优化器将如下所示的第一条语句用第二条语句替换:
         sal > ANY (:first_sal, :second_sal)
         sal > :first_sal OR sal > :second_sal
         优化器将跟随子查询的ANY和SOME检索条件转换成由“EXISTS”和一个相应的子查询组成的检索表达式。
         例如,优化器将如下所示的第一条语句用第二条语句替换:
         x > ANY (SELECT sal FROM emp WHERE job = 'ANALYST')
         EXISTS (SELECT sal FROM emp WHERE job = 'ANALYST' AND x > sal)

    ~~ ALL操作符优化:
         优化器将跟随值列表的ALL操作符用等价的“=”和“AND”组成的表达式替换。例如:
         sal > ALL (:first_sal, :second_sal)表达式会被替换为:
         sal > :first_sal AND sal > :second_sal
         对于跟随子查询的ALL表达式,优化器用ANY和另外一个合适的比较符组成的表达式替换。例如
         x > ALL (SELECT sal FROM emp WHERE deptno = 10) 替换为:
         NOT (x <= ANY (SELECT sal FROM emp WHERE deptno = 10))
         接下来优化器会把第二个表达式适用ANY表达式的转换规则转换为下面的表达式:
         NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x <= sal)

    ~~ BETWEEN 操作符优化:
         优化器总是用“>=”和“<=”比较符来等价的代替BETWEEN操作符。
         例如:优化器会把表达式sal BETWEEN 2000 AND 3000用sal >= 2000 AND sal <= 3000来代替。

    ~~ NOT 操作符优化:
         优化器总是试图简化检索条件以消除“NOT”逻辑操作符的影响,这将涉及到“NOT”操作符的消除以及代以相应的比较运算符。
         例如,优化器将下面的第一条语句用第二条语句代替:
         NOT deptno = (SELECT deptno FROM emp WHERE ename = 'TAYLOR')
         deptno <> (SELECT deptno FROM emp WHERE ename = 'TAYLOR')
         通常情况下一个含有NOT操作符的语句有很多不同的写法,优化器的转换原则是使“NOT”操作符后边的子句尽可能的简单,即使可能会使结果表达式包含了更多的“NOT”操作符。
         例如,优化器将如下所示的第一条语句用第二条语句代替:
         NOT (sal < 1000 OR comm IS NULL)
         NOT sal < 1000 AND comm IS NOT NULL sal >= 1000 AND comm IS NOT NULL

    如何编写高效的SQL:
         当然要考虑sql常量的优化和操作符的优化啦,另外,还需要:

    1 合理的索引设计:
    例:表record有620000行,试看在不同的索引下,下面几个SQL的运行情况:
    语句A
    SELECT count(*) FROM record
    WHERE date >'19991201' and date < '19991214‘ and amount >2000

    语句B
    SELECT count(*) FROM record
    WHERE date >'19990901' and place IN ('BJ','SH')

    语句C
    SELECT date,sum(amount) FROM record
    group by date
    1 在date上建有一个非聚集索引
    A:(25秒)
    B:(27秒)
    C:(55秒)
    分析:
    date上有大量的重复值,在非聚集索引下,数据在物理上随机存放在数据页上,在范围查找时,必须执行一次表扫描才能找到这一范围内的全部行。
    2 在date上的一个聚集索引
    A:(14秒)
    B:(14秒)
    C:(28秒)
    分析:
    在聚集索引下,数据在物理上按顺序在数据页上,重复值也排列在一起,因而在范围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据页,避免了大范围扫描,提高了查询速度。
    3 在place,date,amount上的组合索引
    A:(26秒)
    C:(27秒)
    B:(< 1秒)
    分析:
    这是一个不很合理的组合索引,因为它的前导列是place,第一和第二条SQL没有引用place,因此也没有利用上索引;第三个SQL使用了place,且引用的所有列都包含在组合索引中,形成了索引覆盖,所以它的速度是非常快的。
    4 在date,place,amount上的组合索引
    A: (< 1秒)
    B:(< 1秒)
    C:(11秒)
    分析:
    这是一个合理的组合索引。它将date作为前导列,使每个SQL都可以利用索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能达到了最优。
    缺省情况下建立的索引是非聚集索引,但有时它并不是最佳的;合理的索引设计要建立在对各种查询的分析和预测上。一般来说:
    有大量重复值、且经常有范围查询(between, >,< ,>=,< =)和order by、group by发生的列,考虑建立聚集索引;
    经常同时存取多列,且每列都含有重复值可考虑建立组合索引;在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
    组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。

    2 避免使用不兼容的数据类型:
    例如float和INt、char和varchar、bINary和varbINary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如:
    SELECT name FROM employee WHERE salary > 60000
    在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。

    3 IS ...

    Continue

    在JSP中用bean简单封装数据库操作

    时间:2008-10-24 作者:天空下的雨 分类: 编程设计 浏览:3961

    首先,封装数据库操作,目的就是为了隐藏Java.sql包内的类,在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作轻易带来的资源未释放问题。同时也减少了数据库操作的编码量。下面给大家一个简单的例子:

    1、先用Bean来封装数据库操作

    import Java.sql.*;
    public class sql_data
    {
        //声明变量
        String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";   //数据库驱动
        String sConnStr="jdbc:odbc:book";    //使用桥对数据库连接
        Connection conn=null;
        ResultSet rs=null;

        //加载驱动
        public void sql_data()
        {
            try{
                class.forName(sDBDriver);
            }
            catch(Java.lang.ClassNotFoundException e)
            {
                System.err.println(e.getMessage());
            }
        }

        //数据插入
        public void executeInsert(String sql)
        {
            try
            {
                conn=DriverManager.getConnection(sConnStr);
                Statement stmt=conn.createStatement();
                stmt.executeUpdate(sql);
            }
            catch(SQLException ex)
            {
                System.err.println(ex.getMessage());
            }
        }

        //数据查询
        public ResultSet executeQuery(String sql)
        {
            rs=null;
            try
            {
                conn=DriverManager.getConnection(sConnStr);
                Statement stmt=conn.createStatement();
                rs=stmt.executeQuery(sql);
            }
            catch(SQLException ex)
            {
                System.err.println(ex.getMessage());
            }
        }

        //数据删除
        public void executeDelete(String sql)
        {
            try
            {
                conn=DriverManager.getConnection(sConnStr);
                Statement stmt=conn.createStatement();
                stmt.executeUpdate(sql);
            }
            catch(SQLException ex)
            {
                System.err.println(ex.getMessage());
            }
        }
    }

    2、在JSP页面中调用Bean:

    ……
    <jsp:useBean id="sqlbean" class="book.sql_data"/>  <!-- 调用Bean的数据封装类 -->

    <%!String sql,name;%>

    <%

    sqlbean.sql_data();   //连接数据库
    sql="select * from table";
    ResultSet rs=sqlbean.executeQuery(sql);

    while(rs.next()){
      name=rs.getString("name");
    %>

    ……
    name1:<%=name%>  name2: <%=rs.getString("name")%>
    ……

    <%
    }
    ...

    Continue

    SSH框架模式中的实用分页Java(Struts + Spring + Hibernate)

    时间:2008-10-10 作者:天空下的雨 分类: 编程设计 浏览:6047

    分页每个项目里面差不多都会用到 
    我以前耶找了很多个,刚刚找到一个很好用的分页 (baallynn )

    先是一个page的bean:
    package com.leatherstore.other;
    public class Page { 
        /** 是否有上一页 */
        private boolean hasPrePage; 
        /** 是否有下一页 */
        private boolean hasNextPage; 
        /** 每页的数量 */
        private int everyPage; 
        /** 总页数 */
        private int totalPage; 
        /** 当前页*/
        private int currentPage; 
        /** 起始点 */
        private int beginIndex; 
        /** 总记录数*/
        private int totalCount; 

    public int getTotalCount() {
    return totalCount;
    }

    public void setTotalCount(int totalCount) {
    this.totalCount = totalCount;

        public Page(){ 
        } 
        
          public Page(int everyPage){
            this.everyPage = everyPage;
        } 

        public Page(boolean hasPrePage, boolean hasNextPage, 
                        int everyPage, int totalPage,
                        int currentPage, int beginIndex,int totalCount) {
            this.hasPrePage = hasPrePage;
            this.hasNextPage = hasNextPage;
            this.everyPage = everyPage;
            this.totalPage = totalPage;
            this.currentPage = currentPage;
            this.beginIndex = beginIndex;
            this.totalCount = totalCount;
        } 
        public int getBeginIndex() {
            return beginIndex;
        } 
        public void setBeginIndex(int beginIndex) {
            this.beginIndex = beginIndex;
        } 
        public int getCurrentPage() {
            return currentPage;
        } 
        public void setCurrentPage(int currentPage) {
            this.currentPage = currentPage;
        } 

        public int getEveryPage() {
            return everyPage;
        } 
        public void setEveryPage(int everyPage) {
            this.everyPage = everyPage;
        } 

        public boolean getHasNextPage() {
            return hasNextPage;
        } 

        public void setHasNextPage(boolean hasNextPage) {
            this.hasNextPage = hasNextPage;
        } 

        public boolean getHasPrePage() {
            return hasPrePage;
        } 

        public void setHasPrePage(boolean hasPrePage) {
            this.hasPrePage = hasPrePage;
        } 

        public int getTotalPage() {
            return totalPage;
        } 

        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }
    }


    然后构建一个page的工厂PageUtil:
    package com.leatherstore.other;
    public class PageUtil {
    /**
    * Use the origin pa...

    Continue

    Java开发者需坚守的十大基本准则【转自IT168】

    时间:2008-9-30 作者:天空下的雨 分类: 编程设计 浏览:35463

      有许多标准和实践准则可适用于Java开发者,但此处要说的,是每个Java开发者需坚守的基本原则。

      一、为代码加注释。虽然每个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,比如说两星期之后或者更长,回过头来看看自己的代码,说不定已经记不住它是干什么的了。如果这些代码是你个人的,那还算是走运了,不幸的是,当然了,大多数时候都是别人的不幸,很多时候大家都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为我们自己,请为你的代码加上注释。

      二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的解决方案,比如说,在只有五个用户的程序中引入EJB、对程序实现了并不需要的框架(framework),之类的还有属性文件、面向对象解决方案、多线程等等。为什么要这样做呢?也许我们并不知道是否这样会更好,但这样做也许可以学到一些新东西,或者让自己更感兴趣一些。如果是不知道为什么这样做,建议多请教经验丰富的程序员,如果是为了个人的目的,麻烦让自己更专业一点。

      三、始终牢记——“少即是好(Less is more)并不总是对的”。代码效率虽然很重要,但在许多解决方案中,编写更少的代码并不能改善这些代码的效率,请看下面这个简单的例子:

    if(newStatusCode.equals("SD") && (sellOffDate == null ||
    todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
    todayDate.compareTo(lastUsedDate)>0)) ||
    (newStatusCode.equals("OBS") && (OBSDate == null ||
    todayDate.compareTo(OBSDate)<0))){
    newStatusCode = "NYP";
    }

      能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:

    if(newStatusCode.equals("SD") && (sellOffDate == null ||
    todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&
    todayDate.compareTo(lastUsedDate)>0))){
    newStatusCode = "NYP";
    }else
    if(newStatusCode.equals("OBS") && (OBSDate == null ||
    todayDate.compareTo(OBSDate)<0))
    {
    newStatusCode = "NYP";
    }

      是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。

      四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?

    public class A {
    public static final String S_CONSTANT_ABC = "ABC";
    public boolean methodA(String sParam1){
    if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){
    return true;
    }
    return false;
    }
    }

      现在,每次需要将“ABC”与其他变量进行比较时,不必记住实际代码,直接引用A.S_CONSTANT_ABC就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。

      五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是开源的,这些框架都是优秀的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是Struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的Struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用Struts了,对这种程序来说,不需要那么多的“控制”。

      六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上System.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用System.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估System.out.println危害啊,请看下面的代码:

    public class BadCode {
    public static void calculationWithPrint(){
    double someValue = 0D;
    for (int i = 0; i <10000; i++) {
    System.out.println(someValue = someValue + i);
    }
    }
    public static void calculationWithOutPrint(){
    double someValue = 0D;
    for (int i = 0; i < 10000; i++) {
    someValue = someValue + i;
    }
    }
    public static void main(String [] n) {
    BadCode.calculationWithPrint();
    BadCode.calculationWithOutPrint();
    }
    }

      从测试中可以发现,方法calculationWithOutPrint()执行用了0.001204秒,作为对比,方法calculationWithPrint()执行可是用了10.52秒。

      要避免浪费CPU时间,最好的方法是引入像如下的包装方法:

    public class BadCode {
    public static final int DEBUG_MODE = 1;
    public static final int PRODUCTION_MODE = 2;
    public static void calculationWithPrint(int logMode){
    double someValue = 0D;
    for (int i = 0; i < 10000; i++) {
    someValue = someValue + i;
    myPrintMethod(logMode, someValue);
    }
    }
    public static void myPrintMethod(int logMode, double value) {
    if (logMode > BadCode.DEBUG_MODE) { return; }
    System.out.println(value);
    }
    public static void main(String [] n) {
    BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);
    }
    }

      另外,字符串连接也是浪费CPU时间的一个大头,请看下面的示例代码:

    public static void concatenateStrings(String startingString) {
    for (int i = 0; i < 20; i++) {
    startingString = startingString + startingString;
    }
    }
    public static void concatenateStringsUsingStringBuffer(String startingString) {
    StringBuffer sb = new StringBuffer();
    sb.append(startingString);
    for (int i = 0; i < 20; i++) {
    sb.append(sb.toString());
    }
    }

      在测试中可发现,使用StringBuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。

      七、多关注GUI(用户界面)。再三强调,GUI对商业客户来说,与程序的功能及效率同等重要...

    Continue

    今天解决了困扰很久的JAVA数据库乱码问题

    时间:2008-8-25 作者:天空下的雨 分类: 编程设计 浏览:4788

    现在把它分享出来吧,

    第一步:进入安装Tomcat文件夹 >> conf 目录>> 找到 server.xml

    修改server.xml配置文件,在Server标签中加入URIEncoding="UTF-8"

    <Server URIEncoding="UTF-8" port="8005" shutdown="SHUTDOWN">

    第二步:建立一个.filter的类,实现过滤字符

    Fil .java

    package sun.filter;
    import java.io.IOException;
    import javax.servlet.*;


    public class Fil implements Filter {

     public void destroy() 
             {
                }


     public void doFilter(ServletRequest arg0, ServletResponse arg1,
       FilterChain arg2) throws IOException, ServletException
                {
                      // 将Request 、Response都转化为utf-8编码
                       arg0.setCharacterEncoding("UTF-8");  
                      arg1.setCharacterEncoding("UTF-8");                
                      arg2.doFilter(arg0, arg1);
                }


     public void init(FilterConfig arg0) throws ServletException
              {
                  }        
    }


    第三步: 在网站配置文件web.xml, 为了更好理解把我的给帖出来

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     
      <filter>
      <filter-name>encoding</filter-name>
      <filter-class>sun.filter.Fil</filter-class>
      </filter>
     
      <servlet>
        <servlet-name>userpass</servlet-name>
        <servlet-class>sun.sta.userpass</servlet-class>
      </servlet>


    <filter-mapping>
         <filter-name>encoding</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
       
      <servlet-mapping>
        <servlet-name>userpass</servlet-name>
        <url-pattern>/userpass</url-pattern>
      </servlet-mapping>


      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    Continue

    checkbox在JSP实现批量删除的过程中的取值问题

    时间:2008-8-23 作者:天空下的雨 分类: 编程设计 浏览:9362

    在一些文章发布系统中,常常用到批量删除。

    这时就用到SQL语句:delete from 表名 where 字段名 in (参数1,参数2,参数3......)

    用checkbox控件传值是一个很好的选择,但是在取值过程中与ASP有些不同,ASP直接使用

    request.Form(checkbox的名字)就能实现:   参数1,参数2,参数3......    格式的排列

    在JSP中还需要一定处理,以下为实现的一种方式,代码如下:

    客户端:

    <BODY>
    <CENTER><H4>checkBox批量删除</H4></CENTER>
    <HR>
       <FORM METHOD="POST" ACTION="test.jsp">
       <INPUT TYPE="checkbox" NAME="name" value="1"> 条目1<BR>
       <INPUT TYPE="checkbox" NAME="name" value="2"> 条目2<BR>
       <INPUT TYPE="checkbox" NAME="name" value="3"> 条目3<BR>
       <INPUT TYPE="checkbox" NAME="name" value="4"> 条目4<BR>
       <INPUT TYPE="checkbox" NAME="name" value="5"> 条目5<BR>
       <INPUT TYPE="checkbox" NAME="name" value="6"> 条目6<BR>
       <INPUT TYPE="checkbox" NAME="name" value="7"> 条目7<BR>
       <INPUT TYPE="submit" value="提交">
       </FORM>
    </BODY>

    服务器端:

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <%
    String[] name=request.getParameterValues("name");//取值,字符串数组存值
    String str=name[0].toString();
    for(int i=1;i<name.length;i++){
    str=str+","+name[i];   //转化为字符串,添加逗号
    }
    out.print("str=");
    out.print(str);
    %>
     

    Continue
第 1 页   共 2 页 1 2