java 监听复制面板
通过读取文件和监听复制面板的内容,生成sql语句,执行sql
- 监听复制面板
- jdbc 连接
- 业务处理
package com.czh.sand.xiamen.demo;
import cn.hutool.json.JSONUtil;
import com.czh.common.util.idgen.IdGenerateFactory;
import com.czh.sand.xiamen.demo.utils.DateUtils;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.List;
import java.util.Map;
/**
* @author
* @date 1/30/2024
*/
public class SQLTool implements ClipboardOwner {
public static void main(String[] args) throws Exception {
// 监听复制
SQLTool sqlTool = new SQLTool();
while (true);
}
// 剪切板 begin ======================================>
private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
public SQLTool(){
// 将剪切板的所有者设置为自己
// 当所有者为自己时,才能监控下一次剪切板的变动
// clipboard.getContents(null) 获取当前剪切板的内容
clipboard.setContents(clipboard.getContents(null), this);
}
/**
* 监听剪切板
* @param clipboard the clipboard that is no longer owned
* @param contents the contents which this owner had placed on the clipboard
*/
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
// 延迟1s执行,如果立即执行会报错,系统还没使用完剪切板,直接操作会报错
// IllegalStateException: cannot open system clipboard
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String text = null;
if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)){
try {
// 获取文本数据
text = (String)clipboard.getData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(text);
try {
getSQLByClick(text);
} catch (Exception e) {
throw new RuntimeException(e);
}
// 不影响剪切板内容
// 每次剪切板变动,剪切板的所有者会被剥夺,所以要重新设置自己为所有者,才能监听下一次剪切板变动
clipboard.setContents(clipboard.getContents(null), this);
}
// 剪切板 end ======================================
// jdbc 连接数据库 begin ==============================
private static final String driver="com.mysql.jdbc.Driver";//数据库驱动
private static final String url="jdbc:mysql://192.168.4.191:3316/bs?useUnicode=true&characterEncoding=utf-8&useSSL=false";
private static final String username="root";//数据库名
private static final String password="rootsand";//数据库密码
private static Connection conn=null;
//静态代码块负责加载驱动
static{
try{
Class.forName(driver);
}
catch(Exception e){
e.printStackTrace();
}
}
//单例模式返回数据库对象
public static Connection getConnection() throws Exception{
if(conn==null){
Class.forName(driver);
conn= DriverManager.getConnection(url, username, password);
return conn;
}
return conn;
}
// jdbc 连接数据库 end ==============================
// 具体业务,根据剪贴板内容、文件内容生成sql,执行sql
public static void getSQLByClick(String modelName) throws Exception {
String path = "./bs-3d\\dist\\storage\\scenes\\xiamen\\park.json";
byte[] bytes = Files.readAllBytes(Paths.get(path));
String json = new String(bytes);
Map<String, Object> jsonObject = JSONUtil.parseObj(json);
Map<String, Object> map = (Map<String, Object>) jsonObject.get("scene");
List<Object> eyeList = (List<Object>) map.get("eye");
List<Object> centerList = (List<Object>) map.get("center");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("update bs_model_info set \n")
.append("eye_x=").append(eyeList.get(0)).append(",")
.append("eye_y=").append(eyeList.get(1)).append(",")
.append("eye_z=").append(eyeList.get(2)).append(",")
.append("center_x=").append(centerList.get(0)).append(",")
.append("center_y=").append(centerList.get(1)).append(",")
.append("center_z=").append(centerList.get(2)).append("\n")
.append("where model_name=").append("'").append(modelName).append("';");
Connection connection = getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(stringBuilder.toString());
preparedStatement.execute();
preparedStatement.close();
System.out.println("============== " + DateUtils.todayDateTimeStr(null));
System.out.println(stringBuilder.toString());
}
}