因此,我有一个方法(应该)返回一个包含来自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:Index:0,Size:0 at java.util.ArrayList.rangeCheck(ArrayList.java:657)at 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)at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)at javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2348)at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel。 javax:swing.plaf.basic上的javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)上的java:402)。java.awt.Component.processMouseEvent(Component.java:6539)的BasicButtonListener.mouseReleased(BasicButtonListener.java:252)在java.awt.Component.processEvent(Component)的javax.swing.JComponent.processMouseEvent(JComponent.java:3324) .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.LightweightDispatcher.processMouseEvent(Container.java:4535)在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)在java.awt.Component.dispatchEvent(Component.java:4711)位于java.awt.Window.dispatchEventImpl(Window.java.awt.Container.dispatchEventImpl(Container.java:2283)的LightweightDispatcher.dispatchEvent(Container.java:4476)java:2746)at java.awt.Component.dispatchEvent(Component.java:4711)at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)at 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 java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)处的$ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)在java.awt.EventQueue处java.awt.EventQueue $ 4.run(EventQueue.java:733)处java.security.ProtectionDomain $ JavaSecurityAccessImpl上的java.security.AccessController.doPrivileged(本机方法)$ 4.run(EventQueue.java:731)。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)java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)处PumpEventsForFilter(EventDispatchThread.java:116)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.pumpEvents(EventDispatchThread.java:101)处:93)at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)处PumpEventsForFilter(EventDispatchThread.java:116)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.pumpEvents(EventDispatchThread.java:101)处:93)at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我不知道为什么会这样。我还是编程新手。
问题来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从查询中不知道数据的结构就很难说:"SELECT * FROM lessons WHERE lesson_id = '" + name + "';"似乎您正在尝试将其lesson_id与所name学课程相匹配。
也可能是String name = (String) tblOpenLesson.getModel().getValueAt(selectedRow, selectedColumn);没有给您您所期望的。
另一方面,您确实需要查看“准备好的语句”。照原样,您的应用程序易于进行SQL注入。
就个人而言,我还将重构代码,以便:
if (rs.next()) {
list.add(rs.getString("lesson"));
}
成为:
if (rs.next()) {
return rs.getString("lesson");
}
并且:return (String) list.get(0);变为return "";。 回答来源:Stack Overflow