当前位置: 首页 > news >正文

scala连接mysql数据库

scala中通常是通过JDBC组件来连接Mysql。JDBC, 全称为Java DataBase Connectivity standard。
在这里插入图片描述

加载依赖

其中包含 JDBC driver

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version>
</dependency>

1.1 spark组件直接连接(推荐)

通过spark.read直接连接,直接得到dataframe

val database = "test_db"
val table = "test_table"
val user = "hive"
val password  = "hive"
val url= "jdbc:mysql://localhost:10101/"+databaseval jdbcDF = (spark.read.format("jdbc")
.option("url", url)
.option("dbtable", table)
.option("user", user)
.option("password", password) 
.option("driver", "com.mysql.cj.jdbc.Driver") 
.load())jdbcDF.show()+---+--------+
| id|   value|
+---+--------+
|  0|Record 0|
|  1|Record 1|
|  2|Record 2|
|  3|Record 3|
|  4|Record 4|
+---+--------+//通过connectionProperties避免多次写入配置
val connectionProperties = new Properties()
connectionProperties.put("user", "username")
connectionProperties.put("password", "password")
val jdbcDF2 = spark.read//可增加.option("","")添加其他参数.jdbc(url, table , connectionProperties)
// Specifying the custom data types of the read schema
connectionProperties.put("customSchema", "id DECIMAL(38, 0), name STRING")
val jdbcDF3 = spark.read.jdbc(url, table , connectionProperties)// 保存数据
jdbcDF.write.format("jdbc").option("url", "jdbc:postgresql:dbserver").option("dbtable", "schema.tablename").option("user", "username").option("password", "password").save()//或等价的:
jdbcDF2.write.jdbc(url, table , connectionProperties)// Specifying create table column data types on write
jdbcDF.write.option("createTableColumnTypes", "name CHAR(64), comments VARCHAR(1024)").jdbc(url, table , connectionProperties)//通过query取数据
spark.read.format("jdbc")
.option("url", jdbcUrl)
.option("query", "select c1, c2 from t1")
.load()
//或放到properties里
connectionProperties.put("query", "select c1, c2 from t1")
spark.read.jdbc(url, table , connectionProperties)

注意:driver的类名根据不同的JDBC版本不同,早一些的版本为com.mysql.jdbc,而不是com.mysql.cj.jdbc.Driver

2.1 jdbc api方法连接

还可通过 jdbc方法获取或保存数据

/*** Created by Administrator on 2017/12/23.*/
import java.sql.{ Connection, DriverManager }object ScalaJdbcConnectSelect extends App {// 访问本地MySQL服务器,通过3306端口访问mysql数据库val url = "jdbc:mysql://localhost:3306/cgjr?useUnicode=true&characterEncoding=utf-8&useSSL=false"//驱动名称val driver = "com.mysql.cj.jdbc.Driver"//用户名val username = "root"//密码val password = "12345"//初始化数据连接var connection: Connection = _try {//注册DriverClass.forName(driver)//得到连接connection = DriverManager.getConnection(url, username, password)val statement = connection.createStatement//执行查询语句,并返回结果val rs = statement.executeQuery("SELECT name, num FROM persons")//返回java.sql的ResultSet//打印返回结果while (rs.next) {val name = rs.getString("name")val num = rs.getString("num")
//      println(name+"\t"+num)println("name = %s, num = %s".format(name, num))}println("查询数据完成!")//    执行插入操作val rs2 = statement.executeUpdate("INSERT INTO `persons` (`name`, `num`) VALUES ('徐志摩', '22')")println("插入数据完成")//    执行更新操作val rs3 = statement.executeUpdate("UPDATE persons set num=55 WHERE `name`=\"徐志摩\"")println("更新数据完成!")//    执行删除操作val rs4 = statement.executeUpdate("delete from persons WHERE `name`=\"徐志摩\"")println("删除数据完成!")//    执行调用存储过程操作val rs5 = statement.executeUpdate("call add_student(3)")println("调用存储过程完成!")} catch {case e: Exception => e.printStackTrace}//关闭连接,释放资源connection.close
}

参考

Spark Scala: Load Data from MySQL
【scala 数据库操作】scala操作mysql数据库
【官方】使用jdbc连接其他数据库

http://www.lryc.cn/news/112636.html

相关文章:

  • datax-web登陆时出现账号密码错误
  • Redis 和 MySQL如何保证数据一致性
  • VR虚拟仿真技术在道路桥梁中有哪些具体应用?
  • 如何找到死锁的线程?_java都学什么
  • MFC遍历目录包括子目录下所有文件、特定类型文件
  • Kubernetes 集群calico网络故障排查思路
  • OBS视频视频人物实时扣图方法(四种方式)
  • DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户
  • 【JAVA】-【IO流】
  • PoseFormer:基于视频的2D-to-3D单人姿态估计
  • Fortinet发布2023年第二季度财报
  • 智慧消防 | 气体灭火系统压力在线监测正当其时
  • 并查集练习 — 扩展问题(二)
  • iTOP-i.MX8MM开发板添加 isb 转串口设备驱动
  • Golang实现Redis分布式锁解决秒杀问题
  • 狂神说-通俗易懂的23种设计模式
  • VR实景导航——开启3D可视化实景导航新体验
  • 《HeadFirst设计模式(第二版)》第四章代码——工厂模式
  • 拖拽宫格vue-grid-layout详细应用及案例
  • sanyo三洋摄像机卡有部分坏块恢复案例
  • 【C++】STL——set和map及multiset和multiset的介绍及使用
  • 帕累托森林:IEEE Fellow唐远炎院士出任「儒特科技」首席架构官
  • 数据库大数据
  • 骨传导耳机是怎么工作的?骨传导耳机是智商税产品吗?
  • Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业tbms
  • 算法-合并区间
  • 布基纳法索ECTN(BESC)申请流程
  • CDN安全面临的问题及防御架构
  • 【MySQL】MySQL管理 (十四)
  • Mybatis:一对一查询映射处理