spark中的scalikejdbc的使用

加载配置文件内容的自定义的类,如下所示:

import com.typesafe.config.{Config, ConfigFactory}

object ConfigHelp {
  //加载配置文件
  private val config: Config = ConfigFactory.load()
  //加载jdbc的配置
  val url: String= config.getString("db.default.url")
  val driver: String = config.getString("db.default.driver")
  val user: String = config.getString("db.default.user")
  val password: String = config.getString("db.default.password")



}

配置文件application.conf内容如下所示:

#配置jdbc连接
db.default.url="jdbc:mysql://localhost:3306/baobiao?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8"
db.default.driver="com.mysql.jdbc.Driver"
db.default.user="root"
db.default.password="123456"

需要导入的依赖jar包:

<!--dataframe使用scalikejdbc将数据传入数据库中-->
        <dependency>
            <groupId>org.scalikejdbc</groupId>
            <artifactId>scalikejdbc_2.11</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!--使用scalikejdbc写配置时需要的依赖-->
        <dependency>
            <groupId>org.scalikejdbc</groupId>
            <artifactId>scalikejdbc-config_2.11</artifactId>
            <version>3.1.0</version>
        </dependency>

使用代码如下所示:里面做了详细的解释

import scalikejdbc.config.DBs

//测试scalikejdbc的使用
object ScalikeJDBC {
  def main(args: Array[String]): Unit = {
    //配置文件中,key必须要求是:
    /*
    # JDBC settings
    db.default.driver=""
    db.default.url=""
    db.default.user=""
    db.default.password=""
    */
    //插入数据
    //加载配置文件中的jdbc,要求表必须是存在的
    //因为在spark中要求配置文件的名字必须是application.conf,
    //这句话会首先去找application.conf,然后再找:db.default识别符
    DBs.setup()
    //autoCommit表示自动提交,以前用jdbc时还需要手动commit,在这里有自动commit的方法
    //implicit表示导入隐式参数,参数名随便起
    DB.autoCommit{implicit sess=>
      SQL("insert into scalike values(?,?,?,?)")
        .bind(1,"jack",17,"nv") //按照顺序给占位符赋值即可
        .update()//执行SQL语句
        .apply()//这个方法也需要参数,是上面的定义的隐式采纳数sess传过来的

    }
    //删除数据
    DB.autoCommit{implicit sess=>
      SQL("delete from scalike where id = ?")
        .bind(4)
        .update()
        .apply()
    }
    //修改数据
    DB.autoCommit { implicit sess =>
      SQL("update scalike set name=? where id=?")
        .bind("aaa", 2)
        .update()
        .apply()

    }
    //查询方法不需要commit,写成autoCommit也不错
    val tuples: List[(String, Int)] = DB.readOnly { implicit sess =>
      //list()方法是展示数据
      //line.string()和line.int()里面是列名,代表获取的值的类型时string和int
      SQL("select * from scalike")
        .map(line => (
          line.string("name"),
          line.int("age")
        )).list().apply()

    }
    tuples.foreach(println(_))

    //事物控制
    DB.localTx{implicit sess=>
      for(i <- 0 to 10){
        if(i == 6) {
          return 1/0
        }
        //会在数据库中发现一条数据也没有插入
        SQL("insert into scalike values(?,?,?,?)")
          .bind(4,"bbb",34,"boy")
          .update()
          .apply()
      }

    }
  }
}

你可能感兴趣的:(大数据)