2013-05-02 5 views
1

все.Не удается обновить БД SQL Server

Я относительно новичок в Java (полный нуб), но имел опыт работы с VB.Net.

Я пытаюсь обновить строку в таблице SQL2008.

Имя таблицы - _Registry.

При компиляции приведенного ниже кода он терпит неудачу с несколькими ошибками (указанными отдельно после кода). Если я прокомментирую раздел, в котором говорится: «// И вот где я столкнулся с проблемами» в блок catch, он отлично работает (кроме таблицы не обновлялся).

Любая помощь была бы принята с благодарностью!

public static void main(String[] args) 
{ 
    String host = "jdbc:sqlserver://SERVER1\\Primrose;databaseName=Primrose"; 
    String uName = "sa"; 
    String uPwd = "[email protected]"; 

// The two SQL statements I am using: 

    String queryDB = "SELECT * FROM _Registry WHERE Section = 'RecIds' AND Key_ = '_Folders' AND User_ = 'sc_general'"; 
    String updateDB = "UPDATE _Registry SET Value WHERE RecID = 5"; 

// These are the 6 columns in the table named _Registry: 
    int getRecId;   // RecId [int] IDENTITY(1,4) 
    String getUser;   // User_ [char](64) 
    String getSection;  // Section [char](64) 
    String getKey;   // Key_ [char](64) 
    String getValue;  // Value [char](255) 
    String getExtraInfo; // ExtraInfo [text] 

    int totalFolders = 10; // This is a static test value that will be used to ensure I can update the table: 

// Everything works from here until I exit the WHILE loop: 
    try 
    { 
     Connection con = DriverManager.getConnection(host, uName, uPwd); 
     Statement stmt = con.createStatement(); 

     ResultSet rs = stmt.executeQuery(queryDB); 

     // Keep reading through the table until I get my desired result: 
     while (rs.next()) 
     { 
      getRecId = rs.getInt("RecId"); 
      getUser = rs.getString("User_"); 
      getSection = rs.getString("Section"); 
      getKey = rs.getString("Key_"); 
      getValue = rs.getString("Value"); 
      getExtraInfo = rs.getString("ExtraInfo"); 

      getValue = getValue.trim(); // Strip trailing spaces from string 

      int newValue = Integer.parseInt(getValue) + 1; // Convert string to number so I can add it to total folders in template 
      newValue = newValue + totalFolders; // Change to total + existing value to write back to dB 
     getValue = Integer.toString(newValue); 
     } 

// And here is where I run into issues - I even tried 
// this "rs = stmt.executeUpdate(updateDB)" but that had no effect: 

     rs = stmt.executeQuery(updateDB); 

     rs.updateInt("RecId", getRecId); 
     rs.updateString("User_", getUser); 
     rs.updateString("Section", getSection); 
     rs.updateString("Key_", getKey); 
     rs.updateString("Value", getValue); 
     rs.updateString("ExtraInfo", getExtraInfo); 
     rs.updateRow(); 

     System.out.println("Updated successfully!"); 
    } 

    catch (SQLException err) 
    { 
     System.out.println(err.getMessage()); 
    } 
} 

А вот выход составитель:

Compiling 1 source file to C:\Java\DBupdate\build\classes 

C:\Java\DBupdate\src\dbupdate\DBupdate.java:73: error: variable getRecId might not have been initialized 
      rs.updateInt("RecId", getRecId); 
           ^

C:\Java\DBupdate\src\dbupdate\DBupdate.java:74: error: variable getUser might not have been initialized 
      rs.updateString("User_", getUser); 
            ^

C:\Java\DBupdate\src\dbupdate\DBupdate.java:75: error: variable getSection might not have been initialized 
      rs.updateString("Section", getSection); 
             ^

C:\Java\DBupdate\src\dbupdate\DBupdate.java:76: error: variable getKey might not have been initialized 
      rs.updateString("Key_", getKey); 
            ^

C:\Java\DBupdate\src\dbupdate\DBupdate.java:77: error: variable getValue might not have been initialized 
      rs.updateString("Value", getValue); 
            ^

C:\Java\DBupdate\src\dbupdate\DBupdate.java:78: error: variable getExtraInfo might not have been initialized 
      rs.updateString("ExtraInfo", getExtraInfo); 
             ^
6 errors 

C:\Java\DBupdate\nbproject\build-impl.xml:926: The following error occurred while executing this line: 

C:\Java\DBupdate\nbproject\build-impl.xml:268: Compile failed; see the compiler error output for details. 

BUILD FAILED (total time: 0 seconds) 
+2

Что вы ожидаете от значения 'getRecId', если запрос не возвращает никаких результатов? –

ответ

3

Как ошибки указывают на то, что вы пытаетесь использовать переменные, которые не могут быть инициализированы. Попробуйте инициализировать их до нуля или убедитесь, что вы установили их в какое-то полезное значение, прежде чем пытаться их прочитать.

Кроме того, ваш запрос на обновление SQL недействителен: вы не можете просто SET Value, вы должны SET Value= и придать ему некоторое значение.

+0

Вы, ребята, были потрясающе - я применил ваши предложения, и это сработало! Однако, хотя он работает (таблица теперь обновляется с ожидаемыми результатами, когда я запускаю программу в NetBeans, я вижу этот вывод - все, что я хочу видеть, - это сообщение об успешном завершении, если оно сработало - это просто ? NetBeans вещь 'code'run: ' 'code'5 code'sc_general ' 'code'RecIds code'_FOLDERS ' 'code'1023 code'null ' code'String после изменения ПолучитьЗначение: 'code'5 ' code'sc_general 'code'RecIds ' code'_FOLDERS 'code'1034 ' code'nu ll 'code' Заявление не возвратило результирующий набор. 'code'BUILD SUCCESSFUL (общее время: 0 секунд) – user2199508

+0

Это связано с вызовами' System.out.println' - выводами на консоль, которые, если вы запускаете из NetBeans, являются консольной панелью NetBeans. – Adrian

+0

Фактически, сообщение генерируется блоком CATCH - как только «rs = stmt.executeQuery (updateDB)»; выполняется. Я не понимаю, почему ... – user2199508

1

Ошибка «Переменная, возможно, не была инициализирована» означает только то, что она говорит. Поскольку объявление этих переменных находится внутри цикла while, что произойдет, если результаты не будут возвращены из базы данных? Ответ: переменные не будут инициализированы, потому что тело цикла while никогда не выполняется. Попробуйте объявить эти переменные значения по умолчанию вне цикла, и код должен скомпилироваться.

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