环境: MySQL8 JDK11(SE)

首先下载MySQL8的JDBC驱动

https://dev.mysql.com/downloads/connector/j/
选 PlatForm Independent

下载完文件名差不多是 “mysql-connector-java-8.<小版本号>.jar”

然后写一个JDBC小的程序(需要数据库提前建好表)

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.lang.ClassNotFoundException; public class jdbcer {
public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/zk_stu?useSSL=false&serverTimezone=UTC";
public static final String USER = "root";
public static final String PASSWD = "yourpasswd"; public static void main(String[] args) throws Exception{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(URL, USER, PASSWD);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM 路人194班"); while (rs.next()){
System.out.println(rs.getString("学号") + " 姓名:" + rs.getString("姓名"));
}
} }

把MySQL8的JDBC驱动和jdbcer.java放在同一目录

例子如下(tab键可以智能补全路径)

编译

javac -encoding UTF-8 -cp mysql-connector-java-8.0.16.jar; jdbcer.java

运行

java -cp mysql-connector-java-8.0.16.jar;  jdbcer

  

如果不加cp参数,就会出现类的加载抛出异常(运行错误:java.lang.ClassNotFoundException)

-encoding用于指定编码格式,用UTF-8来避免中文乱码
-cp 即classpath是依赖路径,多个包可以用逗号分割,最后用分号表示classpath结束(分号绝不能少)
分为两种:目录和jar包
  • 目录型:

      fie.java依赖于目录dirA和dirB下的一些class文件,这种就是目录型的

      编译:      javac -cp dirA,dirB; fie.java

  

  • Jar包型:

      fig.java依赖于1.jar和2.jar(尽管这两个包在同一个目录dirC下)

      编译:       javac -cp 1.jar, 2.jar; fig.java

注意:直接 javac -cp dirC; fig.java 是没用的,因为jar包其实也是一种“目录”,javac编译器要打开jar包才能看到里面的内容


记得不要漏掉逗号分号
两者运行都要加classpath,即-cp参数 当然可以编译后直接运行,把两个命令写成一句
javac -encoding UTF-8 -cp mysql-connector-java-8.0.16.jar; jdbcer.java && java -cp mysql-connector-java-8.0.16.jar; jdbcer
MySQL8和MySQL5的密码策略和JDBC驱动名等都不一样,最后附上:javac中使用-d,以及javac / java中使用-cp介绍

这里丢个读取Jar内sqlite数据库(db格式文件)的例子:
    private Connection initConnection() {
String url = "jdbc:sqlite:" + ":resource:" + getClass().getResource("resources/my.db").toString();
System.out.println("url: " + url);
Properties config = new Properties();
config.setProperty("open_mode", "1"); // readonly
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection(url, config);
System.out.println("Connected! Version: " + conn.getMetaData().getDatabaseProductVersion());
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
return conn;
}

目录结构

jar内

未打包时

Manifest-Version: 1.0
Main-Class: demo.sqliteJDBC
Class-Path: lib/sqlite-jdbc-3.30.1.jar

MANIFEST.MF

ps. MF这个文件最后必须有个空行

打包命令
jar cvfm sqliteDemo.jar ./MANIFEST.MF -C bin/ .

执行命令
java -jar .\sqliteDemo.jar


java命令行执行程序解决依赖外部jar包的问题

转载波波仔86 最后发布于2019-07-30 10:47:30

用java命令行直接执行程序,如果这个程序需要引用外部jar包。就不能单纯用java xx来执行

如果你的jar包和程序就在一个目录:

编译

javac -cp D:\yy\yy.jar,D\xx\xx.jar test.java

执行

java -cp D:\yy\yy.jar,D\xx\xx.jar test

但是往往我们依赖的包很多,要一个个填写估计就疯了。所有我们一般会把所有的外部依赖包都放在一个文件夹里,比如在D:\lib

编译

javac -Djava.ext.dirs=D:\lib test.java

执行

java  -Djava.ext.dirs=D:\lib test

这个方法需要在jdk1.6以上支持

