2012-06-24 5 views
0

아래에있는 내 코드를 참조하십시오 ...jsp 형식의 정수를 데이터베이스 테이블에 삽입 하시겠습니까?

//connect 
//reading params from the form 
String name = request.getParameter("name"); 
String year_prime = request.getParameter("year"); 
int year = Integer.parseInt(year_prime); 

//inserting the params into table Students 
stmt.executeUpdate("insert into students(name,year) values('"+name+"', year)"); 

//close connection 

가 나는 intyear 값을 얻고, 데이터베이스 테이블에 삽입하려합니다. 그러나 오류가 발생하고 INSERT 메서드를 경우에만 Strings 함께 작동하는 것 같습니다. 누군가이 문제로 나를 도울 수 있었습니까?

  1. http://www.tutorialspoint.com/jdbc/jdbc-statements.htm
  2. http://www.tutorialspoint.com/jdbc/statement-object-example.htm

내가 추천하지 않지만 그것은 또한 일반적인되지 않습니다 :

+1

오류가 무엇을 얻고 있는가? 주의 할 점은 JSP에서 jdbc 연결을 만들고 사용하는 것이 일반적으로 좋지 않다는 것을 이미 알고 있기를 바랍니다. 전체 스택 추적에 오류 또는 예외를 제공 할 수 있다면 도움이 될 것입니다. 감사합니다. –

답변

0

다음 링크는 기본으로도 동작하는 예제와 함께 당신을 도울 수 JSP로 JDBC 연결 코드를 포함하도록 연습하는 이유는 무엇입니까? 다음은 Servlets and Jsp Best Practices입니다.

희망이 도움이됩니다.

+0

ConnectionsManager.java라는 자바 파일에서 연결을 만들었습니다. 나는 JSP로 호출한다. JSP에서 connect 메소드를 호출하고 마지막으로 close connection 메소드를 호출한다. (즉, ConnectionsManager에 연결을 리턴한다.) 오류 : – Dia

+0

executeQuery()를 사용해 보았습니다. javax.servlet.ServletException : java.sql.SQLException : executeQuery()로 데이터 조작 문을 발행 할 수 없습니다. – Dia

+0

@KyupaSuria : 다른 사람들도 볼 수 있도록 오류를 포함하도록 질문을 편집하십시오. 제 답변에 예외를 넣지 마십시오 :-) –

0

Statement 대신 PreparedStatement을 사용하십시오. 또한 executeUpdate() 대신 executeQuery()을 사용하십시오.

+0

나는 그것을 얻었습니다 (나는 또한 당신이 그들에게 감사하는 링크를 읽었습니다) : 내 기본 키 (제 경우의 ID)가 자동 증가가 아니라면, 이것을 사용합니다 구문 : stmt.executeUpdate ("학생 (ID, 이름, 연도) 값 삽입 (1, '"+ 이름 + "', 연도)"); stmt.executeUpdate ("학생 (ID, 이름, 연도) 값 삽입 (2, '"+ 이름 + "', 연도)"); ............................... 아마 루프를 사용할 것입니다. 기본 키가 AUTO INCREMENT 인 경우이 구문을 사용합니다. stmt.executeUpdate ("학생 (이름, 연도) 값 삽입 ('"+ 이름 + "', 연도)"); – Dia

+0

@carlspring :'executeUpdate()'를 생략하는 것이이 경우에 올바른 방법입니다 (http://docs.oracle.com/javase/1.5.0/docs/api/java/sql을 참조하십시오). /PreparedStatement.html#executeQuery()) 또한'PreparedStatement'는 많은 이점을 가지고 있기 때문에 추천됩니다. 그러나이 경우에는'Statement'가 또한 할 것입니다. –

+0

@PrakashK,'executeUpdate()'에 대해 당신이 맞을 수도 있지만,'PreparedStatement'를 사용하면 일반'Statement'와 함께 갈 수 있다는 것에 확실히 동의하는 반면, 보안면에서 훨씬 합리적입니다. 가능한 SQL 주입 공격을 피할 것입니다. 이것은 JSP 페이지이므로 시스템을 손상시킬 수있는 악의적으로 고안된 이스케이프되지 않은 값을 전달할 수 있음을 의미합니다. 따라서 외부 세계가 여러분의 가치에 영향을 미치지 않는 범위에서 내부적으로 사용하지 않는 한, 리걸 (regluar)'명령문 (Statements) '을 피하는 것이 좋습니다. – carlspring

4

PreapredStatement을 사용해야합니다. 귀하의 게시물에서 나는 당신이 VALUES()에 대한 잘못된 값을 가지고 있음을 볼 수 있습니다.

stmt.executeUpdate("insert into students(name,year) values ('" + name + "'," + year ")"); 

된 PreparedStatement로 데이터베이스 작업을 수행하기 쉽고 안전합니다 :

String sql="insert into students(name,year) values (?,?)"; 
PreparedStatement statement=cn.prepareStatement(sql); 
statement.setString(1,name); 
statement.setInt(2,year); 
statement.executeUpdate(); 
+0

stmt.executeUpdate ("students (name, year) values ​​("+ name + " ',"+ year ")에 삽입); :) 글쎄, 나는이 코드를 내 코드에서 한 번만 사용한다.하지만 PreparedStatement도 참고할 것이다. 고마워요! – Dia

관련 문제