提交 d087e089 authored 作者: 宋勇's avatar 宋勇

修改access 链接用户名称密码

上级 ee1e5f57
......@@ -67,6 +67,12 @@
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.21</version>
</dependency>
</dependencies>
</project>
......@@ -33,7 +33,9 @@ import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.*;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -43,7 +45,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class AccessJdbcDataSourceChannel implements DataSourceChannelExt {
List<String> typeList = Arrays.asList("varchar", "char", "json");
private ConcurrentHashMap<String, Connection> concurrentHashMap = new ConcurrentHashMap<>(1);
private LocalDateTime fileDate;
public LocalDateTime getFileId(){
return fileDate;
}
private ConcurrentHashMap<String, FilieInfo> concurrentHashMap = new ConcurrentHashMap<>(1);
public static class Holder {
private static final AccessJdbcDataSourceChannel INSTANCE =
......@@ -253,69 +261,78 @@ public class AccessJdbcDataSourceChannel implements DataSourceChannelExt {
if (StringUtils.isBlank(substring)) {
throw new RuntimeException("没找到文件名称!");
}
Connection conn = null;
String database = "";
Connection connection = concurrentHashMap.get(url);
if (connection != null) {
return connection;
}
String[] split = substring.split("\\.");
String prefix = split[0];
String suffix = "";
if (split.length > 1) {
suffix = "." + split[1];
}
FilieInfo filieInfo = concurrentHashMap.get(url);
if (filieInfo==null || filieInfo.getDateTime().plusMinutes(1).isBefore(LocalDateTime.now())) {
// 定义 SQL 语句执行对象
Statement state = null;
// 定义结果集对象
ResultSet rs = null;
Connection conn = null;
String[] split = substring.split("\\.");
String prefix = split[0];
String suffix = "";
if (split.length > 1) {
suffix = "." + split[1];
}
File path = new File("/tmp");
if (!path.exists()) {
path.mkdir();
}
// 定义 SQL 语句执行对象
Statement state = null;
// 定义结果集对象
ResultSet rs = null;
FileOutputStream outputStream = null;
InputStream in = null;
HttpURLConnection con = null;
File file = null;
try {
file = File.createTempFile(prefix, suffix, path);
outputStream = new FileOutputStream(file);
URL urldownl = new URL(url);
con = (HttpURLConnection) urldownl.openConnection();
con.setRequestMethod("GET");
in = con.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
File path = new File("/tmp");
if (!path.exists()) {
path.mkdir();
}
outputStream.flush();
} catch (Exception e) {
System.out.println("读取url 文件失败!" + e);
throw new RuntimeException("读取url 文件失败!");
} finally {
FileOutputStream outputStream = null;
InputStream in = null;
HttpURLConnection con = null;
File file = null;
try {
if (in != null) {
in.close();
file = File.createTempFile(prefix, suffix, path);
outputStream = new FileOutputStream(file);
URL urldownl = new URL(url);
con = (HttpURLConnection) urldownl.openConnection();
con.setRequestMethod("GET");
in = con.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
if (con != null) {
con.disconnect();
}
if (outputStream != null) {
outputStream.close();
outputStream.flush();
} catch (Exception e) {
System.out.println("读取url 文件失败!" + e);
throw new RuntimeException("读取url 文件失败!");
} finally {
try {
if (in != null) {
in.close();
}
if (con != null) {
con.disconnect();
}
if (outputStream != null) {
outputStream.close();
}
} catch (Exception ee) {
System.out.println("关闭流错误!" + ee);
}
} catch (Exception ee) {
System.out.println("关闭流错误!" + ee);
}
}
String database = path + "/" + file.getName();
database = database.replace("\\", "/");
database = path + "/" + file.getName();
database = database.replace("\\", "/");
FilieInfo newFile=new FilieInfo();
newFile.setDatabase(database);
newFile.setDateTime(LocalDateTime.now());
concurrentHashMap.put(url, newFile);
} else {
FilieInfo filieInfo1 = concurrentHashMap.get(url);
database = filieInfo1.getDatabase();
}
// JDBC连接字符串
// 在application.properties或application.yml文件中配置数据库连接信息。你需要指定驱动类名为net.ucanaccess.jdbc.UcanaccessDriver,并提供Access数据库的URL。例如,URL可以是jdbc:ucanaccess://D:/Access2003/database/db_test.mdb;openExclusive=false;ignoreCase=true。[1]
......@@ -328,8 +345,6 @@ public class AccessJdbcDataSourceChannel implements DataSourceChannelExt {
conn = DriverManager.getConnection(connectionString, user, pwd);
System.out.println("Connected to the database successfully");
concurrentHashMap.put(url, conn);
return conn;
}
......
package org.apache.seatunnel.datasource.plugin.access.jdbc;
import java.time.LocalDateTime;
/**
* @description:TODO
* @author: sy
* @create: 2024/4/14 22:53
*/
public class FilieInfo {
private String database;
private LocalDateTime dateTime;
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public LocalDateTime getDateTime() {
return dateTime;
}
public void setDateTime(LocalDateTime dateTime) {
this.dateTime = dateTime;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论