【问题标题】:java.sql.SQLException: Parameter index out of range(1 > number of parameters, which is 0)java.sql.SQLException:参数索引超出范围(1 > 参数个数,即 0)
【发布时间】:2014-03-29 11:43:28
【问题描述】:

我创建了一个 java jframe 程序,允许您输入一个 csv 文件,然后将其上传到本地数据库,但是我无法将所有数据插入数据库。关于我可能出错的地方有什么想法吗?

 try{
  BufferedReader br=new BufferedReader(new FileReader(filename1));
  String line;

  while((line=br.readLine())!=null){
  String[]value=line.split(",");//Seperator

filename1 是从 jFilechooser 中选择的 csv 文件。

   String sql="insert into websitehistory (Date, URL, VisitCount) "
      + "values (?,?,?)";


  pst=conn.prepareStatement(sql);
  pst.setString(1, value[0]);
  pst.setString(2, value[1]);
  pst.setString(3, value[2]);  

这是将分隔值插入数据库的mysql查询

这是我的表结构:

Date           Varchar(244)
URL            VarChar(244)
VisitCount     VarChar(244)

而我要插入的数据类型是:

31/01/2014  15:26:00,  https://www.youtube.com/,  13
31/01/2014  15:25:00,  https://www.youtube.com/,  17

非常感谢任何帮助

【问题讨论】:

  • 检查您添加到准备好的语句中的参数。
  • 您可能希望在 sql 查询中使用 ? 而不是每个 '"+value[i]+"'。这样,您以后可以使用 setXXX(number,value)? 替换为正确的值。

标签: java mysql csv sql-insert


【解决方案1】:

试试这个查询

String sql="insert into websitehistory (Date, URL, VisitCount) "
      + "values (?, ?, ?)";

【讨论】:

  • 将其更改为: String sql="insert into websitehistory (Date, URL, VisitCount) " + "values (?, ?, ? )";但在第 1 行出现错误“检查在 '?,?,?)' 附近使用的正确语法。可能是插入的数据还是我的数据库的格式?
  • 提供表结构和尝试插入的数据可能很有用。请编辑您的问题并添加这些信息。
【解决方案2】:

您应该有占位符以与 Prepared Statement 一起使用,但不能直接转储值。

这是错误的:

String sql="insert into websitehistory (Date, URL, VisitCount) "
          + "values ('"+value[0]+"','"+value[1]+"','"+value[2]+"')";

改成:

String sql="insert into websitehistory (Date, URL, VisitCount) "
          + "values ( ?, ?, ? )";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多