存档

2011年11月 的存档

Whois简易查询Android版

2011年11月29日 admin 1 条评论

有空玩了下android,配置环境比较啰嗦。google下
贴效果图;

效果简单 之前是模仿了cnblog的一篇文章。不过他是抓url。我是用socket。
后缀还没细分,喜欢的人自己研究去,贴代码

public class MyWhois extends Activity {
	private TextView vResult;
	private EditText eKeyWord;
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        Button sButton1 = (Button)findViewById(R.id.Submit); 
        vResult = (TextView)findViewById(R.id.ResultView);
    	eKeyWord = (EditText)findViewById(R.id.KeyWord); 
 
        //注册点击事件监听者  
        sButton1.setOnClickListener(new OnClickListener()
        {
            public void onClick(View aView) { 
            	TextView vResult = (TextView)findViewById(R.id.ResultView);
            	vResult.setText("正在查询中,请稍等!");
 
            	//新建查询线程,否则UI界面会假死
            	Thread mThread = new Thread(new Runnable() {
            		public void run() {  
            			String whoisMes="";
                    	  try {
                    		  try
                 		     {
                 			   String domain=eKeyWord.getText().toString();
                 			   String IP="whois.cnnic.cn";
                 			   if(domain.contains(".com")||domain.contains(".com")){
                 				   IP="whois.internic.net";
                 			   }				   
                 		       Socket socket = new Socket(IP, 43);
                 		       InputStream Is = socket.getInputStream();
                 		       OutputStream Os = socket.getOutputStream();
                 		       DataInputStream DIS = new DataInputStream(Is);
                 		       PrintStream PS = new PrintStream(Os);
                 		       DataInputStream in = new DataInputStream(System.in);		      
                 		       PS.println(domain);
                 		       System.out.println("please wait whois's message...");
 
                 		       boolean TF = false;
 
                 		       while (DIS.read() > 0) {
                 		         String tempStr = DIS.readLine();
                 		        whoisMes = whoisMes + tempStr + "\r\n";
                 		       }
                 		       whoisMes=new String(whoisMes.getBytes("ISO-8859-1"),"utf-8");
                 		       System.out.println(whoisMes);
                 		       DIS.close();
                 		       PS.close();
                 		       Is.close();
                 		       Os.close();
                 		       socket.close();
                 		     } catch (Exception e) {
                 		       System.out.println("Error:" + e);
                 		     }
                    		  //返回的数据需要使用'\n'来换行!
                    		            Message mg = Message.obtain();  
                    		            mg.obj = whoisMes;  
                    		            mHandler.sendMessage(mg);  
 
                    		  } catch (Exception e) {
                    		   e.printStackTrace();
                    		  }
            		}
 
            	});
            	 mThread.start();  
            }
        }
 
        ); 
    }
 
    //定义一个Handler  
    private Handler mHandler = new Handler(){  
        public void handleMessage(Message msg){  
        	String m = (String) msg.obj;
        	if(m.length()<=0)
        	{
        		vResult.setText("查询结果为空.");
        	}
        	else
        	{
        		vResult.setText(m);
        	}
        }  
    };  
}
分类: .NET 标签: ,

sql2000升级sql2005

2011年11月11日 admin 没有评论

