我计划使用yahoo finance csv api生成url,以获取股票的实时价格和时间。url是这样的http://download.finance.yahoo.com/d/quotes.csvs=@%5YHOO、GOOG、MSFT、BAC
我使用jdbc将数据存储到MySQL,但是总是有一个错误:“没有为参数5指定值”。代码如下:公共类Quote_Saver{私有无效连接(){try{Class.for名称(com.mysql.jdbc.驱动程序);}捕获(ClassNotFoundExcema 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在哪里?如何解决这个问题?我是新来的,请帮帮我。非常感谢!
您可以使用发送8个参数,因为每个
表示需要在运行时设置值的参数。
String query = "insert into `stocks`(?,?,?,?) values (?,?,?,?);";
您的查询应该如下所示:
String query = "insert into `stocks`(clmName1, clmName2, clmName3, clmName4) values (?,?,?,?);";
实际上,您只是犯了一个小错误—可能是复制粘贴错误。
下面一行需要8个参数,而不是4个,因为您在应该放置列名的地方放置了问号。
insert into `stocks`(?,?,?,?) values (?,?,?,?);";
如果您按照以下方式修改它(用股票表中的真实姓名替换列名),那么它应该像您预期的那样运行。
insert into stocks(ColumnNameOne, ColumnNameTwo, ColumnNameThree, ColumnNameFour)
values (?, ?, ?, ?);
问题内容: 我在执行应用程序时遇到以下错误: java.sql.SQLException:未为参数1指定值 这是什么意思? 我在岛上的清单: 我在托管bean中获得的用户组列表: 我的JSF页面: 我的数据表能够显示数据库中的组列表。但是,当我在数据表中选择单个行时,应用程序需要一些时间才能与数据库建立连接以显示所选结果。 另外,奇怪的是,该应用程序能够比其他应用程序更快地显示某些选定的结果。与我
我有一个简单的不透明度滑块使用反应钩,看起来像这样 我在像这样的表中设置不透明度 但当我运行我的应用程序时,DOM中的不透明度显示为一个字符串,如下所示 为什么不透明度值显示为字符串而不是数字?
我知道很多人问过相关的问题,但请帮我解决。我试图复制一个我在网上找到的开源温度控制实验室。我想在树莓皮上运行它。这就是我一直遇到的错误: 生成它的代码如下所示: 我相信这段代码试图通过以下代码与另一个python文件通信: 我还不知道我周围的python代码,所以一个非常清晰的“虚拟类”解决方案的解释会很有帮助。谢谢伙计们。
我想对一个浮点数进行四舍五入,得到点后的两位数。但我收到了一个错误: float()参数必须是字符串或数字,而不是“NoneType” 在评级模型的评级字段中四舍五入是一个坏主意,因为平均_评级不会四舍五入
原因:java.lang.ArrayIndexOutOfBoundsException:length=5;在com.example.android.architecture.mainactivity.updateDisplay(mainactivity.kt:59)在com.example.android.architecture.mainactivity.oncreate(mainactivit
问题内容: 在.NET Framework 的参考中,使用type 声明请求类型。 在RFC 2616 中,声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE …)。 .NET 和类中也存在类似的行为。 Java在方法上有类似的方法。 这些语言设计者为什么不考虑为这些HTTP方法实现枚举? 你有好主意吗? 问题答案: RFC 2616 链接的第一句话(添加了重点): HTTP