java 验证字符串是不是为sql语句 并且是不是包含 select 关键字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 验证字符串是不是为sql语句 并且是不是包含 select 关键字相关的知识,希望对你有一定的参考价值。

java验证字符串是否为sql语句,是否包含select关键字,主要使用的是正则表达式来进行验证,如下:

import java.util.*;
import java.text.*;
class sqltest

 public static void main(String[] args)
  
  String span="select aaaa.id   name ,hello ,type t,h from datas aaaa,city b  where a.id=b.id and c like \'e%\'  and name is null ";
  span=span.toUpperCase();//测试用sql语句
  System.out.println(span);
  String column="(\\\\w+\\\\s*(\\\\w+\\\\s*)0,1)";//一列的正则表达式 匹配如 product p
  String columns=column+"(,\\\\s*"+column+")*"; //多列正则表达式 匹配如 product p,category c,warehouse w
  String ownerenable="((\\\\w+\\\\.)0,1\\\\w+\\\\s*(\\\\w+\\\\s*)0,1)";//一列的正则表达式 匹配如 a.product p
  String ownerenables=ownerenable+"(,\\\\s*"+ownerenable+")*";//多列正则表达式 匹配如 a.product p,a.category c,b.warehouse w
  String from="FROM\\\\s+"+columns;
  String condition="(\\\\w+\\\\.)0,1\\\\w+\\\\s*(=|LIKE|IS)\\\\s*\'?(\\\\w+\\\\.)0,1[\\\\w%]+\'?";//条件的正则表达式 匹配如 a=b 或 a is b..
  String conditions=condition+"(\\\\s+(AND|OR)\\\\s*"+condition+"\\\\s*)*";//多个条件 匹配如 a=b and c like \'r%\' or d is null 
  String where="(WHERE\\\\s+"+conditions+")0,1";
  String pattern="SELECT\\\\s+(\\\\*|"+ownerenables+"\\\\s+"+from+")\\\\s+"+where+"\\\\s*"; //匹配最终sql的正则表达式
  System.out.println(pattern);//输出正则表达式
  System.out.println(span.matches(pattern));//是否比配

 
 
参考技术A 查找select 关建字还好说。可以用正则找一下。
是否为SQL语句就不好说了。 我觉得最好的办法,就是连接上数据库执行一下,没有异常 就是,有异常,要么是SQL不正确,要么就是根本不是SQL。
如果自己写一个解析程序,不是很保险。
-----------------------------------------------------

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestT
public static void main(String[] args)
String str = " selEct xxx from dual;";

Matcher m = Pattern.compile("[selectSELECT]6").matcher(str);
while (m.find())
if (!"".equals(m.group()))
System.out.println(m.group());



本回答被提问者采纳
参考技术B 要验证字符串可以用正则表达式么
要么网页上的script
select要从数据库读取数据才用追问

想请教一下用javaScript 或 jquery 或 正则表达式 该怎么写?

追答

javaScript是表单验证 写好函数 通过on事件调用
正则表达式自己去看
无非就是构建一个函数
取得要验证的值
通过正则表达式判断
然后返回值

追问

这些都晓得,问题是正则表达式写不好!

SQL中怎么设置字段为10位数字。

现在有一个字段是10位数字,并且它与其它表的字段有主外键关系,请问它是什么类型的。

这个字段的类型与它是不是与其它表字段有主外键关系无关的,
方法一:楼主可以通过可视化工具来查看,例如pl/sql
方法二:楼主也可以通过jdbc来实现,ResultSetMetaData这个类里面提供了方法getColumnTypeName 来获得类型名称。
方法三:通过sql语句来实现
select T.DATA_TYPE 字段类型,T.Data_Length 字段长度 from user_Tab_Cols T
WHERE T.TABLE_NAME=UPPER('tb_bis_menu')
参考技术A bigint本回答被提问者采纳

以上是关于java 验证字符串是不是为sql语句 并且是不是包含 select 关键字的主要内容,如果未能解决你的问题,请参考以下文章

Java中如何拼接sql或者其他含有变量语句

验证文件是不是为 SQL 或验证其语法

我想验证一条 SQL 语句,然后返回它是不是有效? [复制]

SQL Server2008打开时遇到的问题:“请验证实例名称是不是正确并且SQL Server已配置为允许远程连接”。

Oracle SQL如何编写验证用户是不是在我的网络中的sql语句(即朋友或朋友的朋友)

请验证实例名称是不是正确并且 sql server 已配置为允许远程连接; 花了一下午也没解决,求大神