所以,我有一个方法(应该)返回一个字符串,其中包含来自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"utton.fireIndexOutOfBoundsException: Index: 0, size: 0 atutton.java:2022ArrayLjavax.swing.Check(ArrayLandler.action)atutton.java:2348ArrayLjavax.swing.(ArrayLodel.fire)at main Wodel.java:402Ljavax.swing.Lesson(openLodel.set)at main Wodel.java:259Ljavax.swing.plaf.basic.OpenLessonPopUpActionPerform(openListener.mouse)at main Window.openLesson.access0美元(openLesson.java:19)at main Window.openLesson$1.action执行(openLesson.java:60)atjavax.swing.AbstractBjava.lang.动作执行(AbstractBjava.util.)atist.rangeAbstractButton$Hist.java:657执行(AbstractBjava.util.)atist.getDefaultButtonMist.java:433动作执行(DefaultButtonMindow.open)atesson.getDefaultButtonMesson.java:204按(DefaultButtonMindow.open)atesson.btnBasicButtonLesson.java:126在java. awt. Component. java: 252)发布(BasicButtonLister. java在java. awt上的轻量级调度程序。进程MouseEvent(Container. java: 4535)。在java. awt上的轻量级调度程序。调度事件(Container. java: 4476)。在java. awt上的容器。调度EventImpl(Container. java: 2283)。在java. awt上的窗口。调度事件(Windows. java: 2746)。在java. awt上的组件。调度事件(Component. java: 4711)。在java. awt上。EventQueue. java: 760)。在java. awt上。EventQueue3 Dollars. run(EventQueue. java: 709)在java. awt上。EventQueue3 dollars. run(EventQueue. java: 703)在java. security上。AccessController. doPrii在java. awt. EventDispatchThread. java上的事件(EventDispatchThread. java: 93)。EventDispatchThread. run(EventDispatchThread. java: 82)
我不知道为什么会这样。我对编程还是新手。
尝试检索索引0处的值时,正在引发IndexOutOfBounds异常。这意味着没有向ArrayList中添加任何内容。调用next()时,数据很可能不是有效行。
在不了解数据结构的情况下很难说,但是,从您的查询中:"SELECT*From课程WHERElesson_id='"name "';"
似乎您正在尝试将lesson_id
与您正在获得的课程的name
匹配。
也可能是字符串名=(String)tblOpenLesson。getModel()。getValueAt(selectedRow,selectedColumn) 无法满足您的期望。
另一方面,您确实需要查看准备好的声明。实际上,您的应用程序易于SQL注入。
我个人也会重构代码,以便:
if (rs.next()) {
list.add(rs.getString("lesson"));
}
成为:
if (rs.next()) {
return rs.getString("lesson");
}
下面是:<代码>返回(字符串)列表。获取(0) 变为<代码>返回“” 。
如果sql查询未返回任何行,则最后一行将引发异常,因为您的列表为空。
return (String) list.get(0);
所以要么把它改成
if (!list.isEmpty() {
return (String) list.get(0);
}
return null; //If list is empty
或者更好,因为您只对第一行感兴趣,所以可以跳过列表并替换
if (rs.next()) {
list.add(rs.getString("lesson"));
}
与
if (rs.next()) {
return rs.getString("lesson");
}
你仍然需要在方法结束时返回
return null;
而不是像这样使用它
try {
String lesson = getLesson();
if (lesson != null) {
//open file...
}
...
问题内容: 我知道这应该是简单的,我可能正直盯着问题,但我再次陷入困境,需要代码专家的帮助。 我试图从jdbc的一列中取出一行,并将它们放入数组中。 我这样做如下: creatConnection是已经定义的方法,可以执行其明显的工作。我在创建另一个结果集的同时创建了我的结果集,我将该列的字符串存储到一个数组中。然后打印出来以备不时之需。还要确保它在那里。 问题在于其将整个列存储到contactL
问题内容: 如何将arrayList存储到Java中的数组中? 问题答案: 那取决于你想要什么: 现在,如果要将列表存储在数组中,则可以执行以下操作之一: 但是,如果要将列表 项 放在数组中,请执行以下一项操作: 参考:
我想将结果添加到resultset,并使用table显示结果,这是我的java代码 错误显示"未找到列'Janunary'。" 很抱歉我没有获得足够的声誉,所以我将存储过程的结果写如下。 查询代码:
我试图将公共静态void readGrades()的结果存储到方法数组int[]grades中。但是我没有这样做。我试过数组列表和其他东西,但不幸的是。
问题内容: 说说我有一些小树而不是文档,我需要将它们存储在Lucene索引中。我该怎么做呢? 树中的一个示例节点: 在上面的节点中,“数据”成员变量是用空格分隔的字符串,因此需要全文搜索。“类型”成员变量只是一个单词。 搜索查询本身将是一棵树,并将搜索每个节点中的数据和类型,以及树的结构以查找匹配项。在与子节点匹配之前,查询必须首先与父节点数据和类型匹配。可以对数据值进行近似匹配。 索引此类数据的