From 95f3f7f12050ea5d884bab17c9eb330f04996934 Mon Sep 17 00:00:00 2001 From: pengda Date: Tue, 20 Apr 2021 16:27:55 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-51162=20=E7=AB=AF=E5=8F=A3=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E9=99=90=E5=88=B6=E5=A4=B1=E6=95=88=20&=20REPORT-5126?= =?UTF-8?q?0=20redshift=E7=9A=84=E7=89=B9=E5=AE=9Aurl=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/connect/JDBCDefPane.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index 18681ca18..433182823 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -51,9 +51,10 @@ public class JDBCDefPane extends JPanel { public static final String DRIVER_TYPE = "driver_type"; public static final String USER_NAME = "user_name"; private static final String OTHER_DB = "Others"; - private static final Pattern ORACLE_URL = Pattern.compile("^jdbc:oracle:thin:@[/]*([0-9a-zA-Z_\\.]+)(:([0-9]+|port))?([:/](.*))?.*", Pattern.CASE_INSENSITIVE); - private static final Pattern GENERAL_URL = Pattern.compile("^jdbc:(mysql|sqlserver|db2|derby|postgresql|inceptor|inceptor2|hive2)://([0-9a-zA-Z_\\.]+)(:([0-9]+|port))?((/|;DatabaseName=)(.*))?.*", Pattern.CASE_INSENSITIVE); + private static final Pattern ORACLE_URL = Pattern.compile("^jdbc:oracle:thin:@[/]*([-0-9a-zA-Z_\\.]+)(:([0-9]+|port))?([:/](.*))?.*", Pattern.CASE_INSENSITIVE); + private static final Pattern GENERAL_URL = Pattern.compile("^jdbc:(mysql|sqlserver|db2|derby|postgresql|inceptor|inceptor2|hive2)://([-0-9a-zA-Z_\\.]+)(:([0-9]+|port))?((/|;DatabaseName=)(.*))?.*", Pattern.CASE_INSENSITIVE); private static final Pattern PORT = Pattern.compile("^0$|^[1-9][\\d]*[\\d]*$"); + private static final Pattern CHAR_NEED_ESCAPE = Pattern.compile("[?|$^*\\\\\\[\\](){}.+]"); // 编码转换. private String originalCharSet = null; private static Map jdbcMap = new HashMap(); @@ -389,6 +390,9 @@ public class JDBCDefPane extends JPanel { InputMethodListener portInputMethodListener = new InputMethodListener() { @Override public void inputMethodTextChanged(InputMethodEvent event) { + if (null == event.getText()) { + return; + } char ch = event.getText().current(); if (!(ch >= '0' && ch <= '9')) { event.consume(); @@ -484,13 +488,13 @@ public class JDBCDefPane extends JPanel { KeyListener portKeyListener = new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { - String port = portTextField.getText().trim(); + String port = portTextField.getText(); if (isPortValid(port)) { updateURL(); } else { - portTextField.setText(port.replaceAll(e.getKeyChar() + "", "")); + portTextField.setText(port.replaceAll(getCharNeedReplace(e.getKeyChar()) , "")); if (!isPortValid(portTextField.getText())) { - portTextField.setText(""); + portTextField.setText(StringUtils.EMPTY); updateURL(); } } @@ -501,6 +505,15 @@ public class JDBCDefPane extends JPanel { return PORT.matcher(port).find(); } + private String getCharNeedReplace(char c) { + String charNeedReplace = c + ""; + Matcher matcher = CHAR_NEED_ESCAPE.matcher(charNeedReplace); + if (matcher.find()) { + charNeedReplace = "\\" + charNeedReplace; + } + return charNeedReplace; + } + DocumentListener updateURLListener = new DocumentListener() { @Override