当前位置: 首页 > 知识库问答 >
问题:

AnyLogic microsoft sql错误索引1超出范围

闻人昊昊
2023-03-14

我使用带有AnyLogic的外部数据库来检查数据库中是否存在数据。如果没有,那么我需要插入并执行另一个操作。然而,我得到了这个错误

jdbc。SQLServerException:索引1超出范围。

这是我的代码。

try {
    Connection con = vanet.getConnection();
          java.sql.Statement stmt=null;
          java.sql.ResultSet rs=null;

    String preQueryStatement
          = "SELECT * FROM vanet WHERE vehicle = " + vehicle.getIndex() + ";";

          PreparedStatement pStmnt = con.prepareStatement(preQueryStatement);
            pStmnt.setInt(1, vehicle.getIndex());

         rs = pStmnt.executeQuery();
            if (!rs.next())
            {
                String insertStatement
                = "INSERT INTO vanet VALUES (vehicle, surrounded)";
                PreparedStatement ps = con.prepareStatement(insertStatement);

                ps.setInt(1, vehicle.getIndex());
                ps.setInt(2, v.getIndex());

                System.out.println("new user inserted");
            }  
      }catch(SQLException e){
      e.printStackTrace();
    }

下面是完整的错误消息

The index 1 is out of range.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:226)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:1110)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:1124)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setInt(SQLServerPreparedStatement.java:1406)
    at v2v_simple.TaskAssignment.enterState(TaskAssignment.java:425)
    at v2v_simple.TaskAssignment.executeActionOf(TaskAssignment.java:651)
    at com.anylogic.engine.TransitionMessage.execute(Unknown Source)

共有2个答案

施锋
2023-03-14

要能够使用以下内容:

pStmnt.setInt(1, vehicle.getIndex());

查询中需要有占位符(符号)。应该是这样的:

String preQueryStatement = "SELECT * FROM vanet WHERE vehicle = ? ";

第二个语句也是如此,但我认为您可以从这里处理:)

旁注:一般来说,您不应该串联SQL语句,而应该始终使用占位符。这可能会导致应用程序中存在安全漏洞。

岑炯
2023-03-14

使用此,

String preQueryStatement
      = "SELECT * FROM vanet WHERE vehicle = ? ";

      PreparedStatement pStmnt = con.prepareStatement(preQueryStatement);
        pStmnt.setInt(1, vehicle.getIndex());
 类似资料:
  • 例:“at”和“tack”应该返回true,“tree”和“ere”应该返回false。 在查看注释后编辑,我的新代码现在是这样的。它总是返回false,即使带有“tree”和“tree”。

  • 在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191)在com.microsoft.sqlserver.jdbc.SQLServerPrearedStatement.setterGetParam(SQLServerPrearedStatement.java:9

  • 我已经使用创建了“CfnUserPool”对象https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_cognito/CfnUserPool.html aws文件。 我想获取UserPool的“Pool Id”。其Id值为“us-east-1_4kxxxxxx”。我使用python尝试了很多选项来获取这个值,但都没有成功。 所以我

  • 错误 ()1中的索引器错误回溯(最近一次调用)---- ~/Documents/PhD/IntelliSys19/journal/ColdStart_实验/相似性_函数。用户中u2的装饰矩阵中的py()145:146评级1=np。nan_to_num(np.array(user_ratings_matrix.iloc[u1-1].values))-- ~/anaconda3/lib/python3

  • 我试着运行这个: 但是得到这个错误: 回溯(最后一次调用): 文件“C:\Users\Shakh\Desktop\Hello3.py”,第4行,在 打印(“Hallo”,sys.argv[1]) 索引器:列表索引超出范围

  • 我的jsp页面有问题。我正在使用:- -Tomcat 8.0.20 -Eclipse Java EE luna SR2 -Microsoft SQL server 2005 -使用管理工作室Express做我的数据库工作 这是一个小问题,因为我正在学习在jsp页面上运行查询。我偶然发现了这个问题,想知道是否有人可以帮助我。 这是我的代码片段 这就是错误所在 org.apache.jasper。Ja