2014-01-04 4 views
7

Я создал локальную базу данных в DB2 под названием «TestDB», после чего создал таблицу под названием «TestTable».
Я обнаружил, что таблица ставится под названием схемы «yasmin».
Я пытаюсь подключиться к базе данных с использованием DB2JDBC, но я получил это исключениеОшибка DB2 SQL: SQLCODE = -204, SQLSTATE = 42704

R SQLException information 
[1/4/14 11:32:59:289 EST] 0000004d SystemErr  R Error msg: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.TESTTABLE, DRIVER=3.61.86 
[1/4/14 11:32:59:290 EST] 0000004d SystemErr  R SQLSTATE: 42704 
[1/4/14 11:32:59:290 EST] 0000004d SystemErr  R Error code: -204 
[1/4/14 11:32:59:290 EST] 0000004d SystemErr  R com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.TESTTABLE, DRIVER=3.61.86 

Я пытался много решений в Интернете Как заданной схеме, но, к сожалению, не работает.

Это код JDBC Я использовал

String urlPrefix = "jdbc:db2:"; 
     String url; 
     String user; 
     String password; 
     String empNo;                
     Connection con; 
     Statement stmt; 
     ResultSet rs; 

     url = urlPrefix + "//127.0.0.1:50000/TestDB"; 
     user = "db2admin"; 
     password = "db2admin"; 
     try 
     {                   
      // Load the driver 
      Class.forName("com.ibm.db2.jcc.DB2Driver");        
      System.out.println("**** Loaded the JDBC driver"); 

      // Create the connection using the IBM Data Server Driver for JDBC and SQLJ 
      con = DriverManager.getConnection (url, user, password);     
      // Commit changes manually 

      con.setAutoCommit(false); 
      System.out.println("**** Created a JDBC connection to the data source"); 
      stmt = con.createStatement(); con.createStatement();           
      System.out.println("**** Created JDBC Statement object"); 
      // Execute a query and generate a ResultSet instance 

      rs = stmt.executeQuery("select *from TestTable");     
      System.out.println("**** Created JDBC ResultSet object"); 
     } 

     catch (ClassNotFoundException e) 
     { 
      System.err.println("Could not load JDBC driver"); 
      System.out.println("Exception: " + e); 
      e.printStackTrace(); 
     } 

     catch(SQLException ex)              
     { 
      System.err.println("SQLException information"); 
      while(ex!=null) { 
      System.err.println ("Error msg: " + ex.getMessage()); 
      System.err.println ("SQLSTATE: " + ex.getSQLState()); 
      System.err.println ("Error code: " + ex.getErrorCode()); 
      ex.printStackTrace(); 
      ex = ex.getNextException(); // For drivers that support chained exceptions 
      } 
     } 
+0

Plz мне нужна ваша помощь. Вопрос рассматривается 10 раз и ответа нет. Если вопрос не чист, скажите мне, какую дополнительную информацию я должен добавить. – Yasmin

ответ

2

Ошибка SQLERROR -204, SQLSTATE 42704 недостающее/неизвестно имя_объекта и он, скорее всего, вызвано недостающего пространства в:

rs = stmt.executeQuery("select *from TestTable"); 

Какой должна быть:

rs = stmt.executeQuery("select * from TestTable"); 
+0

Извините, но я не знаю, о каком пространстве вы говорите? – Yasmin

+0

@ Yasmin см. Мое редактирование. –

+0

Я меняю его, но, к сожалению, не работает – Yasmin

10

Как @Mark Rotteveel сказал, ошибка -204 является результатом am Исследуя объект, но он отсутствует по какой-то причине, кроме того, что он сказал.

Это не найдено, потому что вы не указали его имя схемы. Вы сказали выше, что это в схеме yasmin, но вы подключаетесь к db2admin, поэтому он пытается найти db2admin.TestTable.

SELECT * FROM yasmin.TestTable 

должно быть тем, что вы ищете.

По умолчанию путь поиска для схем - это имя текущего подключаемого пользователя. Вы можете увидеть, что он использует

SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1 

Если вы хотите изменить его, вы можете использовать команду SET SCHEMA изменить путь поиска, но, как правило, это проще просто включить имя схемы в запросе.

+0

К сожалению, я использовал этот запрос раньше, но также не работает. Я попытался установить схему таблицы в db2 как «db2admin» с помощью запроса и проверить текущую схему с помощью запроса. это изменило. После этого, если я просматриваю схему таблицы, то тот же самый «yasmin» не изменяется. – Yasmin

2

Проблема была таблица, я создал в db2 имеет имя схемы "yasmin"
я использовал имя пользователя и пароль "db2admin/db2admin" В связи JDBC
поэтому искать таблицы в этой схеме «db2admin»
так что мне нужно, чтобы установить схема быть "yasmin"
поэтому я добавил следующие строки кода после создания соединения

  String schemaName="yasmin"; 
      if (schemaName != null && schemaName.length() != 0) { 

      try { 
       statement = connection.createStatement(); 
       statement.executeUpdate("set current sqlid = " + schemaName); 
       System.out.println("The schema is set successfully."); 
      } catch (SQLException exception) { 
       exception.printStackTrace(); 

      } 

и предоставить db2admin все privilages на этом та BLE в db2

1-правой кнопкой мыши на таблице выбрать privilages
2-Нажмите на кнопку «Добавить пользователя» кнопку
3-то написать имя пользователя «db2admin» и нажмите кнопку «Применить»
4-Затем выберите пользователя, которого вы только что добавили, и нажмите кнопку «gtant all»

Теперь он может видеть стол.

Большое спасибо @Mark Rotteveel и @bhamby за вашу помощь.

0

Если вы подключаетесь в Spring с помощью использования Hibernate в следующей строке свойств

<property name="url" value="jdbc:db2://<ip>:<port>/<database>:currentSchema=<currentSchema>;" /> 
0

Другой способ просто создать алиас, любит это:

CREATE ALIAS USER1.YOURTABLE FOR TABLE USER2.YOURTABLE; 
Смежные вопросы