![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 24.08.2011
Сообщений: 138
|
![]()
Доброго времени суток.
Уже 2 дня бьюсь над следующей проблемой. Не могу записать данные в таблицу БД Oracle. Среда разработки Netbeans 8.2. JDK 1.8. Всё имеет 64 битную разрядность. ПК с 64 битной ОС Windows 7. На машине стоит Oracle Client 10.2. Клиент 32 битный. Переустанавливать его не хочу, так как рабочий ПК, и установлен клиент не мной. Кроме того, его используют некоторые приложения, написанные на C++. Для подключения использую драйвер ojdbc14.jar, что лежит в папке с установленным клиентом. Пробовал и другие драйверы, ничего не помогает. Скачивал ojdbc6.jar, тоже не работает. Извиняюсь за тупость, но разницы между драйверами не понимаю. Единственное, что понял, так это то, что есть чисто драйвера, написанные на java, а есть типа прослойки, работающей через драйвер, написанный на С. И так много воды. В чём суть проблемы. А проблема в том, что когда я подключаюсь вот так DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); con = DriverManager.getConnection("jdbc ![]() То никаких исключений не выбрасывается. Прекрасно работает SELECT. INSERT тоже вроде как отрабатывает, возвращает единицу, что должно говорить о том, что одна строка записана. Но, не тут-то было. Когда через OraDeveloper захожу в БД, то новые записи отсутствуют. Никаких админских ограничений нет, проверял напрямую через создание sql-запроса в OraDeveloper. Всё нормально проходит. То есть, проблема либо в моём кривонаписанном коде, либо в драйверах. Когда подключаюсь вот так con = DriverManager.getConnection("jdbc ![]() ![]() То выбрасывается исключение Оно понятно. 64 битная JVM не будет работать с 32 битными dll. Выкладываю вариант класса, где происходит подключение и попытка записи в БД. package ExchangeUtil; import java.io.*; import java.sql.*; public class WriteTransportFilesDB { private DataBaseData dataBaseData; private String host; private String dataBaseName; private String userName; private String password; private int port; private String typeDB; private Connection con = null; //private final String sql = "INSERT INTO rtri (NOM_KAN,BEG_dat,End_dat, Kol_kdg, seans, object, nip, Rts1, Rts2, Vid_izm, TRI_MAS) VALUES(?,?,?,?,?,?,?,?,?,?,?)"; private final String sql = "INSERT INTO RTRI (NOM_KAN) VALUES(?)"; public WriteTransportFilesDB(DataBaseData dataBaseData, String host, String dataBaseName, String userName, String password, int port, String typeDB) { this.dataBaseData = dataBaseData; this.host = host; this.dataBaseName = dataBaseName; this.userName = userName; this.password = password; this.port = port; this.typeDB = typeDB; } public boolean connect(){ switch(typeDB){ case "oracle": try { //Class.forName("oracle.jdbc.driver.O racleDriver"); // OracleDataSource ods = new OracleDataSource(); // ods.setDriverType("thin"); // ods.setServerName(host); // ods.setDatabaseName(dataBaseName); // ods.setPortNumber(port); // ods.setUser(userName); // ods.setPassword(password); // // con = ods.getConnection(); DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); con = DriverManager.getConnection("jdbc ![]() //con = DriverManager.getConnection("jdbc ![]() ![]() con.setAutoCommit(false); con.setReadOnly(false); //pStatement = con.prepareStatement(sql,ResultSet. TYPE_SCROLL_SENSITIVE,ResultSet.CON CUR_UPDATABLE); //pStatement = con.prepareStatement(sql); DatabaseMetaData dbmd = con.getMetaData(); System.out.println("dbName: " + dbmd.getDatabaseProductName()); System.out.println("driverVersion: " + dbmd.getDriverVersion()); } catch (Exception e) { System.out.println("Не удалось создать oracle соединение: " + e.getMessage()); return false; } break; default: return false; } return true; } public boolean isClosed() throws SQLException{ return con.isClosed(); } public int insertDataRTRI(){ File file = null; int retVal = 0; try(PreparedStatement ps = con.prepareStatement(sql);BufferedI nputStream bis = new BufferedInputStream(new FileInputStream(file = new File("temp/final_" + dataBaseData.getType() + "/" + dataBaseData.getName())))){ System.out.println("OK!"); ps.setString(1, String.valueOf(dataBaseData.getNOM_ KAN())); // pStatement.setDate(2,new Date(dataBaseData.getBEG_dat().getT imeInMillis()),dataBaseData.getBEG_ dat()); // pStatement.setDate(3,new Date(dataBaseData.getEnd_dat().getT imeInMillis()),dataBaseData.getEnd_ dat()); // pStatement.setString(4, String.valueOf(dataBaseData.getKol_ kdg())); // pStatement.setString(5, String.valueOf(dataBaseData.getSean s())); // pStatement.setString(6, String.valueOf(dataBaseData.getObje ct())); // pStatement.setString(7, String.valueOf(dataBaseData.getNip( ))); // pStatement.setString(8, String.valueOf(dataBaseData.getRts1 ())); // pStatement.setString(9, String.valueOf(dataBaseData.getRts2 ())); // pStatement.setString(10, dataBaseData.getVid_izm()); // pStatement.setBinaryStream(11, bis,(int)file.length()); retVal = ps.executeUpdate(); //con.commit(); //pStatement.close(); // ResultSet rs = pStatement.executeQuery("SELECT * FROM rtri ORDER BY dwrd DESC"); // // while(rs.next()) System.out.println("tbl: " + rs.getString("BEG_DAT")); // ////////////----------------------- // // pStatement.executeUpdate("INSERT INTO rtri(LEN_ZAG) VALUES(777)"); // con.commit(); // //pStatement.closeOnCompletion(); // // con.close(); System.out.println("warn: " + ps.getWarnings()); } catch (Exception e) { retVal = 0; } return retVal; } } Что мне делать? Переустанавливать Oracle Client не хочется. Среду с JVM тоже не хотелось бы. Как может быть так, что SELECT проходит, а INSERT нет? PS Сорри, что одним текстом. Со смартфона отправил. |
![]() |
![]() |
![]() |
#2 | |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]() Цитата:
Разбирайтесь, как сделать его явно либо автоматом |
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 24.08.2011
Сообщений: 138
|
![]() |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 24.08.2011
Сообщений: 138
|
![]()
ExecuteUpdate возвращает 1. А просто execute - false. Как-то странно...
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 24.08.2011
Сообщений: 138
|
![]()
Может Касперский блокирует? Не могу проверить, всё запаролено.
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 24.08.2011
Сообщений: 138
|
![]()
Ошибка была очень тупой. Я подключался по одному ip, а в tnsnames был другой ip для этого sid. OraDeveloper брал ip из tnsnames. Я работал с разными бд... Сорри
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
insert into сразу в несколько таблиц (вложенный insert) | dualtrey | Помощь студентам | 10 | 23.01.2017 18:00 |
Почему при указании пути через имя компа сканирование не проходит, а через IP - проходит? | Oxidous | Операционные системы общие вопросы | 2 | 16.03.2016 11:00 |
бэкап проходит средствами sql но не проходит средствами 1с | so1idsnake | Помощь студентам | 4 | 16.09.2013 08:44 |