Arraylist / подготовленное заявление - PullRequest
1 голос
/ 05 апреля 2011

Привет. Я пытаюсь передать массив в подготовленный оператор, но получаю следующую ошибку.

setString (int, java.lang.String) в java.sql.PreparedStatement нельзя применить к (int,java.lang.Object) m_ps.setString (2, themes.get (1));
^ Вот часть кода

public ArrayList<String> passTopics(String userName, ArrayList topics){
            m_ps = null;
            String sql = null;

        try{
            sql = "INSERT INTO adviceGiverTopics"+ "(userName,topics,dateAdded) VALUES(?, ?, ?)";
            m_ps = m_conn.prepareStatement(sql);    

            m_ps.setString(1,userName);
            m_ps.setString(2, topics.get(1));           
            m_ps.setString(3, this.getDateTime());



            m_ps.execute();
            m_ps.close();
        }
        catch(SQLException e){
            System.out.println(e.getMessage());
        }   

        return null;
    }

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Вот как бы я написал этот код:

package persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.List;

/**
 * B
 * @author Michael
 * @since 3/21/11
 */
public class B
{
    public static final String SQL = "INSERT INTO adviceGiverTopics" + "(userName,topics,dateAdded) VALUES(?, ?, ?)";

    private Connection connection;

    public int saveTopics(String userName, List<String> topics, Date insertDate)
    {
        if ((userName == null) || "".equals(userName.trim()))
            throw new IllegalArgumentException("user name cannot be null or blank");
        if ((topics == null) || (topics.size() < 2))
            throw new IllegalArgumentException("topics cannot be null and must have at least two elements");

        int numRowsAffected = 0;

        PreparedStatement ps = null;
        String sql = null;

        try
        {
            ps = connection.prepareStatement(sql);

            ps.setString(1, userName);
            ps.setString(2, topics.get(1));
            ps.setDate(3, new java.sql.Date(insertDate.getTime()));

            numRowsAffected = ps.executeUpdate();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        finally
        {
            close(ps);
        }

        return numRowsAffected;
    }

    private static void close(Statement st)
    {
        try
        {
            if (st != null)
            {
                st.close();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}
0 голосов
/ 05 апреля 2011

Так как topic - это список Object, вам нужно привести объект к String или вызвать toString ():

m_ps.setString(2, (String) topics.get(1));        

или m_ps.setString (2, themes.get (1) .toString ());

Альтернативой может быть использование обобщений и объявление тем как "ArrayList " - но я предполагаю, что вы еще не узнали об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...