这次升级真是太折腾了。大大影响了平台的正常使用,把自己也搞的疲惫不堪。
sql2000升级2005有几种服务。
一种是在2000的基础上默认升级实例。另一种 是通过备份还原的形式。
我用的是备份还原。刚开始升级后,运行速度非常快,网站访问也很 顺畅。
但是过会之后,就会越来越卡,越来越慢,严重的超时现象。也不占cpu,就是
很卡,到最后不得已重启服务器。重启后又恢复正常。但是之后有开始了。
查阅了很多资料,最后 还是很可能在一个问题上 索引的重聚和索引碎片的整理。
我用了DBCC INDEXDEFRAG(‘dbname’,'tablename’),这样一个个执行表,很费力,
最后看了文章有用sp_updatestats 更新所有的。更新之后 至今还没有发现之前的
那种卡。说明数据库升级总算成功了。总算是平台正常了。
2005性能 还是有很大的提升的。其实主要还是用他的rownumber来提高分页查询的速度
下面用个自己的分页存储过程:

ALTER  PROCEDURE [dbo].[P_PAGE] (
@CurrentPage int,
@PageSize int,
@TableName varchar(1000),
@KeyField varchar(1000),
@Fields varchar(1000),
@Condition1 varchar(2000),
@Condition2 varchar(1000),
@PageCount int output,
@RecordCount int output,
@sql nvarchar(4000) output
)AS
declare @num numeric(8,2),@pz numeric(8,2),@rpz int
set @sql = 'select @RecordCount=count(id) from '+@TableName+' '+@Condition1
exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output
set @pz = @PageSize
set @num = @RecordCount / @pz
set @rpz = @num
if @num &gt; @rpz set @rpz = @rpz + 1
select @PageCount = @rpz
if @CurrentPage &lt; 1
begin
	set @CurrentPage = 1
end
if @CurrentPage &gt; @PageCount and @PageCount &gt;0
begin
	set @CurrentPage = @PageCount
end
print @CurrentPage
if(@CurrentPage=1)
begin
	set @sql = 'select top '+convert(varchar,@PageSize)+' '+@Fields+' from '+@TableName+' '+@Condition1+' '+@Condition2
end
else
begin
set @sql='SELECT '+@Fields+' FROM (SELECT '+@Fields+', ROW_NUMBER() OVER(ORDER BY id asc) AS rownum FROM '+@TableName+' ) as Tbl
  WHERE rownum BETWEEN '+convert(varchar,(@CurrentPage-1)*@PageSize+1)+' AND '+convert(varchar,@CurrentPage*@PageSize)
end
exec sp_executesql @sql
另附2005 索引重聚proc
 
GO
/****** 对象:  StoredProcedure [dbo].[db2005_indexes]    脚本日期: 01/05/2012 09:32:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[db2005_indexes]
AS
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @objectowner VARCHAR(255)
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @indexname CHAR(255)
DECLARE @dbname sysname
DECLARE @tableid INT
DECLARE @tableidchar VARCHAR(255)
 
SELECT @dbname = db_name()
IF @dbname IN ('master', 'msdb', 'model', 'tempdb')
BEGIN
PRINT '不能运行系统数据库'
RETURN
END
 
DECLARE tables CURSOR FOR
SELECT convert(varchar,so.id)
FROM sysobjects so
JOIN sysindexes si
ON so.id = si.id
WHERE so.type ='U'
AND si.indid &lt; 10 AND si.rows &gt; 0 
 
CREATE TABLE #templist (
ObjectName CHAR (255),
ObjectId INT,
IndexName CHAR (255),
IndexId INT,
Lvl INT,
CountPages INT,
CountRows INT,
MinRecSize INT,
MaxRecSize INT,
AvgRecSize INT,
ForRecCount INT,
Extents INT,
ExtentSwitches INT,
AvgFreeBytes INT,
AvgPageDensity INT,
ScanDensity DECIMAL,
BestCount INT,
ActualCount INT,
LogicalFrag DECIMAL,
ExtentFrag DECIMAL)
 
OPEN tables
 
FETCH NEXT
FROM tables
INTO @tableidchar
 
WHILE @@FETCH_STATUS = 0
BEGIN
 
INSERT INTO #templist
EXEC ('DBCC SHOWCONTIG (' + @tableidchar + ') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
FETCH NEXT
FROM tables
INTO @tableidchar
END
 
CLOSE tables
DEALLOCATE tables
 
SELECT * FROM #templist w--here indexname like '%destine%'

DECLARE indexes CURSOR FOR
SELECT ObjectName, ObjectOwner = user_name(so.uid), ObjectId, IndexName, ScanDensity
FROM #templist f
JOIN sysobjects so ON f.ObjectId=so.id
WHERE INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') &gt; 0
 
SELECT '开始重新生成或者重组索引 ' + CONVERT(VARCHAR,GETDATE())
 
OPEN indexes
 
FETCH NEXT
FROM indexes
INTO @tablename, @objectowner, @objectid, @indexname, @frag
 
WHILE @@FETCH_STATUS = 0
BEGIN
SET QUOTED_IDENTIFIER ON
 
if(@frag&gt;30)
begin
SELECT @execstr = 'DBCC DBREINDEX (' + '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) + '''' +
', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS'
SELECT '正在执行: '
--SELECT(@execstr)
print @execstr
EXEC (@execstr)
 
end
else if (@frag&lt;30)
begin
SELECT @execstr = 'DBCC INDEXDEFRAG ('+db_name()+','+ '''' +RTRIM(@objectowner) + '.' + RTRIM(@tablename) +  '''' +
', ' + RTRIM(@indexname) + ') WITH NO_INFOMSGS'
SELECT '正在执行: '
--SELECT(@execstr)
print @execstr
EXEC (@execstr)
end 
 
SET QUOTED_IDENTIFIER OFF
 
FETCH NEXT
FROM indexes
INTO @tablename, @objectowner, @objectid, @indexname, @frag
END
 
CLOSE indexes
DEALLOCATE indexes
 
SELECT '完成结束索引' + CONVERT(VARCHAR,GETDATE())
 
DROP TABLE #templist