Package com.alimama.web

Source Code of com.alimama.web.Sql$HeartBeat

package com.alimama.web;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

import javax.servlet.jsp.JspWriter;

import com.alimama.mdrill.jdbc.MdrillQueryResultSet;
public class Sql {
 
  public static class HeartBeat implements Runnable
  {
    public Object lock=new Object();

    JspWriter out;
    public HeartBeat(JspWriter out) {
      super();
      this.out = out;
    }
    AtomicBoolean isstop=new AtomicBoolean(false);
   

    public void setIsstop(boolean isstop) {
        this.thrStop.set(isstop);
    }
   
    AtomicBoolean thrStop=new AtomicBoolean(false);

    public boolean isstop()
    {
      return thrStop.get();
    }
   

    @Override
    public void run() {
      while(true)
      {
          if(this.thrStop.get())
          {
            thrStop.set(true);
            return ;
          }
        try {
          synchronized (this.lock) {
            if(this.out!=null)
            {
              this.out.write(" ");
              this.out.flush();
            }
          }
        } catch (Throwable e) {
        }
       
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
      }
     
    }
   
  }
 
public static void execute(String sql,String connstr,JspWriter out) throws ClassNotFoundException, SQLException, IOException
{
  HeartBeat hb=new HeartBeat(out);
  new Thread(hb).start();
  StringBuffer buff=new StringBuffer();
  long time1=System.currentTimeMillis();

  Class.forName("com.alimama.mdrill.jdbc.MdrillDriver");

  Connection con = DriverManager.getConnection(connstr, "", "");

  Statement stmt = con.createStatement();
 
    String lowercase=sql.toLowerCase();
      if(lowercase.indexOf("insert")>=0&&lowercase.indexOf("into")>0 && lowercase.indexOf("values")>0)
      {
        stmt.execute(sql);
        buff.append("执行完毕<br>\r\n");
        buff.append("<br>\r\n");
      }else{

        MdrillQueryResultSet res = null;
     
        res = (MdrillQueryResultSet) stmt.executeQuery(sql);
        buff.append("totalRecords:"+res.getTotal());
        buff.append("<br>\r\n");
        buff.append("<table border=1><tr>");
        List<String> colsNames = res.getColumnNames();
        for (int i = 0; i < colsNames.size(); i++) {
          buff.append("<td>");
            buff.append(colsNames.get(i));
            buff.append("</td>");
        }
        buff.append("</tr>");
        while (res.next()) {
          buff.append("<tr>");
            for (int i = 0; i < colsNames.size(); i++) {
              buff.append("<td>");
          buff.append(res.getString(colsNames.get(i)));
          buff.append("</td>");
            }
            buff.append("</tr>");
        }
        con.close();
        buff.append("</table>");
       
      }
      long time2=System.currentTimeMillis();
      buff.append("times taken "+((time2-time1)*1.0/1000)+" seconds");
      buff.append("<br>\r\n");
   
    hb.setIsstop(true);
    while(!hb.isstop())
    {
      try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
    }
    }
   
    synchronized (hb.lock) {
    out.write(buff.toString());
  }

   
}
}
TOP

Related Classes of com.alimama.web.Sql$HeartBeat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.