Я написал программу java для синхронизации двух таблиц в двух разных удаленных базах данных.JDBC: подключиться к Oracle DB через tnsname странная ошибка
Программа отлично работает для подключения к обеим базам данных, если в имени пользователя или пароле нет каких-либо специальных символов, иначе он будет успешно подключен к первому БД, но не будет выполнен на втором.
Предположим, что мое системное свойство «oracle.net.tns_admin» установлено правильно, и файл tnsname.ora не имеет проблем. У меня есть три базы данных с именем tns, именем пользователя, паролем:
- "TESTDB1", "AAA", "AAA!"
- "TESTDB2", "BBB", "BBB!"
«TESTDB3», «CCC», «CCC» // никакой специальный символ в пароле.
Вот мои тестовые случаи и возвращаемые значения для программы:
1> Тестовый пример 1: подключение к две базы данных 1 TO 2:
Source DB:[TESTDB1, AAA, AAA!] Connect Successfully to source DB! Dest DB:[TESTDB2, BBB, BBB!] Connect to dest DB failed!
2 > Контрольный образец 2: дважды подключиться к одной и той же базе данных:
Source DB:[TESTDB1, AAA, AAA!] Connect Successfully to source DB! Dest DB:[TESTDB1, AAA, AAA!] Connect to dest DB failed!
3> Тестовый пример 3: подключение к двум БД 1 до 3:
Source DB:[TESTDB1, AAA, AAA!] Connect Successfully to source DB! Dest DB:[TESTDB3, CCC, CCC] Connect Successfully to dest DB!
4> Тестовый пример 4: подключение к двум базе 3 до 1:
Source DB:[TESTDB3, CCC, CCC] Connect Successfully to source DB! Dest DB:[TESTDB1, AAA, AAA!] Connect to dest DB failed!
Только тестовый случай 3 успеха. Неисправное сообщение: «ORA-01017: неверное имя пользователя/пароль, отказ в регистрации». для неудачных соединений. Таким образом, часть использования - это то, почему программа не могла подключиться к БД, если в имени пользователя или пароле есть вторая персональная информация для второй базы данных? Можете ли вы попробовать мою программу ниже и проверить?
Полный код: (Вы должны иметь базу данных оракула и настроить «oracle.net.tns_admin» на свой путь tnsname.ora файла)
import java.sql.*;
import java.util.Arrays;
import oracle.jdbc.OracleDriver;
public class JDBCTest {
public boolean success = false;
public JDBCTest() {
System.setProperty("oracle.net.tns_admin", "S:\\"); // Modify your path here
}
public static void debug(Object obj) {
System.out.println(obj);
}
public String processSync(String[] sourceConfig, String[] descConfig) {
String vReturn = "Successfully copied the data from " + sourceConfig[0] + " to "
+ descConfig[0];
String thinConn = "jdbc:oracle:thin:@" + sourceConfig[0];
String username = sourceConfig[1];
String password = sourceConfig[2];
Connection conn1 = null;
Statement statement = null;
try {
DriverManager.registerDriver(new OracleDriver());
debug("Source DB:"+Arrays.asList(sourceConfig));
conn1 = DriverManager.getConnection(thinConn, username,
password);
conn1.setAutoCommit(false);
statement = conn1.createStatement();
debug("Connect Successfully to source DB!");
} catch (SQLException sqle) {
vReturn="Connect to source DB failed!"+"["+sqle.getMessage()+"]";
debug("Connect to source DB failed!");
}
thinConn = "jdbc:oracle:thin:@" + descConfig[0].trim();
password = descConfig[1].trim();
username = descConfig[2].trim();
Statement statement2 = null;
Connection conn2 = null;
try {
DriverManager.registerDriver(new OracleDriver());
debug("Dest DB:"+Arrays.asList(descConfig));
conn2 = DriverManager.getConnection(thinConn, username,
password);
conn2.setAutoCommit(false);
statement2 = conn2.createStatement();
debug("Connect Successfully to dest DB!");
} catch (SQLException sqle) {
vReturn="Connect to dest DB failed!"+"["+sqle.getMessage()+"]";
debug("Connect to dest DB failed!");
}
if (conn1 != null && conn2 != null) {
debug("Successfully connect to both Databases");
}else{
return vReturn;
}
success = true;
return vReturn;
}
public static void main(String[] args) throws Exception {
JDBCTest newTest = new JDBCTest();
String[] sourceConfig={"TESTDB1","AAA","AAA!"};
String[] descConfig={"TESTDB2","BBB","BBB!"}; //{"TESTDB3","CCC","CCC"};
newTest.processSync(sourceConfig, descConfig);
}
}
использовать свое подключение thinConn и thinConn2 и попробовать – constantlearner
Почему вы используете Накладка для 2-ой базы данных, почему не первый – constantlearner