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

修改access 链接用户名称密码

上级 ee1e5f57
...@@ -67,6 +67,12 @@ ...@@ -67,6 +67,12 @@
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
<version>4.5.14</version> <version>4.5.14</version>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.21</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -33,7 +33,9 @@ import java.io.InputStream; ...@@ -33,7 +33,9 @@ import java.io.InputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.sql.*; import java.sql.*;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -43,7 +45,13 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -43,7 +45,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class AccessJdbcDataSourceChannel implements DataSourceChannelExt { public class AccessJdbcDataSourceChannel implements DataSourceChannelExt {
List<String> typeList = Arrays.asList("varchar", "char", "json"); 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 { public static class Holder {
private static final AccessJdbcDataSourceChannel INSTANCE = private static final AccessJdbcDataSourceChannel INSTANCE =
...@@ -253,69 +261,78 @@ public class AccessJdbcDataSourceChannel implements DataSourceChannelExt { ...@@ -253,69 +261,78 @@ public class AccessJdbcDataSourceChannel implements DataSourceChannelExt {
if (StringUtils.isBlank(substring)) { if (StringUtils.isBlank(substring)) {
throw new RuntimeException("没找到文件名称!"); throw new RuntimeException("没找到文件名称!");
} }
Connection conn = null;
String database = "";
Connection connection = concurrentHashMap.get(url); FilieInfo filieInfo = concurrentHashMap.get(url);
if (connection != null) { if (filieInfo==null || filieInfo.getDateTime().plusMinutes(1).isBefore(LocalDateTime.now())) {
return connection;
}
String[] split = substring.split("\\.");
String prefix = split[0];
String suffix = "";
if (split.length > 1) {
suffix = "." + split[1];
}
// 定义 SQL 语句执行对象 String[] split = substring.split("\\.");
Statement state = null; String prefix = split[0];
// 定义结果集对象 String suffix = "";
ResultSet rs = null; if (split.length > 1) {
Connection conn = null; suffix = "." + split[1];
}
File path = new File("/tmp"); // 定义 SQL 语句执行对象
if (!path.exists()) { Statement state = null;
path.mkdir(); // 定义结果集对象
} ResultSet rs = null;
FileOutputStream outputStream = null; File path = new File("/tmp");
InputStream in = null; if (!path.exists()) {
HttpURLConnection con = null; path.mkdir();
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);
} }
outputStream.flush();
} catch (Exception e) { FileOutputStream outputStream = null;
System.out.println("读取url 文件失败!" + e); InputStream in = null;
throw new RuntimeException("读取url 文件失败!"); HttpURLConnection con = null;
} finally { File file = null;
try { try {
if (in != null) { file = File.createTempFile(prefix, suffix, path);
in.close(); 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) { outputStream.flush();
con.disconnect(); } catch (Exception e) {
} System.out.println("读取url 文件失败!" + e);
if (outputStream != null) { throw new RuntimeException("读取url 文件失败!");
outputStream.close(); } 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 = path + "/" + file.getName();
database = database.replace("\\", "/"); 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连接字符串 // 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] // 在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 { ...@@ -328,8 +345,6 @@ public class AccessJdbcDataSourceChannel implements DataSourceChannelExt {
conn = DriverManager.getConnection(connectionString, user, pwd); conn = DriverManager.getConnection(connectionString, user, pwd);
System.out.println("Connected to the database successfully"); System.out.println("Connected to the database successfully");
concurrentHashMap.put(url, conn);
return 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论