scala访问MySQL数据库例子:
import java.sql.{Connection,ResultSet,DriverManager}
import scala.util.control.Exception.Catch
//import java.sql.DriverManager
object DataAnalysisTest {
def main(args: Array[String]): Unit = {
if(args.length!=3)
{
println("参数错误!")
println("使用方法:DataAnalysisTest 数据库名 用户名 密码")
return
}
//驱动名称
val driver = "com.mysql.jdbc.Driver"
//数据库名
var dbdata = args(0)
//用户名
val username = args(1)
//密码
val password = args(2)
val dbc = "jdbc:mysql://localhost:3306/"+dbdata+"?user="+username+"&password="+password
//初始化数据连接
var connection:Connection =null
//
try
{
Class.forName(driver)
connection = DriverManager.getConnection(dbc)
val statement = connection.createStatement()
val rs = statement.executeQuery("select * from imtesttable ")
while(rs.next())
{
println(rs.getInt("id"))
println(rs.getInt("f0"))
}
connection.close()
}
catch{
case e:Exception=>e.printStackTrace()
}
}
}
程序在eclipse中执行都很正常。命令行用scala来执行(上面源代码所在的目录是C:\Users\joe\eclipse-workspace\HelloScala\):
C:\Users\joe\eclipse-workspace\HelloScala\bin>scala DataAnalysisTest 数据库名 用户名 密码
程序也能正常执行。现在想用java命令行来执行:
先在此将相关的环境变量显示给大家看:
C:\Users\joe\eclipse-workspace\HelloScala\bin>echo %SCALA_HOME%
C:\Program Files (x86)\scala
我现在开始在cmd中输入命令:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;"D:/Program Files (x86)
/eclipse-jee-oxygen-3a-win32-x86_64/eclipse/plugins/org.scala-lang.scala-library
.source_2.12.3.v20170725-052526-VFINAL-6ac6da8.jar";D:\software\mysql-connector-
java-5.1.46/mysql-connector-java-5.1.46.jar;%SCALA_HOME%\lib\* DataAnalysisTest
dbtest root 123abc
错误: 找不到或无法加载主类 Files
然后我将最后一个scala相关的jar库放在前面:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;"D:/Program Files (x86)
/eclipse-jee-oxygen-3a-win32-x86_64/eclipse/plugins/org.scala-lang.scala-library
.source_2.12.3.v20170725-052526-VFINAL-6ac6da8.jar";"%SCALA_HOME%\lib\*";D:\soft
ware\mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar DataAnalysisTe
st dbtest root 123abc
1
10
2
11
说明成功执行。怎么会这样呢?难道xxx\*这样的jar包含格式不能放在最后面吗?应该不是这样的。再做实验如下:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;"D:/Program Files (x86)
/eclipse-jee-oxygen-3a-win32-x86_64/eclipse/plugins/org.scala-lang.scala-library
.source_2.12.3.v20170725-052526-VFINAL-6ac6da8.jar";D:\software\mysql-connector-
java-5.1.46/mysql-connector-java-5.1.46.jar;"%SCALA_HOME%\lib\*" DataAnalysisTe
st dbtest root 123abc
1
10
2
11
再次说明只是因为没有加双引号的原因。再后来发现第一个jar包是源码包,根本就不需要:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;D:\software\mysql-connector-
java-5.1.46/mysql-connector-java-5.1.46.jar;"%SCALA_HOME%\lib\*" DataAnalysisTe
st dbtest root 123abc
1
10
2
11
如果将上面的mysql的jar包放在bin目录下执行如下命令也可以正确执行:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;mysql-connector-java-5.1.46.jar;"%SCALA_HOME%\lib\*" DataAnalysisTe
st dbtest root 123abc
1
10
2
11
换成下面的命令则不能正确执行:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;"%SCALA_HOME%\li
b\*" DataAnalysisTest dbtest root 123abc
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at DataAnalysisTest$.main(DataAnalysisTest.scala:32)
at DataAnalysisTest.main(DataAnalysisTest.scala)
换成如下命令则能正确执行:
C:\Users\joe\eclipse-workspace\HelloScala\bin>java -cp .;".\*";"%SCALA_HO
ME%\lib\*" DataAnalysisTest dbtest root 123abc
1
10
2
11