Scala(逆变协变、scala连接mysql数据库)

逆变协变、scala连接mysql数据库

一、逆变协变

+B是B的超集,叫协变

-A是A的子集,叫逆变

object ObjCovariantAndInversionDmo {

  class Animal {
    def eat(): Unit = {
      println("动物吃东西")
    }
  }

  class Cat extends Animal { // 猫科动物
    override def eat(): Unit = {
      println("猫科动物吃肉")
    }
  }

  class Tiger extends Cat { // 老鼠属于猫科动物
    override def eat(): Unit = {
      println("老虎吃人")
    }
  }

  class Invariant[T] {} //不变
  /* 逆变  协变
  Father Son
  Son son = new Son
  Father father = new Son

  Gongsi[T]
  Gongsi[Son] gs = new Gongsi[Son]      是成立的
  Gongsi[Father] gs = new Gongsi[Son]   是不成立的

  JiTuan[+T]
  Jituan[Father] jt = new Jituan[Son]
  * */
  // 定义协变
  class Covariant[+T] {}

  // 定义逆变
  class Inversion[-T] {}
  
  def main(args: Array[String]): Unit = {
    val tiger: Tiger = new Tiger
    val cat: Cat = new Tiger
    val animal = new Animal
    val cat1:Cat = funPt(tiger)
    cat1.eat()
    //不变
    val tigerObj: Invariant[Tiger] = new Invariant[Tiger]
    //协变
    val TigerObj1: Covariant[Tiger] = new Covariant[Tiger] //成立
    val TigerObj2: Covariant[Cat] = new Covariant[Tiger] //成立
    //逆变
    val TigerObj3: Inversion[Tiger] = new Inversion[Tiger] //成立
    val TigerObj4: Inversion[Tiger] = new Inversion[Cat] //成立


  }

  def funPt: PartialFunction[Cat, Cat] = {
    case x:Animal =>x
    case _ => new Tiger
  }
}

二、scala连接mysql数据库

Class.forName()有什么作用呢?
Class.forName() 方法要求JVM查找并加载指定的类到内存中,此时将"com.mysql.jdbc.Driver" 当做参数传入,就是告诉JVM,去"com.mysql.jdbc"这个路径下找Driver类,将其加载到内存中。

class MysqlDemo {

    private var driver = "com.mysql.jdbc.Driver"
    private var url = "jdbc:mysql://192.168.21.2:3306/tests"
    private var user = "root"
    private var passowrd = "ok"

    def this(driver: String, url: String, userName: String, pwd: String) {
      this()
      this.driver = driver
      this.url = url
      this.user = userName
      this.passowrd = pwd
    }

    var connection: Connection = _


    def conn(): Connection = {
      Class.forName(driver)
      connection = DriverManager.getConnection(url, user, passowrd)
      connection
    }

    def insert(): Unit = {
      var insertSql = "insert into student(id,name,age) values(2,'zs',21)"
      connection.createStatement().executeUpdate(insertSql)
    }


    def insert(id: Int, name: String, age: Int): Unit = {
      var insertSql = "insert into student(id,name,age) values(?,?,?)"
      val prep = conn.prepareStatement(insertSql)
      prep.setInt(1, id)
      prep.setString(2, name)
      prep.setInt(3, age)
      prep.executeUpdate()

    }

    def select() = {
      val sqlString = "select id,name,age from student"
      val rs: ResultSet = connection.createStatement.executeQuery(sqlString)

      while (rs.next()){
        val id = rs.getInt(1)
        val name = rs.getString(2)
        val age = rs.getInt(3)
        println("学号:%d 姓名 %s 年龄 %d".format(id, name, age))
      }
    }
}

object MysqlDemo {
    def apply(): MysqlDemo = new MysqlDemo()

    def apply(driver: String, url: String, userName: String, password: String): MysqlDemo = new MysqlDemo(driver, url, userName, password)

    def main(args: Array[String]): Unit = {
      val demo = MysqlDemo()
      val connection: Connection = demo.conn()
      println(connection)
  //     demo.insert()
      println(demo.insert(3, "yg", 23))
  //   demo.select()
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值