我尝试运行Scala程序从mysql retail_db数据库中提取数据。它抛出SQLException。
这是我的代码:
import java.sql.DriverManager
import java.sql.Connection
case class Categories(id: Int, department: String, name: String){
override def toString: String = {"id: " + id + "department: " + department + "name: " + name}
}
object Orders {
def main(args: Array[String]): Unit ={
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://quickstart.cloudera:3306/retail_db"
val username = "root"
val password = "cloudera"
Class.forName(driver)
val connection = DriverManager.getConnection(url, username, password)
val statement = connection.createStatement()
val resultSet = statement.executeQuery(s"SELECT * FROM categories")
while (resultSet.next()){
val e = Categories(resultSet.getInt("id"),
resultSet.getString("department"),
resultSet.getString("name"))
println(e)
}
}
}
Spark提交命令:
spark-submit --class "Orders" \
--master local < path >/scala_2.10-0.1-SNAPSHOT.jar
例外:
线程中的异常&#34; main&#34; java.sql.SQLException:Column&#39; id&#39;不 发现&#34; **
答案 0 :(得分:1)
很简单,在类表中没有名为id的列(或者它不是Int)。我建议运行
val resultSet = statement.executeQuery("SHOW COLUMNS FROM categories")
首先返回表格的description然后
while (resultSet.next()){
println(resultSet.getString("Field"))
println(resultSet.getString("Type"))
}
通过这种方式,您可以看到实际的字段名称和类型。 当然,这假设您无法访问MySQL的主机或其他 你应该只需手动连接并查看表结构。
编辑: JDBC URL看起来很熟悉,它来自cloudera的quickstart VM。无论如何,表的模式是here,因此您可以看到它不是id而是category_id。