逆变协变、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()
}
}