问题简介:在工作中,表字段多到一定程度,Select 中的字段和结果集中的字段对比很麻烦,还容易出错。于是写了一个检查Select和Insert的方法。(使用的是Scala语言)
1. 代码如下
import scala.annotation.tailrec /** * 校验SQL,现支持三种校验 * select 查询校验:select语句与结果集比对 * insert into select 查询插入校验:查询语句与插入语句 * insert into 插入校验:insert字段与values中的值数量 * */ object TestSQL extends App { //select语句测试sql val selectStr = """ |select |name, |password, |hello2, |hello2, |hello2 | from | testTables | |rs.getString("name") |rs.getString("password") |rs.getString("hello") |rs.getString("hello") """.stripMargin //insert测试语句 val insertStr = """ |Insert |into |testTable |(name, |password, |hello2,,,) | values |(,,,,,) """.stripMargin //insert into select测试语句 val insertAndSelectSql = s""" |insert |into |testTable |(name, |password, |password, |hello) | values |select |name, |password, |hello2, |hello2, |hello3 | from | testTable2 """.stripMargin //测试方法 sqlTest(insertAndSelectSql) /** * 判断字符串中关键字,匹配校验语句 * * @param str 待判断的字符串 */ def sqlTest(str: String): Unit = { //将字符串转换成小写 val strLower = str.toLowerCase judgeSQL(strLower) match { case (true, false) => selectTest(strLower) case (false, true) => insertTest(strLower) case (true, true) => insertAndSelectTest(strLower) case (_, _) => println("暂不支持该SQL")