2013-07-18 2 views
-2

내가 get 메서드를 작성했지만 set 메서드를 작성하려고하지만 내게 오류가 발생했습니다 - PreparedStatement 형식의 setString (int, String) 메서드는 인수 (String, String, String, String, String)에 적용 할 수 없습니다. 내 코드는 아래에 있습니다. package com.glomindz.mercuri.dao ;- PreparedStatement 형식의 setString (int, String) 메서드는 인수에 적용 할 수 없습니다 (String, String, String, String, String,

;

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 

import com.glomindz.mercuri.pojo.User; 
import com.glomindz.mercuri.util.MySingleTon; 

public class UserServicesDAO { 

private Connection connection; 

public UserServicesDAO() { 
    // connection = new MySingleTon().getConnection(); 
    connection = MySingleTon.getInstance().getConnection(); 

} 

public List<User> get_all_data() { 
    List<User> usersList = new ArrayList<User>(); 
    try { 
     PreparedStatement stmt = connection.prepareStatement("INSERT INTO    spl_user_master(name,email,mobile,password,role,status,last_update)VALUES(?,?,?,?,?,?,?)"); 
     stmt.setString("Charlie Sheen","[email protected]","9654087107","cbf51a71a11d7ec348b0d7e9b2f0055f","admin","3","null"); 

     boolean execute = stmt.execute(); 
     System.out.println(execute); 
     ResultSet resultSet = stmt.getResultSet(); 
     System.out.println(resultSet.getMetaData()); 
     while (resultSet.next()) { 
      User user = new User(); 
      user.setId(resultSet.getInt("id")); 
      user.setName(resultSet.getString("name")); 
      user.setEmail(resultSet.getString("email")); 
      user.setMobile(resultSet.getString("mobile")); 
      user.setPassword(resultSet.getString("password")); 
      user.setRole(resultSet.getString("role")); 
      user.setStatus(resultSet.getString("status")); 
      user.setLast_udpate(resultSet.getString("last_update")); 
      usersList.add(user); 
     } 
    } 

    catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return usersList; 

} 

public static void main(String[] args) { 
    UserServicesDAO userdao = new UserServicesDAO(); 
    List<User> data = userdao.get_all_data(); 
    System.out.println(data); 
    System.exit(0); 
} 

} 내 사용자 클래스는 패키지 com.glomindz.mercuri.pojo입니다

답변

2

PreparedStatement.setString()은 가변적 인 방법이 아닙니다. 그것은 변수 no를 취하지 않습니다. 인수의. 각 자리는 (?) 등

stmt.setString(1, "Charlie Sheen"); 
stmt.setString(2, "[email protected]"); 

등을 사용하여 individualy 설정해야합니다. 봄의 여기

jdbcTemplate.update("INSERT INTO spl_user_master(name,email,mobile,password,role,status,last_update)VALUES(?,?,?,?,?,?,?)", new Object[] { 
     "Charlie Sheen","[email protected]","9654087107","cbf51a71a11d7ec348b0d7e9b2f0055f","admin","3","null"}); 
0

JdbcTemplate이 문제는, 당신은 한 번 setString 등을 사용하여 한 번에 모든 PARAMS을 설정할 수 없습니다 사용

. 당신은의 javadoc에서 하나 :

stmt.setString("Charlie Sheen","[email protected]","9654087107","cbf51a71a11d7ec348b0d7e9b2f0055f","admin","3","null"); 

에 의해, setString의 하나를 사용하여 각 PARAM을 설정해야합니다

setString

무효 setString의

은 (차례 parameterIndex, 문자열 X를 INT) 는 되는 SQLException

발생

지정된 매개 변수를 제공된 Java String 값으로 설정합니다. 드라이버는이 값을 데이터베이스로 보낼 때이 값을 VARCHAR 값의 드라이버 한계를 기준으로 인수 크기에 따라 에 따라 SQL VARCHAR 또는 LONGVARCHAR 값으로 변환합니다.

매개 변수 : 차례 parameterIndex가 -

예외 매개 변수 값 - 최초의 파라미터는 1, 2 번째는 ... X 2 : SQLException - 데이타 차례 parameterIndex가 SQL 문에 매개 변수 마커에 대응하지 않는 경우 ; 데이터베이스 액세스 에러 가 발생했을 경우, 또는이 메소드 this 오라클 가이드에 도시 ​​된 바와 같이 폐쇄 된 PreparedStatement

0

에 호출되면 setString있어서의 값을 나타내는 파라미터 및 문자열의 개수를 나타내는 정수 취하고 . 따라서, 귀하의 경우, 당신과 같이 일을 할 필요가있을 것이다 :이 작동하지 않습니다

PreparedStatement stmt = connection.prepareStatement("INSERT INTO spl_user_master(name,email,mobile,password,role,status,last_update)VALUES(?,?,?,?,?,?,?)"); 
stmt.setString(1, "Charlie Sheen"); 
stmt.setString(2, "[email protected]"); 
... 
1
stmt.setString("Charlie Sheen","[email protected]","9654087107","cbf51a71a11d7ec348b0d7e9b2f0055f","admin","3","null"); 

. 다음과 같이 개별적으로 설정해야합니다.

stmt.setString(1, "Charlie Sheen); 

여기서 1은 변수의 위치이고 "Charlie Sheen"이 값입니다.PreparedStatement에있는 모든 자리 표시 자 ?에 대해이 작업을 수행해야합니다.

0

다른 사람들이 이미 게시 한 것처럼 잘못된 매개 변수를 setString() 메서드에 전달하고 있습니다. 쿼리에서 개별적으로 정의 된 각 작업 영역 홀더 ?에 값을 설정해야한다는 것을 기억하십시오. 기억 setString()

PreparedStatement stmt = connection.prepareStatement("INSERT INTO 
    spl_user_master(name,email,mobile,password,role,status,last_update) 
    VALUES(?,?,?,?,?,?,?)"); 
stmt.setString(1,"Charlie Sheen"); 
stmt.setString(2,"[email protected]"); 

    ... so on ... 

는 대응 열 SQL VARCHAR or LONGVARCHAR로 정의되는 경우, 플레이스 홀더 대신 SQL VARCHAR or LONGVARCHAR 값을 설정하는 데 사용된다. 다른 데이터 유형의 경우 API에 다양한 setXXX() 메소드가 있습니다.

관련 문제