scala将csv转换成insert语句

来源:互联网 发布:淘宝优化具体怎么设置 编辑:程序博客网 时间:2024/05/17 20:28

工作中自己写的一个简单的scala小工具类,主要对字符类型的字段在拼装SQL时加引号,null值在csv文件力的几种形式。

如果数据量比较小,可以直接insert进去的库,又不方便直接导入文件的(比如某环境某库某服务被某破人禁用,库还出问题了,只能通过其他途径insert进去QAQ)就有用了。

用scala写的,其他语言都差不多啦。

package csvInsertSQLServer.service
import java.io.FileWriterimport scala.io.Source/** * 通过CSV文件,及其预处理的字段类型字符串,输出insert语句 * Luojie at 2017-03-08 */class csv2InsertSQLServer { /** * @param CLASS_PATH 输入/输出路径 * @param inFilename 输入文件名 * @param tableName 表名 * @param headType 表字段的类型,以竖线(|)分割 */ def mkSQL(CLASS_PATH: String, inFilename: String, tableName: String, headType: String): Unit = { //输入/输出文件 val IN_FILE_NAME = CLASS_PATH + "\\inData\\" + inFilename val OUT_FILE_NAME = CLASS_PATH + "\\outData\\" + inFilename //SQL字符串 val inSqlString: StringBuilder = new StringBuilder //读取文件(CSV) val sourceFile = Source.fromFile(IN_FILE_NAME, "utf-8") //解析字段类型 val headTypeList: Array[String] = headType.split("\\|") //拼装SQL inSqlString.append("insert into " + tableName + " values ") for (line <- sourceFile.getLines) { inSqlString.append("(") val lineList: Array[String] = line.split(",") val len = lineList.length for (i <- 0 to len - 1) { //null值处理 if (lineList(i) == "\\N"||lineList(i) == "Null"||lineList(i) == "\\NuN") inSqlString.append("null,") //字符类型的字段拼装时候加引号 else if (headTypeList(i).contains("varchar")||headTypeList(i).contains("string")) inSqlString.append("\"" + lineList(i) + "\",") else inSqlString.append(lineList(i) + ",") } inSqlString.deleteCharAt(inSqlString.length-1) inSqlString.append("),\n") } val outFileWriter = new FileWriter(OUT_FILE_NAME) outFileWriter.write(inSqlString.deleteCharAt(inSqlString.length-1).toString() + "\n") println(inSqlString.deleteCharAt(inSqlString.length-1)) outFileWriter.close() sourceFile.close() }}

调用:

package csvInsertSQLServerimport csvInsertSQLServer.service.csv2InsertSQLServer/**  * Created by luojie on 2017/3/8.  */object c2Server {  val CLASS_PATH = getClass.getResource("").getPath  def main(args: Array[String]): Unit = {    val inString = "2222.txt"    val tableName = "dm_plan_pre_point_d"   // val headType = "varchar(200)|int(11)|varchar(200)|varchar(200)|int(11)|int(11)|bigint(20)|varchar(200)|decimal(20,8)|decimal(20,8)|varchar(200)|varchar(200)|int(11)|varchar(200)|varchar(200)|varchar(200)|decimal(20,8)|decimal(20,8)|varchar(200)|varchar(200)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|varchar(200)|int(11)|int(11)|varchar(200)|bigint(20)|varchar(200)|varchar(200)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|decimal(20,8)|varchar(200)|varchar(200)|varchar(200)|varchar(200)|varchar(200)|int(11)|int(11)|int(11)|double|int(11)|int(11)|varchar(200)|"    val headType = "varchar|int|int|int|varchar|varchar|int|int|int|double|double|int|varchar|int|int|double|double|double|double|int"    val c2s = new csv2InsertSQLServer    c2s.mkSQL(CLASS_PATH, inString, tableName, headType)  }}

1 0
原创粉丝点击