2016-05-27 18 views
-2

ファイルを実行しているときにこのエラーが表示され、何をすべきか分かりません。ヘルプが間違っていないようです結果セットが空の場合、構文は...変数IDが初期化されていない可能性があります(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番目のオプションエラー:for(int i = 0; i JHk1821

+0

私の答えに追加した最後の提案を試してください。 'id'を使用しようとしている場所であればどこでも実行できるようにする必要があります。基本的な問題は、 'id'が初期化されていることを保証していないか、または初期化されていない場合にあなたのコードが使用されていることを保証していないことです。 – gmiley

+0

もしも(id!= null)が私にもう一度比類のない型を教えてくれたら – JHk1821

0

あなたは、whileループで「ID」を設定しているとして、それが初期化されないことがあります。これは、このコンパイラエラーが表示されている理由です。宣言時にIDを初期化してください。 -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フィールドがnullまたは空白です。印刷するか、アラートに値を確認してください。 これは、変数IDが初期化されていない可能性がある理由です。

+0

あなたは私に提案を書くことができますか? – JHk1821

関連する問題