1. myEclipse中sql问题
我跟你当初的想法一样,自己做了一个sql生成工具,通过根据传入的参数 比如table 查询条件,查询列名等信息查询。。等一下我贴给你一部分,你参考一下,记得采纳哦
package javaUtil;
import java.lang.reflect.Field;
import java.util.ArrayList;
sql工具
public class SqlUtil {
//生成查询的sql语句,三个参数最后一个是通过下面那个工具方法生成的,前两个都是在action定义
public static String getSelectSql(String table,ArrayList<String> columns,ArrayList<String> condition){
//查询表中全部的信息columns==null||"".equals(columns) condition==null||"".equals(condition)
String sql="select ";
if(columns.size()==0){
sql+="* from "+table;
//根据给的condition查询表全部信息
}else{
//依照条件查询
for(int i=0;i<(columns.size());i++){
if(i!=(columns.size()-1)){
sql+=columns.get(i)+",";
}else{
sql+=columns.get(i)+" from "+table;
}
}
}
if(condition.size()==0){
sql+=" ";
}else{
sql+=" where ";
for(int i=0;i<(condition.size());i++){
if(i!=(condition.size()-1)){
sql+=condition.get(i)+ " and ";
}else{
sql+=condition.get(i);
}
}
}
return sql;
}
//获取一个对象中,所有属性的属性名字和值
//通过这些值转化成ArrayList<String>类型的数据,以便生成sql使用
public static ArrayList<String> setAllComponentsName(Object f) {
// 获取f对象对应类中的所有属性域
Field[] fields = f.getClass().getDeclaredFields();
ArrayList<String> condition=new ArrayList<String>();
for(int i = 0 , len = fields.length; i < len; i++) {
// 对于每个属性,获取属性名
String varName = fields[i].getName();
try {
// 获取原来的访问控制权限
boolean accessFlag = fields[i].isAccessible();
// 修改访问控制权限
fields[i].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o = fields[i].get(f);
//把条件中的null抛掉
if(o==null||"".equals(o)){
System.out.println("这个值为空不输出");
}else{
//把一个条件转化成sql语言存到condition中
condition.add(i, varName + "=" + o);
}
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return condition;
}
}
测试工具
package javaUtil;
import java.util.ArrayList;
public class TestSqlUtil {
/**
* 测试这个sql生成工具的main方法,模拟后台的action
* @param args
*/
public static void main(String[] args) {
//模拟,假设这两个数据时从页面接收到的
String id="1";
String name="2";
//建立工具的三个条件,如下是怎么设置的
String table="user";
ArrayList<String> columns=new ArrayList<String>();
ArrayList<String> a=new ArrayList<String>();;
//在action中定义查询那个列的数据
columns.add(0, "use");
columns.add(1, "id");
//在action中通过接受的数据设置条件查询的条件
//接受数据的类是自己建立,里面含有数据库全部表的列名
ConditionSqlUse condition =new ConditionSqlUse();
//设置传递数据的值。
condition.setId(id);
condition.setName(name);
//通过这个对象调用工具方法生成条件语句的list
a =SqlUtil.setAllComponentsName(condition);
//通过上面得出的几个条件生成sql语句
String sql=SqlUtil.getSelectSql(table, columns, a);
System.out.print(sql);
}
你自己研究一下,当初我也是研究了好久,这个代码是通过java来根据参数自动生成sql的工具
2. 如何在C#中用程序执行指定的SQL脚本文件,实现自动安装创建数据库
只在此山中,云深不知处.
3. mybatis怎么自动生成是sql语句
Mybatis-Generator这个工具就是拿来生成文件的,不过需要你设置一下连接的数据库以及表的路径。生成之后就可以用了,不过生成的都是基本的sql语句,如果想要复杂一些的还是需要自己来写的。不过一般来说,很多数据处理都是直接查出来在服务器处理,而不是用sql处理,因为有些时候你写的SQL语句问题很多
4. 敢不敢更懒,自己编写的mysql C++自动代码生成工具
实现目标: (1)简单的SQL增,删,改,查 代码生成。(C++代码结构) (2)自动编写MYSQL的连接池技术。 (3)同时生成数据库的SQL脚本(可以直接创建数据库表结构) (4)自动生成对应SQL语句的C++类结构和接口。供上层系统调用。 (5)自动生成可以自己检测的数据函数测试接口。 (6)自动生成数据库配置文件的相关创建,读写。 (7)代码支持自动融合,也就是说,已经编写的代码,在下次生成中,如果未发生变化,就不会被重写。
5. SQL注入哪些工具最有效
SQL Power Injector是一款在.Net 1.1中创建的应用程序,可帮助渗透测试人员在网页上查找和利用SQL注入。
特征
支持Windows,Unix和Linux操作系统
SQL Server,Oracle,MySQL,Sybase / Adaptive Server和DB2兼容
SSL支持
自动从网页上的表单或IFrame加载参数(GET或POST)
检测并浏览框架集
自动检测网站语言的选项
检测并添加加载页面进程期间使用的Cookie(Set-Cookie检测)
自动查找提交页面,其方法(GET或POST)以不同的颜色显示
可以直接在Datagrids中创建/修改/删除加载的字符串和Cookie参数
单个SQL注入
盲目的SQL注入
比较页面的真实和错误响应或cookie中的结果
时间延迟
SQL注入在自定义浏览器中的响应
可以使用HTML上下文颜色查看返回页面的HTML代码源并在其中搜索
微调参数和cookie注入
可以参数化预期结果的长度和计数以优化应用程序执行SQL注入所用的时间
创建/编辑预设的ASCII字符,以优化盲注SQL请求数/请求速度
多线程(最多可配置50个)
选项可以通过空的评论/ ** /针对IDS或过滤器检测来替换空间
在发送之前自动编码特殊字符
自动检测响应页面中的预定义SQL错误
在响应页面中自动检测预定义的单词或句子
实时结果
将会话保存并加载到XML文件中
自动查找正面答案和负面答案页面之间差异的功能
可以创建一个范围列表,它将替换隐藏的SQL注入字符串中的变量(>)并自动为您播放它们
使用文本文件中的预定义列表自动重播变量范围
Firefox插件,它将启动SQL Power Injector以及当前网页的所有信息及其会话上下文(参数和cookie)
两个集成工具:Hex和Char编码器和MS SQL @options解释器
可以编辑Referer
可以选择一个用户代理(或者甚至在用户代理XML文件中创建一个)
可以使用设置窗口配置应用程序
支持可配置的代理
软件截图
地址:http://www.sqlpowerinjector.com/index.htm
ilo--,Reversing.org - sqlbftools
地址:https://packetstormsecurity.com/files/download/43795/sqlbftools-1.2.tar.gz
Bernardo Damele AG:sqlmap,自动SQL注入工具
介绍
sqlmap是一款开源渗透测试工具,可自动检测和利用SQL注入漏洞并接管数据库服务器。它具有强大的检测引擎,针对终极渗透测试人员的众多特性,以及从数据库指纹识别,从数据库获取数据,到访问底层文件系统以及在操作系统上执行命令的各种开关,带外连接。
特征
完全支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB,HSQLDB和Informix数据库管理系统。
完全支持六种SQL注入技术:基于布尔的盲,基于时间的盲,基于错误,基于UNION查询,堆栈查询和带外。
支持直接连接数据库而不通过SQL注入,通过提供DBMS凭证,IP地址,端口和数据库名称。
支持枚举用户,密码哈希,特权,角色,数据库,表和列。
自动识别密码哈希格式并支持使用基于字典的攻击对其进行破解。
支持完全转储数据库表,根据用户的选择提供一系列条目或特定列。用户也可以选择仅转储每列条目中的一系列字符。
支持搜索特定的数据库名称,跨所有数据库的特定表或所有数据库表的特定列。例如,这对于识别包含自定义应用程序凭证的表格非常有用,其中相关列的名称包含名称和传递等字符串。
当数据库软件是MySQL,PostgreSQL或Microsoft SQL Server时,支持从数据库服务器底层文件系统下载和上载任何文件。
当数据库软件是MySQL,PostgreSQL或Microsoft SQL Server时,支持执行任意命令并在数据库服务器底层操作系统上检索它们的标准输出。
支持在攻击者机器和数据库服务器底层操作系统之间建立带外状态TCP连接。该通道可以是交互式命令提示符,Meterpreter会话或图形用户界面(VNC)会话,可以根据用户的选择进行选择。
通过Metasploit的Meterpreter 命令支持数据库进程'用户权限升级
地址:http://sqlmap.org/
icesurfer:SQL Server接管工具 - sqlninja
介绍
喜欢从Microsoft SQL Server上的SQL注入到数据库上的完整GUI访问?采用一些新的SQL注入技巧,在注册表中添加几个远程镜头以禁用数据执行保护,混合一个自动生成调试脚本的小Perl,将所有这些放在一个带有Metasploit包装器的振动器中,只有sqlninja的攻击模块之一!
Sqlninja是一款旨在利用以Microsoft SQL Server作为后端的Web应用程序中的SQL注入漏洞的工具。
其主要目标是在易受攻击的数据库服务器上提供远程访问,即使在非常恶劣的环境中也是如此。渗透测试人员应该使用它来帮助和自动化发现SQL注入漏洞时接管数据库服务器的过程。
特征
完整的文档可以在tarball中找到,也可以在这里找到,但是这里列出了忍者的功能:
远程SQL Server的指纹(版本,执行查询的用户,用户权限,xp_cmdshell可用性,数据库身份验证模式)
数据提取,基于时间或通过DNS隧道
与Metasploit3集成,通过VNC服务器注入获得对远程数据库服务器的图形化访问,或者仅上传Meterpreter
通过vbscript或debug.exe仅上传可执行的HTTP请求(不需要FTP / TFTP)
直接和反向绑定,TCP和UDP
当没有可用于直接/反向外壳的TCP / UDP端口时,DNS隧道伪外壳,但数据库服务器可以解析外部主机名
ICMP隧道外壳,当没有TCP / UDP端口可用于直接/反向外壳,但数据库可以Ping您的盒子
蛮力的'sa'密码(2种口味:基于字典和增量)
如果找到'sa'密码,权限将升级到系统管理员组
创建自定义的xp_cmdshell,如果原始的已被删除
TCP / UDP端口可以从目标SQL Server扫描到攻击机器,以便找到目标网络防火墙允许的端口并将其用于反向shell
回避技术混淆了一些IDS / IPS / WAF
与churrasco.exe集成,通过令牌绑架将权限升级到w2k3上的SYSTEM
支持CVE-2010-0232,将sqlservr.exe的权限升级到SYSTEM
地址:https://sourceforge.net/projects/sqlninja/files/sqlninja/sqlninja-0.2.999-alpha1.tgz/download
6. SQL sever 2008图形操作后自动生成sql代码,怎么弄
你说的是跟踪系统的sql:
1.开始菜单->所有程序 ->Microsoft SQL Server 2008->性能工具->SQL Server Profiler;
2.开始菜单->所有程序 ->SQL Server Management Studio,菜单工具->SQL Server Profiler
7. 填入表名列名条件自动生成SQL语句的工具
ALTER proc [dbo].[proc_insert] (@tablename varchar(256),@where varchar(max))
as
begin
set nocount on
declare @sqlstr varchar(MAX)
declare @sqlstr1 varchar(MAX)
declare @sqlstr2 varchar(MAX)
select @sqlstr='select ''INSERT '+@tablename
select @sqlstr1=''
select @sqlstr2=' ('
select @sqlstr1= ' VALUES ( ''+'
select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case
-- when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
when a.xtype =36 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =127 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(20),'+a.name +')'+' end'
when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'
when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =61 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
when a.xtype =62 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
when a.xtype =56 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'
when a.xtype =60 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =59 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
when a.xtype =58 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
when a.xtype =52 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'
when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
when a.xtype =48 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'
-- when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
else '''NULL'''
end as col,a.colid,a.name
from syscolumns a
where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 -- and a.xtype <>36
AND COLUMNPROPERTY(a.id, a.name, 'IsIdentity') <> 1
)t order by colid
select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename + ' where '+@where
-- print @sqlstr
exec(@sqlstr)
set nocount off
end
8. 处理数据批量生成sql插入语句
处理数据批量生成sql插入语句
最近在做一个天气预报模块,首先需要将客户端公网ip转换成所在城市,然后将所在城市名转换成对应的城市代码,在网上找到了城市代码,但是需要处理一下,看了看,有三百多城市及对应的城市代码,想存到数据库。就想着做一个数据处理自动生成sql语句的工具,提高效率。
1 直辖市
2 "北京","上海","天津","重庆"
3 "101010100","101020100","101030100","101040100"
4
5 特别行政区
6 "香港","澳门"
7 "101320101","101330101"
8
9 黑龙江
10 "哈尔滨","齐齐哈尔","牡丹江","大庆","伊春","双鸭山","鹤岗","鸡西","佳木斯","七台河","黑河","绥化","大兴安岭"
11 "101050101","101050201","101050301","101050901","101050801","101051301","101051201","101051101","101050401","101051002","101050601","101050501","101050701"
12
13 吉林
14 "长春","延吉","吉林","白山","白城","四平","松原","辽源","大安","通化"
15 "101060101","101060301","101060201","101060901","101060601","101060401","101060801","101060701","101060603","101060501"
16
17 辽宁
18 "沈阳","大连","葫芦岛","盘锦","本溪","抚顺","铁岭","辽阳","营口","阜新","朝阳","锦州","丹东","鞍山"
19 "101070101","101070201","101071401","101071301","101070501","101070401","101071101","101071001","101070801","101070901","101071201","101070701","101070601","101070301"
20
21 内蒙古
22 "呼和浩特","呼伦贝尔","锡林浩特","包头","赤峰","海拉尔","乌海","鄂尔多斯","通辽"
23 "101080101","101081000","101080901","101080201","101080601","101081001","101080301","101080701","101080501"
24
25 河北
26 "石家庄","唐山","张家口","廊坊","邢台","邯郸","沧州","衡水","承德","保定","秦皇岛"
27 "101090101","101090501","101090301","101090601","101090901","101091001","101090701","101090801","101090402","101090201","101091101"
28
29 河南
30 "郑州","开封","洛阳","平顶山","焦作","鹤壁","新乡","安阳","濮阳","许昌","漯河","三门峡","南阳","商丘","信阳","周口","驻马店"
31 "101180101","101180801","101180901","101180501","101181101","101181201","101180301","101180201","101181301","101180401","101181501","101181701","101180701","101181001","101180601","101181401","101181601"
32
33 山东
34 "济南","青岛","淄博","威海","曲阜","临沂","烟台","枣庄","聊城","济宁","菏泽","泰安","日照","东营","德州","滨州","莱芜","潍坊"
35 "101120101","101120201","101120301","101121301","101120710","101120901","101120501","101121401","101121701","101120701","101121001","101120801","101121501","101121201","101120401","101121101","101121601","101120601"
36
37 山西
38 "太原","阳泉","晋城","晋中","临汾","运城","长治","朔州","忻州","大同","吕梁"
39 "101100101","101100301","101100601","101100401","101100701","101100801","101100501","101100901","101101001","101100201","101101101"
40
41 江苏
42 "南京","苏州","昆山","南通","太仓","吴县","徐州","宜兴","镇江","淮安","常熟","盐城","泰州","无锡","连云港","扬州","常州","宿迁"
43 "101190101","101190401","101190404","101190501","101190408","101190406","101190801","101190203","101190301","101190901","101190402","101190701","101191201","101190201","101191001","101190601","101191101","101191301"
44
45 安徽
46 "合肥","巢湖","蚌端口","安庆","六安","滁州","马鞍山","阜阳","宣城","铜陵","淮北","芜湖","毫州","宿州","淮南","池州"
47 "101220101","101221601","101220201","101220601","101221501","101221101","101220501","101220801","101221401","101221301","101221201","101220301","101220901","101220701","101220401","101221701"
48
49 陕西
50 "西安","韩城","安康","汉中","宝鸡","咸阳","榆林","渭南","商洛","铜川","延安"
51 "101110101","101110510","101110701","101110801","101110901","101110200","101110401","101110501","101110601","101111001","101110300"
52
53 宁夏
54 "银川","固原","中卫","石嘴山","吴忠"
55 "101170101","101170401","101170501","101170201","101170301"
56
57 甘肃
58 "兰州","白银","庆阳","酒泉","天水","武威","张掖","甘南","临夏","平凉","定西","金昌"
59 "101160101","101161301","101160401","101160801","101160901","101160501","101160701","101050204","101161101","101160301","101160201","101160601"
60
61 青海
62 "西宁","海北","海西","黄南","果洛","玉树","海东","海南"
63 "101150101","101150801","101150701","101150301","101150501","101150601","101150201","101150401"
64
65 湖北
66 "武汉","宜昌","黄冈","恩施","荆州","神农架","十堰","咸宁","襄阳","孝感","随州","黄石","荆门","鄂州"
67 "101200101","101200901","101200501","101201001","101200801","101201201","101201101","101200701","101200201","101200401","101201301","101200601","101201401","101200301"
68
69 湖南
70 "长沙","邵阳","常德","郴州","吉首","株洲","娄底","湘潭","益阳","永州","岳阳","衡阳","怀化","韶山","张家界"
71 "101250101","101250901","101250601","101250501","101251501","101250301","101250801","101250201","101250701","101251401","101251001","101250401","101251201","101250202","101251101"
72
73 浙江
74 "杭州","湖州","金华","宁波","丽水","绍兴","衢州","嘉兴","台州","舟山","温州"
75 "101210101","101210201","101210901","101210401","101210801","101210501","101211001","101210301","101210601","101211101","101210701"
76
77 江西
78 "南昌","萍乡","九江","上饶","抚州","吉安","鹰潭","宜春","新余","景德镇","赣州"
79 "101240101","101240901","101240201","101240301","101240401","101240601","101241101","101240501","101241001","101240801","101240701"
80
81 福建
82 "福州","厦门","龙岩","南平","宁德","莆田","泉州","三明","漳州"
83 "101230101","101230201","101230701","101230901","101230301","101230401","101230501","101230801","101230601"
84
85 贵州
86 "贵阳","安顺","赤水","遵义","铜仁","六盘水","毕节","凯里","都匀"
87 "101260101","101260301","101260208","101260201","101260601","101260801","101260701","101260501","101260401"
88
89 四川
90 "成都","泸州","内江","凉山","阿坝","巴中","广元","乐山","绵阳","德阳","攀枝花","雅安","宜宾","自贡","甘孜州","达州","资阳","广安","遂宁","眉山","南充"
91 "101270101","101271001","101271201","101271601","101271901","101270901","101272101","101271401","101270401","101272001","101270201","101271701","101271101","101270301","101271801","101270601","101271301","101270801","101270701","101271501","101270501"
92
93 广东
94 "广州","深圳","潮州","韶关","湛江","惠州","清远","东莞","江门","茂名","肇庆","汕尾","河源","揭阳","梅州","中山","德庆","阳江","云浮","珠海","汕头","佛山"
95 "101280101","101280601","101281501","101280201","101281001","101280301","101281301","101281601","101281101","101282001","101280901","101282101","101281201","101281901","101280401","101281701","101280905","101281801","101281401","101280701","101280501","101280800"
96
97 广西
98 "南宁","桂林","阳朔","柳州","梧州","玉林","桂平","贺州","钦州","贵港","防城港","百色","北海","河池","来宾","崇左"
99 "101300101","101300501","101300510","101300301","101300601","101300901","101300802","101300701","101301101","101300801","101301401","101301001","101301301","101301201","101300401","101300201"
100
101 云南
102 "昆明","保山","楚雄","德宏","红河","临沧","怒江","曲靖","思茅","文山","玉溪","昭通","丽江","大理"
103 "101290101","101290501","101290801","101291501","101290301","101291101","101291201","101290401","101290901","101290601","101290701","101291001","101291401","101290201"
104
105 海南
106 "海口","三亚","儋州","琼山","通什","文昌"
107 "101310101","101310201","101310205","101310102","101310222","101310212"
108
109 新疆
110 "乌鲁木齐","阿勒泰","阿克苏","昌吉","哈密","和田","喀什","克拉玛依","石河子","塔城","库尔勒","吐鲁番","伊宁"
111 "101130101","101131401","101130801","101130401","101131201","101131301","101130901","101130201","101130301","101131101","101130601","101130501","101131001"
112
113 西藏
114 "拉萨","阿里","昌都","那曲","日喀则","山南","林芝"
115 "101140101","101140701","101140501","101140601","101140201","101140301","101140401"
116
117 台湾
118 "台北","高雄"
119 "101340102","101340201"
城市代码
一看上去很乱的,而且对应关系是每个省城市一行,代码一行,分别用引号引起,用逗号分隔,每行间都没有符号分隔,省名没有用引号。首先是想着把省名去掉,因为每个城市名都是不相同的。想着每两行两行的去处理,但是也要费不少功夫,还容易出错。就想个索性一次性的全处理的算法。
ps:界面很简单,上面是输入数据,中间是转换,下面是输出数据。
后台主要代码:
[csharp] view plain
private void button1_Click(object sender, EventArgs e)
{
string data = textBox1.Text.Replace("r", "").Replace("n", "").Replace("t", "").Replace(" ", "").Replace(" ", "").Replace(" ", "");
MatchCollection matchsdata = matches(data, ""[sS]*?"");
string[,] temps = new string[matchsdata.Count / 2, 2];
int count0 = 0;
int count1 = 0;
string input = string.Empty;
foreach (Match m in matchsdata)
{
string tempdata = m.Value.Replace(""", "");
try
{
int tryp = int.Parse(tempdata);
temps[count1, 1] = tempdata;
count1++;
}
catch (Exception ex)
{
temps[count0, 0] = tempdata;
count0++;
}
}
for (int i = 0; i < (matchsdata.Count / 2); i++)
{
input += "insert into tbl_CityCode(c_city,c_code) values( + temps[i, 0] + , + temps[i, 1] + )rn";
}
textBox2.Text = input;
}
public static MatchCollection matches(string str, string exp)
{
return Regex.Matches(str, exp, RegexOptions.IgnoreCase);
}
首先是将输入的数据处理,去除换行符,空格什么的。然后你应该是会得到一行数据,然后通过正则表达式匹配出所有带引号的数据,你会发现需要的数据全部都是用引号引起来的,但是怎样区分城市名和城市代码呢,它们是混在一起的。不用担心,你发现了吗?城市名是字符串,城市代码是一串数字,我们只要将匹配出的数据数组遍历,每一行数据都去转换成int类型,这样城市名的行就会报错,在catch中捕捉,这一行就是城市名,没错的就是城市代码,把数据一次存到一个二维数组,对应的列中就行了。这样就会获得了相对应的城市名和城市代码。生成的sql语句要对应相应的数据库表。
表结构:
转换完了将生成的sql语句放到查询器中执行就ok了。共处理了349个城市。
最后不放心自己的算法,随机抽查了几条数据,没有错误。
<script type="text/javascript"><!-- google_ad_client = "ca-pub-1944176156128447"; /* cnblogs 首页横幅 */ google_ad_slot = "5419468456"; google_ad_width = 728; google_ad_height = 90; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
9. java如何根据实体类图生成sql脚本
自动生成C#和Java实体类,自动生连接符为“&”和“+”的INSERT,UPDATE,DELETE,SELECT语句,支持简单的数据查询修改。