5

I'm getting this error:

Exception java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
 at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3288)
 at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
 at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4108)
 at com.inmobia.RSSToNews.Consumer.print(Consumer.java:92)
 at com.inmobia.RSSToNews.Consumer.main(Consumer.java:122)

When I'm trying to execute this class:

package com.in.RSSToNews;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

/**
 * Consumer class from RSS/Atom feed type.
 *
 * @author  Rbn
 */

public class Consumer {





SyndFeed    feed;

/**
 * Class constructor
 *
 * @param url: url path to consume
 */
public Consumer(String url) {
    super();
    try {
        URL feedUrl = new URL(url);

        SyndFeedInput input = new SyndFeedInput();
        feed = input.build(new XmlReader(feedUrl));

    } catch (Exception ex) {
        ex.printStackTrace();
        System.out.println("ERROR: "+ex.getMessage());
    }
}

/**
 * print method
 * Scroll down the list of entries and displays the feed title, author and description
 */
void print () {

    //feeds list
    List<SyndEntry> entradas = new ArrayList<SyndEntry>();
    entradas = feed.getEntries();
    try
    {
    
        
        //list iterator
    Iterator<SyndEntry> it = entradas.iterator();
    Class.forName("org.gjt.mm.mysql.Driver");
    Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/newsamerica", "root", "123");
    
        if (!conexion.isClosed())
        {
                    while (it.hasNext()) 
                        {
                            SyndEntry entrada = it.next();
                            String title=(entrada.getTitle() );
                            String link=(entrada.getLink());
                            String author=(entrada.getAuthor());
                            String description=(""+entrada.getDescription() );
                            Date date=(entrada.getPublishedDate());
                            String date2= date.toString();
                            
                            String content=(""+entrada.getContents());
                                      
                            //description=description.replaceAll("SyndContentImpl.value=", "");
                            //System.out.println(text2);
                            //System.out.println("Autor.......: " + entrada.getAuthor() );
                            // System.out.println("Noticia.......: " + entrada.getContents());
                            // Statement st = conexion.createStatement();
                            PreparedStatement pstmt = conexion.prepareStatement("INSERT INTO general_news(title,link,author,description,date,content) VALUES ('?','?','?','?','?','?')");
                            pstmt.setString(1,title);
                            pstmt.setString(2,link);
                            pstmt.setString(3,author);
                            pstmt.setString(4,description);
                            pstmt.setString(5,date2);
                            pstmt.setString(6,content);
                            ResultSet rs = pstmt.executeQuery();
                            rs.next();
                        }
    
    
   
        }
        
    
        conexion.close();
}

    catch (Exception e)
    {
       // Error en algun momento.
       System.out.println("Excepcion "+e);
       e.printStackTrace();
    }
}


public static void main(String[] args) {
   
    Consumer feed = new Consumer (args[0]);
    feed.print();
}
}
Taslim Oseni
  • 6,086
  • 10
  • 44
  • 69
Rbn
  • 71
  • 1
  • 2
  • 5
  • 1
    Glad to help. At StackOverflow is custom to accept the answer that has contributed the most to solve your problem. You do that by clicking the check mark near the answer votes so it turns solid green. – Jorge Ferreira Jun 04 '10 at 16:28

1 Answers1

12

Horrible formatting. When using parameters you do not put '?' but simply ?.

Change the line:

PreparedStatement pstmt = conexion.prepareStatement("INSERT INTO general_news(id,title,link,author,description,date,content) VALUES ('?','?','?','?','?','?')");

to

PreparedStatement pstmt = conexion.prepareStatement("INSERT INTO general_news(id,title,link,author,description,date,content) VALUES (?,?,?,?,?,?)");

This is why he thinks you have 0 parameters but were specifying the first.

Also note that you are executing an INSERT and as such MUST NOT use executeQuery. Use executeUpdate() instead.

Jorge Ferreira
  • 96,051
  • 25
  • 122
  • 132
  • 1
    Thanks man, but now i have this error: Excepcion java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:412) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1794) – Rbn Jun 04 '10 at 16:05
  • 2
    Use `executeUpdate` and not `executeQuery`. – Jorge Ferreira Jun 04 '10 at 16:07
  • And do you have a column named `title` in `general_news` table :) If you wish paste the `CREATE TABLE` statement. – Jorge Ferreira Jun 04 '10 at 16:16
  • 1
    Thanks smink, I searched for about 3 hours with MyBatis trying to find my error... here in a 5 year old post you had an answer :) '?' for my string when I just needed ? SMH.. – Will May 31 '15 at 06:03