java.sql.SQLException:没有为参数5指定值,但字符串长度为4,而不是5
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.sql.SQLException:没有为参数5指定值,但字符串长度为4,而不是5,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3630字,纯文字阅读大概需要6分钟。
内容图文
我计划使用雅虎财务csv api生成网址,以获得股票实时价格和时间. url就像这个http://download.finance.yahoo.com/d/quotes.csvs=%40%5YHOO,GOOG,MSFT,BAC&f=nsl1o&e=.csv,它返回一个包含4列的表.
我使用jdbc将数据存储到Mysql,但始终存在错误:“没有为参数5指定值”.代码如下:
公共类Quote_Saver {
private void connection(){
尝试{
的Class.forName( “com.mysql.jdbc.Driver”);
} catch(ClassNotFoundException e){
e.printStackTrace();
}
}
private String retrieveQuote() {
StringBuffer buf = new StringBuffer();
try {
URL page = new URL("http://download.finance.yahoo.com/d/quotes.csv?s=%40%5YHOO,GOOG,MSFT,BAC&f=nsl1o&e=.csv");
String line;
URLConnection conn = page.openConnection();
conn.connect();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
BufferedReader data = new BufferedReader(in);
while ((line = data.readLine()) != null) {
buf.append(line + "\n");
}
} catch (MalformedURLException mue) {
System.out.println("Bad URL: " + mue.getMessage());
} catch (IOException ioe) {
System.out.println("IO Error:" + ioe.getMessage());
}
return buf.toString();
}
//use the retrieveQuote class , pass it to data in ConnectionToMysql
private void ConnectionToMysql(String data){
StringTokenizer tokens = new StringTokenizer(data, ",");
String[] fields = new String[4];
for (int i = 0; i < fields.length; i++) {
fields[i] = stripQuotes(tokens.nextToken());
}
connection();
String host ="jdbc:mysql://localhost/yahoo";
String username = "root";
String password = ".....";
try {
Connection connection = DriverManager.getConnection(host, username, password);
String query = "insert into `stocks`(?,?,?,?) values (?,?,?,?);";
PreparedStatement statement = (PreparedStatement) connection.prepareStatement(query);
statement.setString(1, fields[0]);
statement.setString(2, fields[1]);
statement.setString(3, fields[2]);
statement.setString(4, fields[3]);
statement.executeUpdate();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
private String stripQuotes(String input) {
StringBuffer output = new StringBuffer();
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) != '\"') {
output.append(input.charAt(i));
}
}
return output.toString();
}
public static void main (String args[])
{
Quote_Saver qd= new Quote_Saver();
String data = qd.retrieveQuote();
qd.ConnectionToMysql(data);
}
}
错误是
java.sql.SQLException: No value specified for parameter 5
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2594)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2569)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2366)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2350)
at Quote_Saver.ConnectionToMysql(Quote_Saver.java:68)
at Quote_Saver.main(Quote_Saver.java:89)
但显然,字符串字段的大小只有4,我的表列也是如此,所以我的问题是参数5在哪里?以及如何解决这个问题?我是java的新手,请帮助我.非常感谢!
解决方法:
实际上,你只是犯了一个小错误 – 可能是一个复制粘贴错误.
以下行需要8个参数而不是4个,因为您将问号放在应该放置列名的位置.
insert into `stocks`(?,?,?,?) values (?,?,?,?);";
如果您按如下方式修改它(用库表中的真实名称替换列名称),那么它应该按照您的预期运行.
insert into stocks(ColumnNameOne, ColumnNameTwo, ColumnNameThree, ColumnNameFour)
values (?, ?, ?, ?);
内容总结
以上是互联网集市为您收集整理的java.sql.SQLException:没有为参数5指定值,但字符串长度为4,而不是5全部内容,希望文章能够帮你解决java.sql.SQLException:没有为参数5指定值,但字符串长度为4,而不是5所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。