2014-03-05 1 views
1

갑자기 내 MySQL 데이터베이스에 문제가 있습니다. 나는 다음과 같은 요청을 보내 내 서블릿에서QLException catch : 열 개수가 행의 값 개수와 일치하지 않습니다.

P_id INT NOT NULL AUTO_INCREMENT, 
Date DATE NOT NULL, 
Name VARCHAR(32) NOT NULL, 
Address VARCHAR(32) NOT NULL, 
Day_hours INT NOT NULL, 
Day_minutes INT NOT NULL, 
Km_to_address INT NOT NULL, 
Time_to_address INT NOT NULL, 
Allday_hours INT 
PRIMARY KEY(P_id) 

:

Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(connectionURL, "root", ""); 
      String sql = "INSERT INTO Workdata VALUES (?,?,?,?,?,?,?)"; 
      PreparedStatement pst = connection.prepareStatement(sql); 
      pst.setString(1, Date); 
      pst.setString(2, Name); 
      pst.setString(3, Address); 
      pst.setString(4, Day_hours); 
      pst.setString(5, Day_minutes); 
      pst.setString(6, Km_to_address); 
      pst.setString(7, Time_to_address); 

      pst.executeUpdate(); 
      pst.close(); 

을 그래서 요점은 그냥 자동으로 계산해야 기본 키, 나의 P_id을해야한다는 것입니다 내 데이터베이스에 다음과 같은 열이 몇 가지 데이터를 추가 할 때마다 알다시피 나는 Allday_hours에 setString을 가지고 있지 않다. 이 열을 사용하여 Day_hours 및 Day_minutes를 계산합니다. 나는 쿼리로 이것을한다 :

SELECT *, (Day_hours + (Day_minutes/100)) as Allday_hours FROM Workdata 

이것은 나의 여자 친구가 하루 동안 다른 장소에서 일하는 것이다. 따라서 그녀는 fx에 5 개의 다른 장소를 넣을 수 있으며 Allday_hours는 그녀가 하루 동안 얼마나 일했는지 계산합니다. 나는 JSP 사이트에서 내 데이터에 넣어 때 나는 오류를 얻을 :

QLException 잡은 : 열 수는 행에서 값의 수를 일치하지 않는 1

나는 내 서블릿 함께 할 수있는 뭔가가 생각 것 , 어디 setString (1, 날짜) 내. 나는 그것을 setString (2, date)로 설정하려고 시도했으며 다른 것을 3, 4, 5 등으로 변경하려고 시도했다.

누군가 내가 뭘 잘못하고 있는지 볼 수 있니? 모두들 감사합니다. Mads에서

답변

1

당신의 테이블에 실제로 9 열이 있지만 귀하의 쿼리에서 삽입 쿼리에 포함 된 열을 넣지 않고 7 개의 값만 삽입하기 때문에 오류가 발생한다고 생각합니다. 쿼리에서 어떤 열이 사용될 지 지정하는 것이 좋습니다. 또한 귀하의 열 Allday_hours 나는 그 테이블에 있어야한다고 생각하기 때문에 허구로 귀하의 선택 쿼리에 의해 만들어집니다. 귀하의 P_id 열은 자동 증가 열이므로 자체 쿼리 열에서 피할 수 있습니다.

String sql = "INSERT INTO Workdata (date, name, address...) VALUES (?,?,?,?,?,?,?)"; 
+0

답장을 보내 주셔서 감사합니다. 나는 지금 그것을 시험해 볼 것이다. 나는 Allday_hours에 대해 실제로 생각했다. 그러나 fx 4 작업으로 하루를 어떻게 계산할 수 있습니까? (내 질문을 편집하여 의미를 알 수 있습니다.) – McDuck4

+0

다음과 함께 작동합니다 : String sql = "INSERT INTO Workdata (날짜, 이름, 주소 ...) VALUES (?,?,?,?,? ,?,?) "; :-) – McDuck4

+0

답이 맞다면이 답을 올바른 것으로 표시해야합니다. 이 문제가 해결 된 후에 새로운 대답을 찾으면 실제 질문을 편집하는 대신 새로운 시나리오로 새로운 질문을해야합니다 – Fabio

0

Allday_hours를 데이터 모델의 실제 열로 정의하면 안됩니다. 당신은 선택 쿼리와 허구의 열을 반환합니다 ...

+0

답을 보내 주셔서 감사합니다. 데이터베이스에서 Allday_hours 열을 삭제하려고했지만 여전히 동일한 오류가 발생합니다. 기본 키와 관련이 없습니까? 아니면? – McDuck4