标签:int 使用 code 工作 front hello string integer 方法
问题简介:在工作中,表字段多到一定程度,Select 中的字段和结果集中的字段对比很麻烦,还容易出错。于是写了一个检查Select和Insert的方法。(使用的是Scala语言)
1.先判断语句是select语句还是insert语句
def sqlTest(str: String): Unit = {
//检测是select语句还是insert语句
if ( str.contains("select") ) {
selectTest(str)
} else {
insertTest(str)
}
}
2.如果是select语句,使用如下方法
def selectTest(selectStr: String): Unit = {
var selectLists: List[String] = List()
//1.将select与from中的字段,放入链表中
selectLists = selectStr.substring(selectStr.indexOf("select") + 6, selectStr.indexOf("from")).replace("\r\n", "").trim.split(",").toList
//2.获取第一个rs.get中所有的值
var rsLists: List[String] = List()
rsLists = nextElement(selectStr, rsLists)
//3.判断select语句和结果集获取的值中的参数是否重复
if ( selectLists.distinct.size != selectLists.size ) {
println("查询语句有重复值")
}
if ( rsLists.distinct.size != rsLists.size ) {
println("设置的结果集有重复值")
}
//4.比较select语句和结果集获取的值中的参数是否相等
val selectSurplus = selectLists.toSet -- rsLists.toSet
val rsSurplus = rsLists.toSet -- selectLists.toSet
if ( selectSurplus.nonEmpty ) {
println("select语句中多结果集多的字段有" + selectSurplus)
}
if ( rsSurplus.nonEmpty ) {
println("结果集语句中比select多的字段有" + rsSurplus)
}
}
@tailrec
def nextElement(string: String, list: List[String]): List[String] = {
val rightIndex = string.indexOf("\")")
val leftIndex = string.indexOf("(\"") + 2
val lists = list.::(string.substring(leftIndex, rightIndex))
val subString = string.substring(rightIndex + 2)
if ( string.lastIndexOf("\")").hashCode() == rightIndex.hashCode() ) {
lists
} else {
nextElement(subString, lists)
}
}
3.如果是insert语句,使用如下方法
def insertTest(insertStr: String): Unit = {
//1.获取insert和values之间的字符串,计算‘,‘的个数
val insertSubFront = insertStr.substring(insertStr.indexOf("insert"), insertStr.indexOf("values"))
val insertSubFrontNums = countNumbers(insertSubFront)
//2.获取values之后的字符串,计算‘,‘的个数
val insertSubBack = insertStr.substring(insertStr.indexOf("values"))
val insertSubBackNums = countNumbers(insertSubBack)
//3.判断两个字符串中的‘,‘数量差值
val delNums = insertSubFrontNums - insertSubBackNums
if ( delNums < 0 ) {
println(s"values 的括号中多了[$delNums]个数据")
} else if ( delNums > 0 ) {
println(s"values 的括号中缺少[$delNums]个数据")
} else {
println("INSERT语句中字段都有值对应")
}
}
private def countNumbers(strs: String): Integer = {
//计算包含‘,‘字符的数量
var count: Integer = 0
strs.foreach {
str =>
if ( str == ‘,‘ ) {
count = count + 1
}
}
count
}
4.使用的时候直接调用sqlTest方法,放入对应的SQL就成。
//此变量为测试使用,不一定按照此格式使用
val selectStr =
"""
|select
|name,
|password,
|hello2
|from
|aa
|rs.getString("name")
|rs.getString("password")
|rs.getString("hello")
""".stripMargin
//此变量为测试使用,不一定按照此格式使用
val insertStr =
"""
|insert
|into
|(name,
|password,
|hello2)
| values
|(?,?,?)
""".stripMargin
标签:int 使用 code 工作 front hello string integer 方法
原文地址:https://www.cnblogs.com/orchid9/p/10022931.html