用scala连接数据库【用隐式类封装增删改查操作,用java对比】

9 篇文章 0 订阅

一、scala连接数据库

代码演示:

import java.sql.{Connection, DriverManager, ResultSet}

class MysqlDemo{

}

object MysqlDemo {
  private val driver = "com.mysql.jdbc.Driver"
  private val url = "jdbc:mysql://192.168.222.110:3306/test"
  private val userName = "root"
  private val userPwd = "ok"

  //连接数据库
  var connection:Connection=_
  def conn():Connection={
    Class.forName(driver)
    connection = DriverManager.getConnection(url,userName,userPwd)
    connection
  }

  //增加数据操作
  def insert():Unit={
    var insertSql = "insert into test.student(id,name,age) values(1,'zs',18)"
    val i = conn().createStatement().executeUpdate(insertSql)
    println("返回值为:"+i)
  }

  //查询数据操作
  def select():Unit={
    val selectSql="select * from test.student"
    val rs:ResultSet = conn().createStatement().executeQuery(selectSql)
    println("查看查询的数据")
    while(rs.next()){
      var id=rs.getInt("id")
      var name=rs.getString("name")
      var age=rs.getInt("age")
      println("学号:%d 姓名:%s 年龄:%d".format(id,name,age))
    }
  }

  //删除数据操作
  def deleteSql():Unit={
    val deleteSql="delete from test.student where id=1"
    val rs:Int=conn().createStatement().executeUpdate(deleteSql)
    println(rs)
    if(rs>0)
      println("删除成功")
    else
      println("删除失败")
  }

  def main(args: Array[String]): Unit = {
//    insert()
//    select()
    deleteSql()
    println(conn())
  }
}

二、java连接数据库对比scala连接数据库

代码演示:

import java.sql.*;

public class DataBase {
    public static Connection conn;
    public static Statement stmt;
//    public static ResultSet rs;
    public static void getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        //使用驱动管理器,获取连接
        String url="jdbc:mysql://localhost:3306/test";
        conn= DriverManager.getConnection(url,"root","19971105");
        //任务管理器管理sql语句
        stmt=conn.createStatement();
    }

    //插入数据
    public static void insert() throws SQLException {
        String sql="insert into student values(1,'zs',22)";
        int i=stmt.executeUpdate(sql);
        if(i>0){
            System.out.println("插入成功");
        }else{
            System.out.println("插入失败");
        }
    }

    //查询数据
    public static void sqlQuery() throws SQLException {
        String sql="select * from student where id=?";
        PreparedStatement querySql = conn.prepareStatement(sql);
        querySql.setInt(1,2);
        ResultSet resultSet = querySql.executeQuery();
        while(resultSet.next()){
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            int age=resultSet.getInt("age");
            System.out.println("学号:"+id+"姓名:"+name+"年龄:"+age);
        }
    }

    //删除数据
    public static void deleteSql() throws SQLException {
        String sql="delete from student where id=?";
        PreparedStatement deleteSql=conn.prepareStatement(sql);
        deleteSql.setInt(1,3);
        int result=deleteSql.executeUpdate();
        if(result>0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //获取连接
        getConnection();
        //插入方法
//        insert();
        //查询方法
//        sqlQuery();
        //删除方法
        deleteSql();
    }
}

三、用隐式类封装增删改查操作,创建对象时直接拥有增删改查操作

代码演示:
创建工具类:

import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet}


class MysqlUtil{

}
//object相当于java中的静态类,在编译执行前,就编译好了,所以隐式类放在object类中可以找到
object MysqlUtil {
  implicit class MySqlOP(obj:MysqlDemo){
    private val driver = "com.mysql.jdbc.Driver"
    private val url = "jdbc:mysql://192.168.222.110:3306/test"
    private val userName = "root"
    private val userPwd = "ok"

    var connection:Connection=_

    //防止sql注入的准备状态
    private val insertStmt: PreparedStatement
//    = conn().prepareStatement("insert into test.student(id,name,age) values(?,?,?)")
    =conn prepareStatement "insert into test.student(id,name,age) values(?,?,?)"

    //防止sql注入的准备状态
    private val selectSql:PreparedStatement
    =conn prepareStatement "select * frzom student where id=?"

    //连接数据库
    def conn():Connection={
      Class.forName(driver)
      connection = DriverManager.getConnection(url,userName,userPwd)
      connection
    }

    //增加数据
    def insert(id:Int,name:String,age:Int)={
      insertStmt.setInt(1,id)
      insertStmt.setString(2,name)
      insertStmt.setInt(3,age)
      val i:Int=insertStmt.executeUpdate()
      println(i)
    }

    //查询数据
    def selectMysql(id:Int)={
      selectSql.setInt(1,id)
      val  rs:ResultSet=selectSql.executeQuery()
      while(rs.next()){
        var id=rs.getInt("id")
        var name=rs.getString("name")
        var age=rs.getInt("age")
        println("学号:%d 姓名:%s 年龄:%d".format(id,name,age))
      }
    }
  }
}

用目标类创建实例对象,创建完之后该对象就会有增删改查方法了

class MysqlDemo{

}

object MysqlDemo {
  def main(args: Array[String]): Unit = {
  import  com.njzb728.MysqlUtil._
  var mysqlDemo =new MysqlDemo
  //增加数据
  mysqlDemo.insert(4,"hqj",30)
  //查询数据
  mysqlDemo.selectMysql(2)
  }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值