java提取数据库表字段信息的工具类精品资料.docx
分享一个java提取数据库表字段信息的工具类 在java开发过程中,如果没有使用hibernate这样的框架,要想快速提取一个数据表的所有字段(尤其是对于一个比较多字段的表)这是个痛苦的事情。在网上找到一些关于提取数据表字段的介绍文章,然后结合自己的需求写了以下一个工具类。 /* * 带有Java类型定义的 * param tbn * param splitChar * return * throws SQLException */ public String getColumnWithJavaClass(String tbn,String splitChar) throws SQLException Iterator> its = getTableColumns(tbn).entrySet().iterator(); StringBuffer sb=new StringBuffer(); while(its.hasNext() Entry it = its.next(); sb.append("public "); sb.append(it.getValue(); sb.append(" "+it.getKey()+""); if(its.hasNext() sb.append(splitChar); return sb.toString(); /* * 只有字段名信息 * param tbn * param splitChar * return * throws SQLException */ public String getColumnNames(String tbn,String splitChar) throws SQLException Iterator> its = getTableColumns(tbn).entrySet().iterator(); StringBuffer sb=new StringBuffer(); while(its.hasNext() sb.append(its.next().getKey(); if(its.hasNext() sb.append(splitChar); return sb.toString(); /* * * param tbn * return * throws SQLException */ public LinkedHashMap getTableColumns(String tbn) throws SQLException LinkedHashMap cous = new LinkedHashMap(); ResultSetMetaData mds = con.createStatement().executeQuery("select * from "+tbn+" limit 0,1").getMetaData(); int t = mds.getColumnCount(); for(int i=0;i cous.put(mds.getColumnName(i+1), mds.getColumnClassName(i+1); return cous; public java.lang.Long id;public java.lang.String hash;public java.lang.Long size;public java.lang.Long parent;public java.lang.String txtname;public java.lang.String url;public java.lang.Integer sortid;附加学习:HashMap是按照HashCode 排序,莫名其妙的顺序。 TreeMap是按照自身的顺序排序,比如数字的话,按照数字升序,ascII等。 LinkedHashMap是按照先进先出的顺序。本文关键词:java 数据库 工具类 mapimport java.util.ArrayList;import java.util.regex.*;public class Test1 public static void main(String args) Pattern p =Ppile("w+(?=')|w+(?=.)"); /list用于装匹配的 b c e 装完后用list.toArray转换为数组就行了 ArrayList list = new ArrayList(); String num="select * from a where owner='b' and password='c' select * from e.f;" Matcher m = p.matcher(num); while(m.find() System.out.println(m.group(); list.add(m.group(); 目前更新的:/import java.util.ArrayList;/import java.util.List;import java.util.regex.*;import java.io.*;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class logxi private static final Logger logger = LoggerFactory.getLogger(logxi.class);public static void main(String args)String line; String filePath = "D:/log/log.log" / List<String> list = new ArrayList<String>(); try FileInputStream is = new FileInputStream(filePath); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); try while (line = br.readLine() != null) / if (line.equals("") / continue; / else / list.add(line); Pattern p1 = Ppile("/d1,3/./d1,3/./d1,3/./d1,3"); /IP modelPattern p2 = Ppile("d4-01-9|11-2-01-9|1-2d|30-1 0-20-4:0-6d:0-6d$"); /Time modelPattern p3 = Ppile("0-9") ; /PID modelMatcher m1 = p1.matcher(line);Matcher m2 = p2.matcher(line);Matcher m3 = p3.matcher(line); if (m1.find()logger.info("IP model is find.The number of matching group of IP model is:"+ m1.groupCount();for ( int i=1; i<=m1.groupCount(); i+) logger.info("This is the i match.The content of i substring is: "+ m1.group(i); elseSystem.out.println("There is no IP matching pattern"); if (m2.find()logger.info("Time model is find.The number of matching group of time model is:"+ m2.groupCount();for ( int j=0; j<=m2.groupCount(); j+)logger.info("This is the j match.The content of j substring is: " + m2.group(j); elseSystem.out.println("There is no Time matching pattern"); if (m3.find()logger.info("PID model is find.The number of matching group of PID model is:"+ m3.groupCount();for ( int k=1; k<=m3.groupCount();k+)logger.info("This is the k match.The content of k substring is: " + m3.group(k); else System.out.println("There is no PID matching pattern"); catch (IOException e) e.printStackTrace(); logger.error("A line of data is error"); catch (FileNotFoundException e) e.printStackTrace(); logger.error("FileNotFoundException"); IP地址:import org.apache.log4j.Logger;import org.apache.log4j.NDC;public class TestNDC static Logger log = Logger.getLogger(TestNDC.class.getName();public static void main(String args) log.info("Make sure %x is in your layout pattern!");NDC.get();String ips = "192.168.0.10","192.168.0.27"for (int i = 0; i<ips.length ; i+)NDC.push(ipsi);log.info("A NEW client connected, who's ip should appear in this log message.");NDC.pop();NDC.remove();log.info("Finished.");Java基础:常用的匹配正则表达式和实例匹配中文字符的正则表达式: u4e00-u9fa5 匹配双字节字符(包括汉字在内):x00-xff 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function()return this.replace(x00-xff/g,"aa").length; 匹配空行的正则表达式:ns| *r 匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/ 匹配首尾空格的正则表达式:(s*)|(s*$) 应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下: String.prototype.trim = function()return this.replace(/(s*)|(s*$)/g, "");利用正则表达式分解和转换IP地址: 下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序: function IP2V(ip)re=/(d ).(d ).(d ).(d )/g /匹配IP地址的正则表达式if(re.test(ip)return RegExp.$1*Math.pow(255,3) RegExp.$2*Math.pow(255,2) RegExp.$3*255 RegExp.$4*1elsethrow new Error("Not a valid IP address!")不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下: var ip="10.100.20.168"ip=ip.split(".")alert("IP值是:" (ip0*255*255*255 ip1*255*255 ip2*255 ip3*1)匹配Email地址的正则表达式:w (- .w )*w (-.w )*.w (-.w )* 匹配网址URL的正则表达式:http:/(w- .) w- (/w- ./?%&=*)? 利用正则表达式去除字串中重复的字符的算法程序: var s="abacabefgeeii"var s1=s.replace(/(.).*1/g,"$1")var re=new RegExp("" s1 "","g")var s2=s.replace(re,"") alert(s1 s2) /结果为:abcefgi这是表达式实现去除重复字符的方法最简单的实现方法。 思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。 得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1 s="s=s.replace(/(.*/)0,(. ).*/ig,"$2")alert(s)利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中文:onkeyup="value=value.replace(/u4E00-u9FA5/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/u4E00-u9FA5/g,'')" 用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/uFF00-uFFFF/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/uFF00-uFFFF/g,'')" 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/d/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/d/g,'')" 正则表达式(信息验证)2011-08-08 10:44在js中做信息验证经常会用到正则表达式,初次接触正则表达式会很头疼。在说说正则之前,我们先看下一个字符串的方法indexOf();indexOf()返回字符串内第一次出现 子字符串 的位置。用法:strObj.indexOf(subString, startIndex) /strObj,必选,被查找的字符串。subString,必选,要查找的子字符串。startIndex,可选,查找的起始位置。为空时默认从0开始查找。indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回 -1。<!DOCTYPE html><html><head><metacharset="utf-8"/><title>test</title></head><body><div id="test"> </div></body><script type="text/javascript">varstr ="Hello Word!"varstr1=" Hello Word!"document.write(str.indexOf("Hello") + "");document.write(str1.indexOf("Hello") + "");document.write(str.indexOf("word") + "");document.write(str.indexOf("Word") + "");</script></html>indexOf就是最基本的数据验证了,通过判断返回值,我们可以找到某一个字符串里是不是有某一个子字符串了。但是为了查找或者验证字符串是否符合某一复杂的特定规则,我们会用到正则表达式。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。比如我要验证在是不是邮箱格式,是不是手机号码等等。在正则中,我们用一系列的元字符来表示特定的含义:比如: 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性, 也匹配 'n' 或 'r' 之后的位置。* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于0,。. 匹配除 "n" 之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用象 '.n' 的模式。d 匹配一个数字字符。等价于 0-9。D 匹配一个非数字字符。等价于 0-9。b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。B 匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。a-z 字符范围。匹配指定范围内的任意字符。例如,'a-z' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。a-z 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'a-z' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。例如:假如你要找的是hi后面不远处跟着一个Lucy,你应该用bhib.*bLucyb。使用正则表达式验证信息的方法也有很多种,stringObj.match(rgExp)其中stringObj是必选项。对其进行查找的 String 对象或字符串文字。rgExp是必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。如果js中match函数方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。<!DOCTYPE html><html><head><meta charset="utf-8"/><title>test</title></head><body><input type="button"value="test"onclick="MatchDemo()"/></body><script type="text/javascript">functionMatchDemo()varr, re;/ 声明变量。vars ="The rain in Spain falls mainly in the plain"re = /ainaa/i;/ 创建正则表达式模式。r = s.match(re);/ 尝试匹配搜索字符串。alert(r);/ 返回第一次出现 "ain" 的地方。</script></html>除了match()方法,还常用以下几种方式做信息验证。 search()方法,不匹配时返回-1reExp.test(string)方法,返回布尔型值rgExp.exec(string)方法,不匹配时返回null如:验证邮箱格式是否合法<!DOCTYPE html><html><head><meta charset="utf-8"/><title>test</title><style type="text/css">spanfloatfloat:left;color:black;font-size:14px;margin-top:5px;#email#emailfloat:left;height:20px;#color#colorfloat:left;width:10px;height:10px;border:1px solid #ccc;margin-top:5px;.sp1background-color:green;.sp2background-color:red;</style></head><body><form method="post"action=""> <span>email</span><input id="email"type="test"value=""name="email"onblur="isEmail('email')"/><em id="color"> </em></form><script language="javascript"> functionisEmail(email) varstrEmail=document.getElementById(email).value; varcolor=document.getElementById("color"); if(strEmail.search(/w+(-w+)|(.w+)*A-Za-z0-9+(.|-)A-Za-z0-9+)*.A-Za-z0-9+$/) !=-1) color.className="sp1" return true; else color.className="sp2" document.getElementById(email).value="" document.getElementById(email).focus(); return false; </script></body></html>最后一定要提一下的是html5新增的form api,减少了大量的验证工作,并且还有很多其他的新颖功能,之前我写过相关文章,建议大家看下html5 input新增类型。html5 input新增属性 匹配IP字串、域名的正则表达式【 来源:网络 作者:佚名 更新时间:2008-04-21 | 字体:大 中 小】导读1。IP IP字串,由四段组成,每一段是0255的数字,段与段之间用小数点隔开,比如61.139.2.69就是一个合法的IP字串。如果正则表达式写成d1,3(.d1,3)3无疑是不负责的,因为它可以匹配300.400.555.666这样的非法.分享到: QQ空间 新浪微博 腾讯微博 人人网 开心网 百度搜藏 1。IPIP字串,由四段组成,每一段是0255的数字,段与段之间用小数点隔开,比如61.139.2.69就是一个合法的IP字串。如果正则表达式写成d1,3(.d1,3)3无疑是不负责的,因为它可以匹配300.400.555.666这样的非法IP字串。要匹配一个0255之间的数,有几种匹配方式,下面是其中一种:匹配正则表达式说明09d单个数字10991-9d两位数1001991dd百位为1的三位数20024920-4d三位数,百位是2,十位是09250255250-5三位数,百位是2,十位是5,个位是05写成正则表达式,即:(d|(1-9d)|(1dd)|(20-4d)|(250-5),但是这样的正则表达式在匹配254这样的字串时,会分别匹配2、5、4,得到3个匹配,达不到预期效果,正确做法是将次序颠倒为(250-5)|(20-4d)|(1dd)|(1-9d)|d),因为在(xxx|yyy)这种匹配行为中,是从左向右搜索的。完整的正则表达式是:(250-5)|(20-4d)|(1dd)|(1-9d)|d)(.(250-5)|(20-4d)|(1dd)|(1-9d)|d)32。 域名一个完整的域名,由根域、顶级域、二级、三级域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过63。很显然,单独的名字可以由正则表达式a-zA-Z0-9-a-zA-Z0-90,62来匹配,而完整的域名至少包括两个名字(比如,由google和com构成),最后可以有一个表示根域的点(在规范中,最后有一个点的才是完整域名,但一般认为包括两个以上名字的域名也是完整域名,哪怕它后面没有点)。匹配完整域名的正则表达式:a-zA-Z0-9-a-zA-Z0-90,62(.a-zA-Z0-9-a-zA-Z0-90,62)+.?常用的匹配正则表达式和实例 作者:tot 提供时间: 2004-11-04文档类型:原创来自:蓝色理想 匹配中文字符的正则表达式: u4e00-u9fa5匹配双字节字符(包括汉字在内):x00-xff应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function()return this.replace(x00-xff/g,"aa").length;匹配空行的正则表达式:ns| *r匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/ 匹配首尾空格的正则表达式:(s*)|(s*$)应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:String.prototype.trim = function()return this.replace(/(s*)|(s*$)/g, "");利用正则表达式分解和转换IP地址:下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:function IP2V(ip)re=/(d+).(d+).(d+).(d+)/g /匹配IP地址的正则表达式if(re.test(ip)return RegExp.$1*Math.pow(255,3)+RegExp.$2*Math.pow(255,2)+RegExp.$3*255+RegExp.$4*1elsethrow new Error("Not a valid IP address!")不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:var ip="10.100.20.168"ip=ip.split(".")alert("IP值是:"+(ip0*255*255*255+ip1*255*255+ip2*255+ip3*1)匹配Email地址的正则表达式:w+(-+.w+)*w+(-.w+)*.w+(-.w+)*匹配网址URL的正则表达式:http:/(w-+.)+w-+(/w- ./?%&=*)?利用正则表达式去除字串中重复的字符的算法程序:注:此程序不正确,原因见本贴回复var s="abacabefgeeii"var s1=s.replace(/(.).*1/g,"$1")var re=new RegExp(""+s1+"","g")var s2=s.replace(re,"") alert(s1+s2) /结果为:abcefgi我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1s="s=s.replace(/(.*/)0,(.+).*/ig,"$2")alert(s)利用正则表达式限制网页表单里的文本框输入内容:用正则表达式限制只能输入中文:onkeyup="value=value.replace(/u4E00-u9FA5/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/u4E00-u9FA5/g,'')"用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/uFF00-uFFFF/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/uFF00-uFFFF/g,'')"用正则表达式限制只能输入数字:onkeyup="value=value.replace(/d/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/d/g,'')"用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/W/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/d/g,'')" 深入浅出之正则表达式 前言:半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现,结果就有了这篇文章。关于本文的名字,使用“深入浅出”似乎已经太俗。但是通读原文以后,觉得只有用“深入浅出”才能准确的表达出该教程给我的感受,所以也就不能免俗了。本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载。但是为了尊重原作者和译者的劳动,请注明出处!谢谢! 1.什么是正则表达式基本说来,正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express。本文将用<<regex>>来表示一段具体的正则表达式。一段文本就是最基本的模式,简单的匹配相同的文本。 2.不同的正则表达式引擎正则表达式引擎是一种可以处理正则表达式的软件。通常,引擎是更大的应用程序的一部分。在软件世界,不同的正则表达式并不互相兼容。本教程会集中讨论Perl 5 类型的引擎,因为这种引擎是应用最广泛的引擎。同时我们也会提到一些和其他引擎的区别。许多近代的引擎都很类似,