2013-07-18 3 views
-2

i hav написал метод get, но я хочу написать метод set, но затем он дает мне ошибку: метод setString (int, String) в типе PreparedStatement не применим для аргументов (String, String, String, String, String), мой код приведен ниже package com.glomindz.mercuri.dao ;- Метод setString (int, String) в типе PreparedStatement не применим для аргументов (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;

 public class User { 

private int id; 

    private String Name; 

private String email; 

private String mobile; 

private String password; 

private String role; 

private String status; 

private String last_update; 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getName() { 
    return Name; 
} 

public void setName(String name) { 
    Name = name; 
} 

    public String getEmail() { 
    return email; 
} 

    public void setEmail(String email) { 
    this.email = email; 
    } 

    public String getMobile() { 
    return mobile; 
    } 

    public void setMobile(String mobile) { 
    this.mobile = mobile; 
    } 

    public String getPassword() { 
    return password; 
    } 

    public void setPassword(String password) { 
    this.password = password; 
} 

    public String getRole() { 
    return role; 
    } 

    public void setRole(String role) { 
    this.role = role; 
    } 

    public String getStatus() { 
    return status; 
} 

    public void setStatus(String status) { 
     this.status = status; 
    } 
    public String getLast_update() { 
    return last_update; 
    } 



    public void setLast_udpate(String last_update) { 
// TODO Auto-generated method stub 

    } 




    @Override 
    public String toString() { 
    return "User [id=" + id + "Name=" + Name + ", email=" + email + ", mobile=" + mobile 
      + ", password=" + password + ", role=" + role + ", status=" 
      + status + ", last_update=" + last_update + "]"; 
    } 



    } 

ответ

2

PreparedStatement.setString() не является методом переменной arity; он не принимает переменную нет. аргументов. Каждый заполнитель (?) должен быть установлен individualy с помощью

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

и так далее.

Использование весны JdbcTemplate

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

Вот проблема, вы не можете установить все Params сразу используя SetString. Вы должны установить для каждого из параметров, используя SetString один на один .:

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

Из Javadocs:

setString

недействительной SetString (INT parameterIndex, Строки х) бросает SQLException

Устанавливает назначенный параметр в заданное значение строки Java. Драйвер преобразует его в значение SQL VARCHAR или LONGVARCHAR (в зависимости от от размера аргумента относительно пределов драйвера на значения VARCHAR ), когда он отправляет его в базу данных.

Параметры: parameterIndex - первый параметр 1, второе 2, ... х - значение параметра

Броски: SQLException - если parameterIndex не соответствует маркера параметра в в операторе SQL ; если ошибка доступа к базе данных происходит, или этот метод вызывается на замкнутом PreparedStatement

0

Как показано на this Oracle учебник, метод 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 является положение переменной и «Чарли Шин» является значением.Вам нужно сделать это для каждого заполнителя ?, который у вас есть в вашем 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]"); 

    ... so on ... 

Запомнить setString() используется для установки значения SQL VARCHAR or LONGVARCHAR вместо заполнителя, если соответствующий столбец определяется как SQL VARCHAR or LONGVARCHAR. для других типов данных в API существуют различные методы setXXX().