【发布时间】:2020-03-13 08:15:40
【问题描述】:
所以,我有一个方法(应该)返回一个包含来自 sqlite 数据库的数据的字符串:
public String getLesson() throws ClassNotFoundException {
ArrayList list = new ArrayList();
int selectedColumn = tblOpenLesson.getSelectedColumn();
int selectedRow = tblOpenLesson.getSelectedRow();
String name = (String) tblOpenLesson.getModel().getValueAt(selectedRow, selectedColumn);
try {
Class.forName("org.sqlite.JDBC");
Connection con = DriverManager.getConnection("jdbc:sqlite:sql_items.sqlite");
Statement stmtGetLesson = con.createStatement();
ResultSet rs = stmtGetLesson.executeQuery("SELECT * FROM lessons WHERE lesson_id = '" + name + "';");
if (rs.next()) {
list.add(rs.getString("lesson"));
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
} catch (ClassNotFoundException ex) {
Logger.getLogger(openLesson.class.getName()).log(Level.SEVERE, null, ex);
}
return (String) list.get(0);
}
我会使用该字符串来定位一个文本文件,通过该文本文件,其内容将显示在来自另一个类的 JTextPane 上
private void btnOpenLessonPopUpActionPerformed(java.awt.event.ActionEvent evt) {
try {
FileReader fr = new FileReader("Lessons\\" + getLesson() + ".txt"); //this is Line 126
try (BufferedReader br = new BufferedReader(fr)) {
mainScreen.lessonPane.read(br, null); // lessonPane is from another class
br.close();
} catch (IOException e) {
System.out.println(e);
this.setVisible(false);
} catch (ClassNotFoundException ex) {
Logger.getLogger(openLesson.class.getName()).log(Level.SEVERE, null, ex);
}
}
但是我得到了这个错误:
线程“AWT-EventQueue-0”中的异常 java.lang.IndexOutOfBoundsException:索引:0,大小:0 在 java.util.ArrayList.rangeCheck(ArrayList.java:657) 在 java.util.ArrayList.get(ArrayList.java:433) 在 mainWindow.openLesson.getLesson(openLesson.java:204) 在 mainWindow.openLesson.btnOpenLessonPopUpActionPerformed(openLesson.java:126) 在 mainWindow.openLesson.access$000(openLesson.java:19) 在 mainWindow.openLesson$1.actionPerformed(openLesson.java:60) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 java.awt.Component.processMouseEvent(Component.java:6539) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 在 java.awt.Component.processEvent(Component.java:6304) 在 java.awt.Container.processEvent(Container.java:2239) 在 java.awt.Component.dispatchEventImpl(Component.java:4889) 在 java.awt.Container.dispatchEventImpl(Container.java:2297) 在 java.awt.Component.dispatchEvent(Component.java:4711) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) 在 java.awt.Container.dispatchEventImpl(Container.java:2283) 在 java.awt.Window.dispatchEventImpl(Window.java:2746) 在 java.awt.Component.dispatchEvent(Component.java:4711) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84) 在 java.awt.EventQueue$4.run(EventQueue.java:733) 在 java.awt.EventQueue$4.run(EventQueue.java:731) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:730) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我想我不知道为什么会这样。我还是编程新手。
【问题讨论】:
-
如果你只想要一列那么不要做
SELECT * FROM lessons,只要select column -
这不是错误,但您不应该将 ArrayList 用作变量的类型(在左侧),因为它是一个具体的类而不是接口。您应该改用 List 。此外,此列表仅包含字符串,因此应进一步限制泛型 (
<>)。所以,ArrayList list = new ArrayList();应该是List<String> list = new ArrayList<>;
标签: java sqlite arraylist jdbc resultset