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();
}
}
It means that you're trying to set a parameter on a query which doesn't contain any parameter. The stack trace tells you exactly at which line of which file the exception is thrown. Also, you should accept answers to your previous questions.
From SQL Server Management Studio Let's right click on the “SELECT” operator of the generated execution plan, click on the properties, Go the “Parameter List” category option and expand it; you will see the “Parameter Compiled Value”.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With