exceptionjava.sql.SQLException:参数索引超出范围(1>参数个数,为0)

我收到这个错误:

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) 

当我尝试执行这个类时:

 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 entradas = new ArrayList(); entradas = feed.getEntries(); try { //list iterator Iterator 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(); } 

}

可怕的格式化。 使用参数时你不要把'?' 但简直?

换行:

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

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

这就是为什么他认为你有0个参数但指定了第一个参数。

另请注意,您正在执行INSERT ,因此不得使用executeQuery。 请改用executeUpdate() 。