我有以下代码,我正在努力工作。我必须阅读文本文件的内容,其中包含问题并将其保存到数据库测试系统。
我面临的主要问题是它没有插入数据库中。而且我不确定它是否正在阅读文本文件。
我从GameDroids那里得到了帮助,根据他上面的解释,我设法得到了这个,但现在它不仅插入而且我的上传按钮已经变得没有响应,它现在不会触发任何事件。拜托,我真的需要帮助 任何帮助都会受到赞赏。
例如对于下面的问题,我将在我的Category_questions中收集:收藏,以及我的问题:其中哪一个不是“现实生活”收藏的一个例子?对于我的quest_opt_a:a。你在纸牌游戏中持有的牌。等,对于correct_option_answer,我将在数据库表中插入。
这是一个问题:
收藏其中哪些不是“真实”收藏的例子? 一个。你在纸牌游戏中持有的牌。 湾您喜欢的歌曲存储在您的计算机中。 C。足球队的球员。 d。书中的页数。
d。
public void actionPerformed(ActionEvent ev)
{
String file = fileField.getText();
SetGetQuestionFileName setGet = new SetGetQuestionFileName(file);
try
{
ConnectToDatabase database = new ConnectToDatabase();
// prepare the query
String query = "INSERT INTO questionnaire (category_questions, questions, quest_opt_a,quest_opt_b, quest_opt_c, quest_opt_d, correct_option_answer ) VALUES (?, ?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStmt = null;
database.getConnection();
preparedStmt = database.getConnection().prepareStatement(query);
if(ev.getActionCommand().equals("UPLOAD"))
{
// JOptionPane.showMessageDialog(null,"File field can't be empty. Try again","ERROR",JOptionPane.INFORMATION_MESSAGE);
File filePathString = new File(file);
// load the file
Scanner scanner = new Scanner(file);
//fis = new FileInputStream(filePathString);
if(file.length() == 0)
{
JOptionPane.showMessageDialog(null,"File field can't be empty. Try again","ERROR",JOptionPane.INFORMATION_MESSAGE);
}
else
{
if(filePathString.exists() && filePathString.isFile())
{
// read the file line by line
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
String[] questionAnswer = line.split("?");//[ // line.split["?"] will split the line into two strings, right at the ? and put those two strings into an array.
String question = questionAnswer[0]; // so [0] will access the first element in that array - the question
String[] answers = questionAnswer[1].split(","); // now we split the string after the ? into many strings divided by comma
// create the mysql insert preparedstatement
preparedStmt.setString(1, "JDBC");
preparedStmt.setString(2, question);
preparedStmt.setString(3, answers[0]);
preparedStmt.setString(4, answers[1]);
preparedStmt.setString(5, answers[2]);
preparedStmt.setString(6, answers[3]);
preparedStmt.setString(7, answers[4]);
preparedStmt.executeUpdate();
}
// database.disconnect();
JOptionPane.showMessageDialog(null,"File successfuly uploaded","INFORMATION",JOptionPane.INFORMATION_MESSAGE);
fileField.setText("");
}
}
if(!filePathString.exists() && !filePathString.isFile())
JOptionPane.showMessageDialog(null,"File coudn't be found. Do check file name.","ERROR",JOptionPane.INFORMATION_MESSAGE);
}
}
catch(Exception ex)
{
}
if(ev.getActionCommand().equals("LOGOUT"))
{
System.exit(0);
}
}
答案 0 :(得分:1)
如果需要,您可以使用JPanel
扩展JFrame
或ActionListener
或任何其他视图类,但通常最好为{{1}创建单独的类}}。
ActionListener
所有这一切都是为了将您的视图与程序中的控制器分开。想象一下,你在另一个框架或面板中的某个地方有另一个按钮,你希望它与这个按钮做同样的事情,那么你可以简单地注册你的动作监听器的另一个实例,而不必复制整个代码。
无论如何,我的猜测是你在执行的操作中做了太多的工作,并且完整的GUI变得没有响应,因为你正在从光盘读取文件并将其内容放入actionPerformed方法的数据库中。
您可以尝试的是使用线程来处理所有上传/读/写内容:
public class MyActionListener extends ActionListener{
String myVariable;
public MyActionListner(String variableINeedForTheAction){ // pass the parameters you need in the constructor or getter method
this.myVariable = variableINeedForTheAction;
}
@Override
public void actionPerformed(ActionEvent e) {
this.myVariable = "actionPerformed"; // then, when the action gets performed you can access that variable
}
}
public class MyFrame extends JFrame{
//some code
JButton myButton = new JButton();
String text = "";
MyActionListner buttonListener = new MyActionListener(text); // instantiate your own action listener class and pass the variables you need for performing the action
myButton.addActionListener(buttonListener); // add the listener to some button
}
答案 1 :(得分:0)
事实上,正如许多人所建议的那样,线程和摆动工作者我真正需要的东西。
所以我最终得到了类似的东西:
try
{
Runnable r = new Runnable()
{
@Override
public void run()
{
doWork();
}
};
new Thread(r).start();
}
/* catch(SQLException ex)
{
ex.printStackTrace();
}*/
catch(Exception e)
{
e.printStackTrace();
e.getCause();
}