java 执行scala_用JAVA命令行执行scala程序时的一个小问题

本文介绍了如何在命令行中使用Java执行Scala程序,详细讨论了类路径设置的问题,包括 jar 库的顺序、使用通配符 * 和环境变量等问题,并给出了成功执行的示例。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值