4

次のコーディング メッセージがコンソールに表示されているため、データベース テーブルから列の値を取得できません。

java.sql.SQLException: Invalid value for getInt() - 'Glomindz Support'

私のコードは次のとおりです。

package com.glomindz.mercuri.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import com.glomindz.mercuri.util.MySingleTon;

public class UserServicesDAO {

    private Connection connection;

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

    }

    public void get_all_data() {
    }

    public Map<Integer, String> get_all_data1() {
        HashMap<Integer, String> result = new HashMap<Integer, String>();
        String query = "SELECT * FROM spl_user_master";
        try {
            PreparedStatement stmt = connection.prepareStatement(query);
            boolean execute = stmt.execute();
            System.out.println(execute);
            ResultSet resultSet = stmt.getResultSet();
            System.out.println(resultSet.getMetaData());
            while (resultSet.next()) {
                result.put(resultSet.getInt(1), resultSet.getString("id"));
                result.put(resultSet.getInt(2), resultSet.getString("name"));
                result.put(resultSet.getInt(3), resultSet.getString("email"));
                result.put(resultSet.getInt(4), resultSet.getString("mobile"));
                result.put(resultSet.getInt(5), resultSet.getString("password"));
                result.put(resultSet.getInt(6), resultSet.getString("role"));
                result.put(resultSet.getInt(7), resultSet.getString("status"));
                result.put(resultSet.getInt(8),
                        resultSet.getString("last_update"));
            }

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

    public static void main(String[] args) {
        new UserServicesDAO().get_all_data1();
    }
}

私のdbテーブルスキーマは次のとおりです。

id  name    email   mobile  password    role    status  last_update
1   Glomindz Support    support@glomindz.com    9854087006  cbf91a71c11d5ec348b0c7e9b2f0055e    admin   1   2013-05-02 22:05:14
2   Amarjyoti Das   amarjyotidas@splcare.com    9864092598  88f2dccb02b2a20615211e5492f85204    admin   1   2013-04-26 05:44:41
4

6 に答える 6

3

すべての列をキーとして取得intします。Stringこれらの列のいくつかはs またはsを表していると思いますDate

while(resultSet.next()){
    result.put(resultSet.getInt(1),resultSet.getString("id"));
    result.put(resultSet.getInt(2),resultSet.getString("name")); //Most likely a String
    result.put(resultSet.getInt(3),resultSet.getString("email"));
    result.put(resultSet.getInt(4),resultSet.getString("mobile"));
    result.put(resultSet.getInt(5),resultSet.getString("password"));
    result.put(resultSet.getInt(6),resultSet.getString("role"));
    result.put(resultSet.getInt(7),resultSet.getString("status"));
    result.put(resultSet.getInt(8),resultSet.getString("last_update"));  //Most likely a date
}

getInt()データ型とメソッドによって返されるオブジェクト/値との間の不一致により、エラーが発生します。テーブルの行を格納するドメイン内のオブジェクトを構築/モデル化することをお勧めします。何かのようなもの:

public class User{
    private Integer id;
    private String name;
    private String email;
    private String mobile;
    private String password;
    private String role;
    private String status;
    private Date lastUpdate;

    /*  Get and set methods for each field */
}

id次に、オブジェクトを値として、 をキーとして含む Map を作成します。

   //Use Map interface here, also notice generic arguments <Integer,User>
   Map<Integer, User> result = new HashMap<Integer, User>();
   try {
        PreparedStatement stmt = connection.prepareStatement(query);
        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");
            //do this for each field, using appropriate method for type...

            //then add to map
            result.put(user.getId(), user);

        }
于 2013-07-09T08:27:58.600 に答える
2

テーブルのすべてのデータがマップとして必要だと思います。しかし、DB に複数の行がある可能性があるため、基本的にはマップのリストが必要です! メソッドを次のように変更します。

public List<Map<Integer, String>> get_all_data1() {
    List<Map<Integer, String>> allRows = new ArrayList<Map<Integer, String>>();
    String query = "SELECT * FROM spl_user_master";
    try {
        PreparedStatement stmt = connection.prepareStatement(query);
        boolean execute = stmt.execute();
        System.out.println(execute);
        ResultSet resultSet = stmt.getResultSet();
        System.out.println(resultSet.getMetaData());
        while (resultSet.next()) {
            Map<Integer, String> result = new HashMap<Integer, String>();
            result.put(1, resultSet.getString("id"));
            result.put(2, resultSet.getString("name"));
            result.put(3, resultSet.getString("email"));
            result.put(4, resultSet.getString("mobile"));
            result.put(5, resultSet.getString("password"));
            result.put(6, resultSet.getString("role"));
            result.put(7, resultSet.getString("status"));
            result.put(8, resultSet.getString("last_update"));
            allRows.add(result);
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return allRows;
}

ここでは、DB からフェッチされたレコードごとに、列が に配置され、各マップは!Mapに追加される行を表します。List

于 2013-07-09T08:33:31.970 に答える