命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]的更多相关文章

  1. java命令行运行带外部jar

    假设:java 代码路径为com.jdw.test,其中调用了外部jar包 则需要将jar包解压后,放入com同级目录 然后再com目录启动命令行 java com.jdw.test.HelloWor ...

  2. 用命令行编译java并生成可执行的jar包

    用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: ...

  3. 韩顺平细说Servlet视频系列意外收获之用命令行编译带有包的java类解决方案

    命令行编译带有包的java类 在命令行编译这一块,基本上都是新手入门时了解一下,然后就直奔IDE而去.这样固然没错,就怕那些--.然后今天在视频中看到了这种方法,觉得可能会用到,所以就记录下来了,以备 ...

  4. Linux java 命令行编译 jar包

    Java 命令行编译成class,然后在打包成jar文件. 编译成class javac -classpath $CLASS_PATH -d class ./src/Hello.java 可以通过ja ...

  5. Java无包结构命令行编译

    无包结构的命令行编译运行方式 如果图片损坏,点击链接:https://www.toutiao.com/i6491250431673500173/ 利用记事本编写一段简单的代码,文件名和类名要一致. 将 ...

  6. Delphi的命令行编译命令

    Borland出品的Delphi,有着闪电般的编译速度,但是在界面控件使用较多.工程项目较大的时候,编译一个工程仍需要一段时间,打开庞大的Delphi IDE,也需要时间.其实,在一个工程开发结束,调 ...

  7. 命令行编译工具NMAKE

    简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译. C/C++/VC++程序员或有Unix/Linux编程经验应该很 ...

  8. 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的 ...

  9. java命令行编译运行、打包jar

    过程:java文件→class文件→exe执行文件 --------------------------------------------- 一.编译:从.java生成.class   (1)ecl ...

随机推荐

  1. vuex 源码分析(一) 使用方法和代码结构

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,注意:使用前需要先加载vue文件才可以使用(在node.js下需要使用Vue.use(Vuex ...

  2. jQuery 源码解析(七) jQuery对象和DOM对象的互相转换

    jQuery对象是一个类数组对象,它保存的是对应的DOM的引用,我们可以直接用[]获取某个索引内的DOM节点,也可以用get方法获取某个索引内的DOM节点,还可以用toArray()方法把jQuery ...

  3. Centos安装jdk1.8出现-bash: //usr/local/soft/jdk1.8.0_191/bin/javac: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录错误。

    1.从来没有这么郁闷,之前安装都是好好的,自从将Centos升级到7.0版本,安装了jdk报了这个错误,也是郁闷的一毛,参考了一下百度的,记录一下.使用java命令还有java -version命令都 ...

  4. Python - 字符串 - 第七天

    Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号( ' 或 " )来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hel ...

  5. WPF ValidationRules(MVVM 数据验证)

    对于WPF中的验证, View验证实现起来很简单, 可以通道 Validation.ErrorEvent 冒泡传递到View的逻辑树上, 只是, 通常这样做的情况下, 我们需要为View添加事件代码监 ...

  6. DevExpress的TreeList的常用属性设置以及常用事件

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. AI 图像识别的测试

    随着AI 的浪潮发展,AI 的应用场景越来越广泛,其中计算机视觉更是运用到我们生活中的方方面面.作为一个测试人员,需要紧跟上 AI 的步伐,快速从传统业务测试,转型到 AI 的测试上来.而人脸识别作为 ...

  8. sparkstreaming 黑名单过滤

    要用到transform and rdd.leftOuterJoin transform: 使 DStream 和 RDD 之间的类型进行了转换,然后可以进行调用 leftOuterJoin(左外连接 ...

  9. Linux-CentOS-Nginx安装

    原文转自 jerryhe326:https://www.cnblogs.com/jerrypro/p/7062101.html 一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装n ...

  10. chrony服务配置

    chrony软件使用说明 chrony简介 chrony是一个开源的自由软件,它能保持系统时钟与时间服务器(ntp)同步,让时间保持精确. 它由两个程序组成:chrongd和chronyc. chro ...