zoukankan      html  css  js  c++  java
  • 将 纯真ip数据库|QQ IP数据库 转为SQL,ACCESS


    1.然后打开珊瑚虫IP数据库自带的 ShowIP.exe,选择解压,另存一个TXT文件:

    2.用EiditPlus打开这个文本拖动到最后几行,删除多余的东西(千万别试图用默认的文本编辑器打开,内存小的话你会死的很惨):

    3.打开Access(为什么不直接到SQL里面导入数据呢?因为会出现文本格式错误,所以先曲线救国吧):

    4.选择刚才解压出来的文本文件:

    5.按下面操作,不做提示的直接下一步:



    7.打开MS
    SQL2005,新建一个数据库,名字自己定,以下代码都使用[BasName]代替你新建数据库名称。
    8.继续如下操作:


    完成执行下面的存储过程:

    -- 建立IP转换到十进制方法
    USE [BasName]
    GO
    /****** 对象:  UserDefinedFunction
    [dbo].[X16ToDe]    脚本日期: 09/19/2007 13:56:15 ******/
    SET ANSI_NULLS
    ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    --
    =============================================
    -- Author:       
    <Author,,Name>
    -- Create date: <Create Date, ,>
    --
    Description:    转换IP为十进制
    --
    =============================================
    Create FUNCTION
    [dbo].[X16ToDe]
    (
    @Old_IP nvarchar(15)
    )
    RETURNS
    numeric
    AS
    BEGIN
    DECLARE
    @CharIndex INT,
    @CurrPoint
    INT,
    @SingleValue NVARCHAR(5),
    @Cache numeric
    SET @CharIndex = 1
    SET
    @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
    SET @SingleValue =
    SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
    SET @Cache =
    cast(@SingleValue as numeric)*16777216
    SET @CharIndex = @CurrPoint + 1
    SET
    @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
    SET @SingleValue =
    SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
    SET @Cache = @Cache +
    cast(@SingleValue as numeric)*65536
    SET @CharIndex = @CurrPoint + 1
    SET
    @CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
    SET @SingleValue =
    SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
    SET @Cache = @Cache +
    cast(@SingleValue as numeric)*256
    SET @CharIndex = @CurrPoint + 1
    SET
    @SingleValue = SUBSTRING(@Old_IP,@CharIndex,len(@Old_IP)- @CharIndex + 1)
    SET
    @Cache = @Cache + cast(@SingleValue as numeric)
    RETURN @Cache;
    END

    这一步你可以自己按照你的情况来做,我是为了加快数据库索引的速度,所以将IP全部转换为十进制,存到一个新表里面。

    -- 建立十进制新表
    USE [BasName]
    GO
    /****** 对象:  Table [dbo].[IP_Real]   
    脚本日期: 09/19/2007 14:01:31 ******/
    SET ANSI_NULLS ON
    GO
    SET
    QUOTED_IDENTIFIER ON
    GO
    Create TABLE [dbo].[IP_Real](
    [startip]
    [numeric](18, 0) NULL,
    [endip] [numeric](18, 0) NULL,
    [country]
    [nvarchar](50) NULL,
    [local] [nvarchar](200) NULL
    ) ON [PRIMARY]

    -- 格式化省份
    Update [BasName].[dbo].[IP]
    SET [country] =
    replace([country],N'省',N'省 ')
    -- 删除CZ88.NET
    Update
    [BasName].[dbo].[IP]
    SET [country] = replace([country],N'CZ88.NET',N'')
    --
    将地区提出
    Update [BasName].[dbo].[IP]
    SET [local] =
    SUBSTRING([country],CHARINDEX(' ',[country],1)+1,len([country]))
    --
    存为国家或省份
    Update [BasName].[dbo].[IP]
    SET [country] =
    SUBSTRING([country],0,CHARINDEX(' ',[country],1))
    -- 去处前后导空格
    Update
    [BasName].[dbo].[IP]
    SET [country] = Rtrim(Ltrim([country]))
         
    ,[local] = Rtrim(Ltrim([local]))
    -- 转换IP为十进制,并写入新表
    Insert INTO
    [BasName].[dbo].[IP_Real]
               ([startip]
              
    ,[endip]
               ,[country]
               ,[local])
    Select
    dbo.X16ToDe([startip])
          ,dbo.X16ToDe([endip])
         
    ,[country]
          ,[local]
    FROM [BasName].[dbo].[IP]
    order by [startip]
    ASC

    最后测试一下看看:

    -- 测试
    DECLARE @IPNumber numeric
    set @IPNumber =
    dbo.X16ToDe('219.140.31.91')
    Select [startip]
          ,[endip]
         
    ,[country]
          ,[local]
    FROM [BasName].[dbo].[IP_Real]
    Where
    [startip] <= @IPNumber and [endip] >= @IPNumber


    注:X16ToDe 转换方法是可以使用的, 但是切割方式不推荐使用 ,纯真版本的很多数据没有规律性
  • 相关阅读:
    BCrypt 加密实现
    Java AES512加密算法
    二、 Mosquitto 使用说明
    一、Mosquitto 介绍&安装
    ConcurrentHashMap源码分析(JDK8版本<转载>)
    详解设计模式六大原则(转载)
    Java 单例模式详解(转)
    一致性哈希算法(consistent hashing)(转载)
    Java并发之AQS详解(转)
    数据库(第一范式,第二范式,第三范式)(转)
  • 原文地址:https://www.cnblogs.com/hejunrex/p/2266055.html
Copyright © 2011-2022 走看看