zoukankan      html  css  js  c++  java
  • 命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]

    环境: MySQL8 JDK11(SE)

    首先下载MySQL8的JDBC驱动

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

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

     

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

     1 import java.sql.Connection;
     2 import java.sql.DriverManager;
     3 import java.sql.ResultSet;
     4 import java.sql.Statement;
     5 import java.lang.ClassNotFoundException;
     6 
     7 
     8 public class jdbcer {
     9     public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    10     public static final String URL = "jdbc:mysql://localhost:3306/zk_stu?useSSL=false&serverTimezone=UTC";
    11     public static final String USER = "root";
    12     public static final String PASSWD = "yourpasswd";
    13 
    14     public static void main(String[] args) throws Exception{
    15         Class.forName("com.mysql.cj.jdbc.Driver");
    16         Connection conn = DriverManager.getConnection(URL, USER, PASSWD);
    17         Statement stmt = conn.createStatement();
    18         ResultSet rs = stmt.executeQuery("SELECT * FROM 路人194班");
    19 
    20         while (rs.next()){
    21             System.out.println(rs.getString("学号") + "   姓名:" + rs.getString("姓名"));
    22         }
    23     }
    24 
    25 
    26 }
    View Code

    把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;
        }
    View Code

    目录结构

    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包的问题

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

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

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

    编译

    javac -cp D:yyyy.jar,Dxxxx.jar test.java

    执行

    java -cp D:yyyy.jar,Dxxxx.jar test

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

    编译 

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

    执行

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

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

    --------蓝天上的云_转载请注明出处.
  • 相关阅读:
    [LintCode] Single Number 单独的数字
    [LeetCode] 444. Sequence Reconstruction 序列重建
    [LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字
    [LeetCode] Arranging Coins 排列硬币
    [LeetCode] Ternary Expression Parser 三元表达式解析器
    [LeetCode] 436. Find Right Interval 找右区间
    在Mac上配置全局的Git忽略文件
    Git『Everything up-to-date』问题解决
    Android组件化框架项目详解
    Android架构设计之插件化、组件化
  • 原文地址:https://www.cnblogs.com/yucloud/p/10924899.html
Copyright © 2011-2022 走看看