2016-05-27 4 views
-2

Оказывает мне эту ошибку, когда я запускаю файл ... и я не знаю, что делать ... любая помощь, кажется, не ошибается в синтаксис ...Идентификатор переменной может быть не инициализирован (JSP)

 Compiling 3 source files to C:\Users\ioann_000\Documents\NetBeansProjects\Project 
ΒΔ\build\generated\classes 
C:\Users\ioann_000\Documents\NetBeansProjects\Project 
ΒΔ\build\generated\src\org\apache\jsp\assets\jsp\create_002ddest_002dcode_0020_00282_0029_jsp.java:80: 
error: variable id might not have been initialized 
       int insert_ch=myStatement.executeUpdate("INSERT INTO Dest_has_Categories (Dest_idDest,Categories_idCategories) VALUES 
('"+id+"','"+cat[i]+"')"); 
                                     ^1 error C:\Users\ioann_000\Documents\NetBeansProjects\Project 
ΒΔ\nbproject\build-impl.xml:953: The following error occurred while 
executing this line: 
C:\Users\ioann_000\Documents\NetBeansProjects\Project 
ΒΔ\nbproject\build-impl.xml:296: Compile failed; see the compiler 
error output for details. BUILD FAILED (total time: 1 second) 

код

<% 


    String id8=request.getParameter("id8"); //Country field 
    String id9=request.getParameter("id9"); //City field 
    String id10=request.getParameter("id10"); //URL field 
    int id; 

      Class.forName("com.mysql.jdbc.Driver"); 
      String myDatabase = "jdbc:mysql://localhost:3306/project_app?user=root&password=1234"; 
      Connection myConnection = DriverManager.getConnection(myDatabase); 
      Statement myStatement = myConnection.createStatement(); 

      String sqlInsert = "INSERT INTO dest(Country,City,URL) VALUES ('"+id8+"', '"+id9+"','"+id10+"')"; 
      myStatement.executeUpdate(sqlInsert); 
      ResultSet rs = myStatement.executeQuery("SELECT idDest FROM dest WHERE Country='"+id8+"' AND City='"+id9+"' AND URL='"+id10+"'"); 
      while (rs.next()) { 
       id=rs.getInt(1); 
      } 
      String cat[]=request.getParameterValues("dest1"); 

      for(int i=0;i<cat.length;i++) 
      { 
       int insert_ch=myStatement.executeUpdate("INSERT INTO Dest_has_Categories (Dest_idDest,Categories_idCategories) VALUES ('"+id+"','"+cat[i]+"')"); 

      } 
+0

Был ли предоставлен любой из ответов на ваши исходные проблемы? – gmiley

ответ

1

Вы объявляете int id;, но вы никогда не устанавливаете значение для него. Вам необходимо инициализировать (или установить для него значение), прежде чем вы сможете его использовать.

String id8=request.getParameter("id8"); //Country field 
String id9=request.getParameter("id9"); //City field 
String id10=request.getParameter("id10"); //URL field 
int id = -1; 

Class.forName("com.mysql.jdbc.Driver"); 
String myDatabase = "jdbc:mysql://localhost:3306/project_app?user=root&password=1234"; 
Connection myConnection = DriverManager.getConnection(myDatabase); 
Statement myStatement = myConnection.createStatement(); 

String sqlInsert = "INSERT INTO dest(Country,City,URL) VALUES ('"+id8+"', '"+id9+"','"+id10+"')"; 
myStatement.executeUpdate(sqlInsert); 
ResultSet rs = myStatement.executeQuery("SELECT idDest FROM dest WHERE Country='"+id8+"' AND City='"+id9+"' AND URL='"+id10+"'"); 
while (rs.next()) { 
    id=rs.getInt(1); 
} 
String cat[]=request.getParameterValues("dest1"); 

if(id > -1) 
{ 
    int insert_ch; 
    for(int i=0;i<cat.length;i++) 
    { 
     insert_ch=myStatement.executeUpdate("INSERT INTO Dest_has_Categories (Dest_idDest,Categories_idCategories) VALUES ('"+id+"','"+cat[i]+"')"); 
    } 
} 

Попробуйте приведенное выше, я изменил его, чтобы он отлично работал для вас. Я также переместил объявление int insert_ch за пределы цикла for, иначе он будет непригодным для использования в другом месте, если только вы не будете делать больше вещей только в цикле, используя insert_ch.

+0

2-я опция Ошибка: для (int i = 0; i JHk1821

+0

Попробуйте последнее предложение, которое я добавил к моему ответу. Вам нужно будет убедиться, что вы делаете это везде, где вы пытаетесь использовать 'id'. Основная проблема заключается в том, что вы не гарантируете, что инициализируется либо «id», либо ваш код защищает его от использования в случае неинициализации. – gmiley

+0

if (id! = Null) говорит мне снова несравнимые типы – JHk1821

0

Как вы настраиваете «идентификатор» в цикле в то время, он может не инициализируются, если набор результатов пуст. Именно по этой причине вы видите эту ошибку компилятора. Инициализируйте идентификатор при объявлении, и вы должны быть в порядке. -Amit

+0

что вы предлагаете? – JHk1821

+1

@JohnV Он предложил инициализировать его при объявлении. – RealSkeptic

0
int id; 
... 
ResultSet rs = myStatement.executeQuery("SELECT idDest FROM dest WHERE Country='"+id8+"' AND City='"+id9+"' AND URL='"+id10+"'"); 
while (rs.next()) { 
    id=rs.getInt(1); 
} 
... 
for(int i=0;i<cat.length;i++) 
{ 
    int insert_ch=myStatement.executeUpdate("INSERT INTO Dest_has_Categories (Dest_idDest,Categories_idCategories) VALUES ('"+id+"','"+cat[i]+"')"); 
} 

Если запрос не возвращает ни одной строки, переменная id никогда не получит значение.

+0

Что вы предлагаете? – JHk1821

+1

Кроме того, если найдены найденные результирующие строки, значение id является idDest последней найденной строки. Это то, что действительно нужно? Что делать, если значение idDest строк набора результатов не одинаково? Можете ли вы гарантировать, что запрос всегда будет возвращать образы в том же порядке? Вы не сортируете их, чтобы они могли вернуться в произвольном порядке. – FredK

0
Id=rs.getInt(1); //here 

Поле идентификатора пустым или пустым, попробуйте распечатать или предупредить, чтобы узнать, какое значение соответствует идентификатору. Вот почему это значение переменной id не может быть инициализировано

+0

Можете ли вы написать мне предложение? – JHk1821

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