javaee论坛

普通会员

225648

帖子

331

回复

345

积分

楼主
发表于 2019-11-15 13:35:46 | 查看: 249 | 回复: 2

Java连接连接MySQL数据库还需要添加一个mysql-connector-java.jar这样的驱动,具体下载和用法可以从网上下载

下面是源代码,跟文本文件一样有个Testquestion类

publicclassTestquestion{privateStringquestionText="";//定义题目privateStringstandardkey="";//定义正确答案privateStringselectKey="";//定义输入答案publicTestquestion(StringquestionText,Stringstandardkey){super();this.questionText=questionText;this.standardkey=standardkey;}publicStringgetQuestionText(){returnquestionText;}publicvoidsetQuestionText(StringquestionText){this.questionText=questionText;}publicStringgetStandardkey(){returnstandardkey;}publicvoidsetStandardkey(Stringstandardkey){this.standardkey=standardkey;}publicStringgetSelectKey(){returnselectKey;}publicvoidsetSelectKey(StringselectKey){this.selectKey=selectKey;}publicbooleancheck(){if(this.selectKey.equals(this.standardkey)){returntrue;}else{returnfalse;}}}

主程序源码

importjava.awt.*;importjava.sql.*;importjava.awt.event.*;importjava.text.NumberFormat;importjava.util.*;importjavax.swing.*;@SuppressWarnings("serial")publicclassTest3extendsJFrameimplementsActionListener{privateJButtonstart,commit,back,next;privateJRadioButtonaButton,bButton,cButton,dButton;privateButtonGroupbuttonGroup;privateJLabellabel,clock;privateJTextAreajTextArea;privateJPanelpanel,panel2,panel3;Testquestiont1;Testquestion[]questions;intexamtime;intp=0;//设置题目数指针inttopicnum=0;intright,error;//答对和答错ClockDispalymt;//倒计时模块publicTest3(){this.setTitle("学生在线考试系统v1");//设置标题this.setSize(440,320);//设置窗口大小this.setLocationRelativeTo(null);//设置显示位置居中this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时关闭panel=newJPanel();//初始化面板panel2=newJPanel();panel3=newJPanel();label=newJLabel("总考试时间:100分钟");//初始化并命名标签clock=newJLabel();jTextArea=newJTextArea(10,35);//初始化文本区域jTextArea.setEditable(false);//设置文本不可修改aButton=newJRadioButton("A");//初始化单选按钮bButton=newJRadioButton("B");cButton=newJRadioButton("C");dButton=newJRadioButton("D");buttonGroup=newButtonGroup();//初始化选项组start=newJButton("开始考试");//初始化按键back=newJButton("上一题");next=newJButton("下一题");commit=newJButton("提交考试");aButton.addActionListener(this);//单选按钮添加监听事件bButton.addActionListener(this);cButton.addActionListener(this);dButton.addActionListener(this);start.addActionListener(this);//按钮添加监听事件back.addActionListener(this);next.addActionListener(this);commit.addActionListener(this);buttonGroup.add(aButton);//把单选按钮放到选项组buttonGroup.add(bButton);buttonGroup.add(cButton);buttonGroup.add(dButton);panel.add(label);//把标签放入面板panelpanel.add(clock);panel.add(start);//把按键放入面板panelpanel2.add(jTextArea);//把文本区域放入面板panel2panel3.add(aButton);//把单选按钮放入面板panel3panel3.add(bButton);panel3.add(cButton);panel3.add(dButton);panel3.add(back);//把按键放入面板panel3panel3.add(next);panel3.add(commit);this.add(panel,BorderLayout.NORTH);//设置面板panel放在上面this.add(panel2,BorderLayout.CENTER);//设置面板panel2放在中间this.add(panel3,BorderLayout.SOUTH);//设置面板panel放在下面this.setVisible(true);//设置窗口可见mt=newClockDispaly(clock,30);//调用并设置倒计时的时间}publicvoidcreateExam(){Testquestiont=null;StringquestionText="";StringstandardKey="";Vector<Testquestion>qList=newVector<Testquestion>();//读取试题文件,获取考试时间和题目等内容Connectionconn=null;Statementstmt=null;try{//Class.forName("com.mysql.jdbc.Driver");StringdbURL="jdbc:mysql://localhost:3306/数据库名?useSSL=false";//驱动加载StringdbUser="root";//数据库用户名StringdbPassword="";//密码conn=DriverManager.getConnection(dbURL,dbUser,dbPassword);System.out.println("JDBC驱动程序连接数据库成功!");stmt=conn.createStatement();//创建连接方法}catch(Exceptione){e.printStackTrace();//打印异常信息}try{StringsSQL="SELECT*FROMtest_db";//查询数据库表信息ResultSetrs=stmt.executeQuery(sSQL);//接收while(rs.next()){//读取//System.out.print(rs.getString("tm")+"");questionText=rs.getString("topic")+'\n'+rs.getString(3)+'\n'+rs.getString(4)+'\n'+rs.getString(5)+'\n'+rs.getString(6)+'\n';//获取表的列standardKey=rs.getString("answer");t=newTestquestion(questionText,standardKey);qList.add(t);}}catch(SQLExceptione){System.out.println(e.getMessage());}topicnum=qList.size();//确定题目数量questions=newTestquestion[topicnum];for(inti=0;i<qList.size();i++){questions[i]=(Testquestion)qList.get(i);}}publicvoidsetSelected(Strings){//设置单选按钮不重复模块if(s.equals("A"))buttonGroup.setSelected(aButton.getModel(),true);if(s.equals("B"))buttonGroup.setSelected(bButton.getModel(),true);if(s.equals("C"))buttonGroup.setSelected(cButton.getModel(),true);if(s.equals("D"))buttonGroup.setSelected(dButton.getModel(),true);if(s.equals(""))buttonGroup.clearSelection();}publicvoidshowQuestion(){//设置试题模块jTextArea.setText("");jTextArea.append(questions[p].getQuestionText());//在文本区域显示试题setSelected(questions[p].getSelectKey());}publicvoidshowScore(){//设置成绩模块right=0;error=0;for(inti=0;i<topicnum;i++){if(questions[i].check()){//判断答案的正确与错误right++;}else{error++;}}intscore=(int)(right*100/topicnum);//设置分数JOptionPane.showMessageDialog(null,"答对"+right+"题,答错"+error+"题,分数为"+score);}@OverridepublicvoidactionPerformed(ActionEvente){//动作监听事件if(e.getSource()==start){//开始开始按键实现createExam();//调用createExam模块p=0;//题目序号showQuestion();//调用showQuestion模块start.setEnabled(false);//设置按钮不可点击mt.start();//考试时间倒计时启动}if(e.getSource()==back){//上一题的按键实现p--;if(p==-1){JOptionPane.showMessageDialog(null,"已经是第一题");p++;}showQuestion();}if(e.getSource()==next){//下一题的按键实现p++;if(p==topicnum){JOptionPane.showMessageDialog(null,"已经是最后一题");p--;}showQuestion();}if(e.getSource()==commit){//提交试卷的按键实现showScore();commit.setEnabled(false);System.exit(0);//退出}if(e.getSource()==aButton)questions[p].setSelectKey("A");if(e.getSource()==bButton)questions[p].setSelectKey("B");if(e.getSource()==cButton)questions[p].setSelectKey("C");if(e.getSource()==dButton)questions[p].setSelectKey("D");}publicstaticvoidmain(String[]args){newTest3();}}classClockDispalyextendsThread{//设置Thread考试倒计时模块privateJLabellefttimer;privateinttesttime;publicClockDispaly(JLabellt,inttime){lefttimer=lt;testtime=time*60;}publicvoidrun(){NumberFormatnumberFormat=NumberFormat.getInstance();//控制时间的显示格式numberFormat.setMinimumIntegerDigits(2);//设置数值的整数部分允许的最小位数inth,m,s;//定义时分秒while(testtime>=0){h=testtime/3600;m=testtime%3600/60;s=testtime%60;StringBufferstringBuffer=newStringBuffer("");//增加到lefttimer标签stringBuffer.append("考试剩余时间为:"+numberFormat.format(h)+":"+numberFormat.format(m)+":"+numberFormat.format(s));lefttimer.setText(stringBuffer.toString());try{Thread.sleep(1000);//延时一秒}catch(Exceptione){//ignoreerror}testtime=testtime-1;}if(testtime<=0){JOptionPane.showMessageDialog(null,"考试结束");System.exit(0);}}}

效果图和文件读取是一样的,只是数据库操作比较方便而且容易操作

注:连接数据库的时候可能会遇到这种情况,会有下面这样的报错

去网上找了一下问题发现要在StringdbURL="jdbc:mysql://localhost:3306/数据库名;//驱动加载数据库名后面加一句?useSSL=false如StringdbURL=“jdbc:mysql://localhost:3306/数据库名?useSSL=false”;添加完之后就不会报错了

正在尝试写博客,如有写的不好,请评论,谢谢!

关注我的公众号,一起进步


普通会员

0

帖子

323

回复

327

积分
沙发
发表于 2023-09-28 21:08:39

楼主听话,快到碗里来!

普通会员

0

帖子

262

回复

264

积分
板凳
发表于 2023-11-18 21:08:52

楼主听话,快到碗里来!

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017