2015-06-26 3 views
0

У меня есть код для открытия двух файлов на одном сервере и обновления данных из этих файлов на другой сервер базы данных. Я могу открыть соединение с БД, но когда я пытаюсь обновить одну таблицу на сервере БД, он дает соединение только для чтения, но не может обновить таблицу. Не знаю, где я делаю неправильно. Пожалуйста, помогите мне в этом, ошибка ниже: говорит enter image description hereКак обновить таблицу на одном сервере с другого сервера

import java.io.*; 
import java.sql.*; 

public class tstnew 
{ 

    public static void main (String args[]) throws Exception 
    { 

FileInputStream fin,fin1;  
    int k=0; 
String line,line1,s,s1,g,g1,d,d1; 
     try 
     { 

Class.forName ("oracle.jdbc.driver.OracleDriver"); 

//DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 

Connection conn = DriverManager.getConnection 
    ("jdbc:oracle:thin:@192.168.195.38:1521:ROW1", "********", "********"); 
System.out.println("connected"); 
Statement stmt = conn.createStatement(); 

//fin = new FileInputStream ("C:/Users/BOT2/Desktop/OGL/MC_WIth_DATA_Files.txt"); 
System.out.println("1"); 
fin = new FileInputStream ("C:/Users/Administrator/Desktop/SetUp/MC_WIth_DATA_Files.txt"); 

fin1 = new FileInputStream ("C:/Users/Administrator/Desktop/SetUp/MC_With_Empty_Files.txt"); 


DataInputStream in1 = new DataInputStream(fin); 

BufferedReader br1 = new BufferedReader(new InputStreamReader(fin)); 
System.out.println("1"); 
BufferedReader br2= new BufferedReader(new InputStreamReader(fin1)); 

while ((line=br1.readLine())!= null){ 
    k++; 
    s=line.replaceAll("[0-9_]+", ""); 

g=s.replaceAll("\\s+",""); 

if(g.equals("Baltic")){g="Baltics";} 
if(g.equals("Netherlands")){g="Netherland";} 
if(g.equals("SouthAfricaSubSahara")){g="SSA";} 
if(g.equals("Algeria")){g="ALGERIA";} 
if(g.equals("EmergingMENA")){g="EMM";} 
if(g.equals("SaudiArabia")){g="Saudi Arabia";} 
if(g.equals("SouthAfrica")){g="South Africa";} 
if(g.equals("Slovakia")){g="slovakia";} 

System.out.println(g); 

d="update ogl_table_status set status = 1 where mc_name='"+ g +"' and status=0"; 
stmt.executeUpdate(d); 

} 


    while ((line1=br2.readLine())!= null){ 
    k++; 

    s1=line1.replaceAll("[0-9_]+", ""); 


g1=s1.replaceAll("\\s+",""); 


if(g1.equals("Baltic")){g1="Baltics";} 
if(g1.equals("Netherlands")){g1="Netherland";} 
if(g1.equals("SouthAfricaSubSahara")){g1="SSA";} 
if(g1.equals("Algeria")){g1="ALGERIA";} 
if(g1.equals("EmergingMENA")){g1="EMM";} 
if(g1.equals("SaudiArabia")){g1="Saudi Arabia";} 
if(g1.equals("SouthAfrica")){g1="South Africa";} 
if(g1.equals("Slovakia")){g1="slovakia";} 

System.out.println(g1); 

d1="update ogl_table_status set status = 1 where mc_name='"+ g1 +"' and status=0"; 

stmt.executeUpdate(d1); 

} 
conn.commit(); 
System.out.println(k); 
stmt.close(); 
br1.close(); 
br2.close(); 
    fin.close(); 
    fin1.close(); 
     } 
     // Catches any error conditions 
     catch (IOException e) 
     { 
      System.err.println ("Unable to read from file"); 
      System.exit(-1); 

     } 
    } 
} 
+1

хорошего имя пользователя и пароль, там – MrSimpleMind

+0

я хотел бы предложить вам проверить права доступа DB - вы можете изменить строку, если вы подключаетесь через клиент дб (например: sqldeveloper). – Josh

+0

Возможно, потому, что пользователь «azglobal_users_qc» не имеет права обновлять что-либо. Возможно, когда dba этого сервера предоставил вам этого пользователя, он/она ограничил привилегии вставки/обновления/удаления этого пользователя. Вы должны позвонить ему/ей. Также вы можете выполнить свой sql вне jdbc, например, разработчика plsql или разработчика oracle sql, если есть проблема или нет. (проверьте привилегии с помощью этого способа) – STaefi

ответ

1

Ошибка:

база данных открыта только для чтения доступа

В настоящее время вы можете выполнить, кроме ЗЕЬЕСТ. Вам необходимо открыть Oracle DB в режиме записи, как предварительно this article для того, чтобы выполнить UPDATE заявления

+0

.. Теперь он работает, теперь у меня есть чтение/запись. –

Смежные вопросы