首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 反射機制與 MySQL 匯出腳本混合內容整理

     編輯:Java 相關知識

原始內容說明

原始文章內容混雜了兩個無關主題:

  1. Shell 腳本:刪除舊檔、執行 MySQL 查詢並將結果以 `|` 分隔、Windows 換行符匯出至 `/var/lib/mysql/hell.txt`。
  2. Java 反射範例:定義 `User` 類別,透過 `Class.forName`、`getMethod`、`invoke` 動態呼叫無參/有參 `say()` 方法。

標題「java加密算法分享」與實際內容不符。以下分別整理兩部分核心內容。

第一部分:MySQL 資料匯出 Shell 腳本

#!/bin/bash
# 匯出 sns_home_user 表指定欄位至檔案
OUTFILE="/var/lib/mysql/hell.txt"

# 刪除舊檔並記錄
if [ -f "$OUTFILE" ]; then
    rm -f "$OUTFILE"
    echo "delete $OUTFILE" >> hell.log
fi

# 執行查詢匯出(需 MySQL 權限:FILE 權限、secure_file_priv 允許目錄)
mysql -uroot -plab <<EOF
USE home;
SELECT YongHuID, XueYuanID
INTO OUTFILE './hell.txt'
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
FROM sns_home_user
WHERE YongHuID < 20;
EOF

注意:MySQL 8.0 預設啟用 `secure_file_priv`,匯出目錄受限;需確認 `SHOW VARIABLES LIKE 'secure_file_priv';` 允許的路徑。

第二部分:Java 反射呼叫方法完整範例

package reflection;

public class User {
    private String name;

    public User() {}
    public User(String name) { this.name = name; }

    public void say() {
        System.out.println("大家好,我叫" + name + "!");
    }
    public void say(String str) {
        System.out.println("大家好,我叫" + name + "!" + str + ",我是有參方法!");
    }
}
package reflection;

import java.lang.reflect.Method;

public class ReflectionDemo {
    public static void main(String[] args) throws Exception {
        // 1. 取得 Class 物件
        Class<?> clazz = Class.forName("reflection.User");

        // 2. 取得方法物件
        Method m1 = clazz.getMethod("say");           // 無參
        Method m2 = clazz.getMethod("say", String.class); // 有參

        // 3. 動態呼叫
        // 無參建構子實例化
        m1.invoke(clazz.getDeclaredConstructor().newInstance());

        // 有參建構子實例化後呼叫
        m2.invoke(clazz.getDeclaredConstructor(String.class).newInstance("劉顯安"), "哈哈");
    }
}

關鍵點提醒

  • newInstance() 呼叫的是無參建構子,類別必須提供 `public User() {}`。
  • 若建構子非 `public`,需用 `getDeclaredConstructor()` 並 `setAccessible(true)`。
  • 反射效能較直接呼叫低,熱點路徑建議快取 `Method`/`Constructor` 物件。
  • Java 9+ 模組化系統需在 `module-info.java` 開放 `opens package to java.base` 或使用 `--add-opens`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved