java - 在 java 中为 MySQL 连接工作。为什么我收到 java.lang.IndexOutOfBoundsException 错误?
问题描述
sorry im first
库mysql-connector-java-8.0.25.jar、jsoup-1.13.1.jar
进口
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class SQLLostProperty {
public static void main(String[] args) throws IOException {
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1320000/LosfundInfoInqireService/getLosfundInfoAccToClAreaPd"); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=wLnaMueBw2fSWQSMJ0m9J5oPYpaQsysWiHAWpJ%2BkJcHu09yps%2FMksIuW07Sp%2FS4%2FebmwCJP55bL9kZebODnI%2Bg%3D%3D"); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("PRDT_CL_CD_01","UTF-8") + "=" + URLEncoder.encode("PRH000", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("PRDT_CL_CD_02","UTF-8") + "=" + URLEncoder.encode("PRH200", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("START_YMD","UTF-8") + "=" + URLEncoder.encode("20120302", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("END_YMD","UTF-8") + "=" + URLEncoder.encode("20211009", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("N_FD_LCT_CD","UTF-8") + "=" + URLEncoder.encode("LCA000", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지 번호*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("99999", "UTF-8"));
URL url = new URL(urlBuilder.toString());
ArrayList<String> atcId = new ArrayList<String>(10000);
ArrayList<String> clrNm = new ArrayList<String>(10000);
ArrayList<String> depPlace = new ArrayList<String>(10000);
ArrayList<String> fdPrdtNm = new ArrayList<String>(10000);
ArrayList<String> fdSbjt = new ArrayList<String>(10000);
ArrayList<String> fdYmd = new ArrayList<String>(10000);
ArrayList<String> prdtClNm = new ArrayList<String>(10000);
ArrayList<String> rnum = new ArrayList<String>(10000);
ArrayList<ArrayList> order = new ArrayList<ArrayList>();
order.add(atcId);
order.add(clrNm);
order.add(depPlace);
order.add(fdPrdtNm);
order.add(fdSbjt);
order.add(fdYmd);
order.add(prdtClNm);
order.add(rnum);
ArrayList<String> str = new ArrayList<>();
str.add("item > atcId");
str.add("item > clrNm");
str.add("item > depPlace");
str.add("item > fdPrdtNm");
str.add("item > fdSbjt");
str.add("item > fdYmd");
str.add("item > prdtClNm");
str.add("item > rnum");
Iterator<String> iterator = str.iterator(); //Iterator for select
Iterator<ArrayList> iterator1 = order.iterator(); // Iterator for ArrayList
while (iterator.hasNext()) {
Document doc = null;
try {
doc = Jsoup.connect(url.toString()).get();
} catch (Exception e) {
e.printStackTrace();
}
Elements ele = null;
try {
ele = doc.select(iterator.next());
}catch(Exception e) {
e.printStackTrace();
}
Iterator<Element> ie1 = ele.iterator();
ArrayList array = iterator1.next(); // select Array
while(ie1.hasNext()) {
array.add(ie1.next().text());
}
}
Connection con = null;
PreparedStatement pstmt = null;
String driver = "com.mysql.cj.jdbc.Driver"; // driver
String sql = "jdbc:mysql://localhost:3306/stuff?useSSL=false"; //mysql url
String user = "root";
String pw = "rladydals2@";
String SQL = "insert into lost_property(atcId, clrNm, depPlace, fdPrdtNm, fdSbjt, fdYmd, prdtClNm, rnum) values(?, ?, ?, ?, ?, ?, ?, ?)";
for(int i=0;i<atcId.size();i++) {
try {
Class.forName(driver);
con = DriverManager.getConnection(sql, user, pw);
pstmt = con.prepareStatement(SQL);
pstmt.setString(1, atcId.get(i));
pstmt.setString(2, clrNm.get(i));
pstmt.setString(3, depPlace.get(i));
pstmt.setString(4, fdPrdtNm.get(i));
pstmt.setString(5, fdSbjt.get(i));
pstmt.setString(6, fdYmd.get(i));
pstmt.setString(7, prdtClNm.get(i));
pstmt.setString(8, rnum.get(i));
int r = pstmt.executeUpdate();
System.out.println("row : " + r);
} catch (SQLException e) {
e.printStackTrace();
System.out.println("[SQL Error : " + e.getMessage() + "]");
}catch (ClassNotFoundException e1) {
e1.printStackTrace();
System.out.println("[JDBC Connector Driver error : " + e1.getMessage() + "]");
}finally {
if (pstmt != null) {
try {
pstmt.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
> error
线程“主”java.lang.IndexOutOfBoundsException 中的异常:在 java.base/jdk.internal 的 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 处的索引 2023 超出长度 2023 的范围。 util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 在 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) 在 java.base/java.util.Objects.checkIndex(Objects.java: 359) 在 java.base/java.util.ArrayList.get(ArrayList.java:427) 在 practice_1.SQLLostProperty.main(SQLLostProperty.java:101)
解决方案
我假设此时您想要访问一个超出数组长度的数组字段(outofboundexecption):
ArrayList array = iterator1.next(); // select Array
while(ie1.hasNext()) {
array.add(ie1.next().text());
}
也许你在这里检查你的逻辑......
推荐阅读
- oracle-adf - 在 adf 12c 中的表中输入行时,LOV 数据未更新
- spring-integration - 事务轮询器向错误通道提交异常
- angular - Angular 上的语音识别网络错误
- c++ - “原子对象”的定义
- javascript - 如何为表格创建“全选”按钮
- python - 尝试使用 pandas 从 Excel 文件中读取时出现 KeyError
- regex - 谷歌表格按大量子字符串过滤
- .net-core - Dotnet Core 2.2 身份验证生成器:AddMicrosoftAccount 与 AddAzureAD
- oracle - 为什么可以将用户密码更改为超过 30 个字符的标识符
- reactive-programming - 多个主机的多个 WebClients ( Spring webflux )