MySQL数据库安装配置
为了方便直观的看到/操作数据库,一般需要安装Navicat Premium软件,支持多种数据库。
安装过程就不多废话了,主要参考以下连接,亲测没坑,主要也就是那几个文件:
Navicat Premium 12.0.18 / 12.0.24安装与激活
https://www.jianshu.com/p/42a33b0dda9c
Navicat Premium 12.0.29 / 12.1.5.0安装与激活
https://www.jianshu.com/p/5f693b4c9468
Scala通过JDBC方式操作mysql ,非JDBC的暂时还不会。
Scala通过JDBC方式操作mysql基础
以下先贴别人试过简单可行的,没有问题。增删查改的量都是常量,在输入以前都已知且不会变化,由于是程序中,增删查改的内容难免包含变量,后面将给出一种简单的方法来实现。
package ScalaSQL
import java.sql.{Connection, DriverManager}
object ScalaJDBC {
def main(args: Array[String]) {
val url = "jdbc:mysql://101.18.4.14:2267/aitc_report"
//如果是本地测试则为val url = "jdbc:mysql://localhost/scala_test"
//主要格式为jdbc:mysql://IP地址/数据库名"
val driver = "com.mysql.jdbc.Driver"//驱动名称
val user = "aitc_report"//用户名
val password = "sdkfnhi"//密码
//初始化数据连接
var connection: Connection = null
try {
Class.forName(driver)
connection = DriverManager.getConnection(url,user,password)
val statement = connection.createStatement
//---------------------------------------------------------
val rs = statement.executeQuery("SELECT name, num FROM persons")//要指出数据库中表的名字(此处为persons,num和name分别为scheme信息)
while (rs.next) {
val name = rs.getString("name")
val num = rs.getString("num")
println("name = %s, num = %s".format(name, num))
}//执行查询语句,并返回结果
//-------------------------------------------------------
val rs2 = statement.executeUpdate("INSERT INTO `report` (`name`,`num`) VALUES ('zhangsan', '88')")//插入新数据
//-------------------------------------------------------
val rs3 = statement.executeUpdate("UPDATE persons set num=11 WHERE `name`=\"zhangsan\"")//已有数据更新修改
//-------------------------------------------------------
val rs4 = statement.executeUpdate("delete from persons WHERE `name`=\"zhangsan\"")//已有数据删除
//-------------------------------------------------------
val rs5 = statement.executeUpdate("call add_student(3)")//执行调用存储过程操作
} catch {
case e: Exception => e.printStackTrace
}
connection.close//关闭连接,释放资源
Scala通过JDBC方式操作mysql进阶
Scala程序运行的结果中,可能包含一些变量,这时候增删查改的内容也难免包含变量。操作的方法除了网上所述的将结果变化为DataFrame的形式之外,另外一种简单的方式如下示例:
val datalist=List(XXXXX)//由于公司原因这一部分省略了
val url="jdbc:mysql://101.18.4.14:2267/aitc_report"
val data = sc.parallelize(datalist)
data.foreachPartition(myFun)
def myFun(iterator: Iterator[(String, Int,Int,Int,Int,Int,Int,Double)]): Unit = { //函数的参数类型严格对应上,后续还会有Set
var conn: Connection= null
var ps:java.sql.PreparedStatement=null
val sql="insert into `report_youxi`(`date`,`aitcsender_num`,`sjzssender_num`,`arrive`,`close`,`pop`,`click`,`CTR`)"+"values (?,?,?,?,?,?,?,?)" conn=DriverManager.getConnection(url,"aitc_report","sdkfnhi")
ps = conn.prepareStatement(sql)
iterator.foreach(data => {
ps.setString(1, data._1)
ps.setInt(2, data._2)
ps.setInt(3, data._3)
ps.setInt(4, data._4)
ps.setInt(5, data._5)
ps.setInt(6, data._6)
ps.setInt(7, data._7)
ps.setDouble(8, data._8)
ps.executeUpdate() //执行Sql语句
})}
参考:
https://blog.csdn.net/rainy_lee/article/details/44562531
第二个参考的暂时没找到原链接,找到了补上。