java+sql2005 随机抽取试题的代码

代码如下:

import java.awt.BorderLayout;
import java.util.*;
import java.awt.event.*;
import java.awt.Container;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test extends JFrame {
public static final String DBDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static final String DBURL="jdbc:sqlserver://localhost:1433;DatabaseName=SystemTest;SelectMethod=Cursor";
public static final String DBUSER="sa";
public static final String DBPASSWORD="123";
public static Connection conn=null;
public static Statement stmt=null;
public static Statement stmt1=null;
public static Statement stmt2=null;
public static ResultSet rs=null;
public static ResultSet rs1=null;
public static void main(String args[]) {
try{
//数据库的连接。
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
stmt= conn.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
stmt1= conn.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
stmt2= conn.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
}catch(Exception e)
{
e.printStackTrace();
}
Test t1=new Test();
t1.sel_save();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test frame = new Test();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
/*try{
sql_1="delete from stu_selAns";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql_1);
}
catch(Exception event)
{
}*/
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame
*/
public Test() {
super();
setBounds(100, 100, 500, 386);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("测试");
final Container container = new Container();
container.setLayout(null);
getContentPane().add(container, BorderLayout.CENTER);
label = new JLabel();
label.setBounds(22, 68, 462, 57);
container.add(label);
final JButton nextButton = new JButton();
nextButton.setText("next");
nextButton.setBounds(60, 270, 106, 28);
container.add(nextButton);
nextButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
int current=Integer.parseInt(label_3.getText());
current+=1;
if(current>0 &¤t<=10)
{
label_3.setText(""+current);
label_3.setVisible(true);
sel_show(current);
}
label_2.setVisible(false);
label_1.setVisible(false);
}
});
button = new JButton();
button.setText("显示答案");
button.setBounds(224, 270, 106, 28);
container.add(button);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
label_1.setVisible(true);
label_2.setVisible(true);
int current=Integer.parseInt(label_3.getText());
current+=1;
try{
sql="select sel_Ans from stu_selAns where sel_Id="+current;
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next())
{
label_2.setText(rs.getString(1));
}
}catch(Exception e)
{
}
}
});
label_1 = new JLabel();
label_1.setText("正确答案是:");
label_1.setBounds(22, 199, 78, 28);
container.add(label_1);
label_1.setVisible(false);
label_2 = new JLabel();
label_2.setBounds(106, 199, 323, 28);
container.add(label_2);
label_2.setVisible(false);
button_1 = new JButton();
button_1.setText("退出");
button_1.setBounds(349, 270, 106, 28);
container.add(button_1);
button_1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
dispose();
/*try{
sql_1="delete from stu_selAns";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql_1);
}catch(Exception e)
{
e.printStackTrace();
}*/
}
});
label_3 = new JLabel();
label_3.setBounds(363, 175, 66, 18);
container.add(label_3);
label_3.setVisible(false);
label_3.setText("0");
}
//此方法用于获取选择题的数目。
public int sel_count()
{
int n = 0;
try{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
sql_1="select COUNT(selId) from sel_test where selId=1";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql_1);
if(rs.next())
{
n=rs.getInt(1);
}
}
catch(Exception e )
{
e.printStackTrace();
}
return n;
}
//此方法用于产生十道选择题的随机数。
public int[] Random()
{
Test st=new Test();
int n=st.sel_count();
int[] numbers=new int[n];
for(int i=0;i<numbers.length;i++)
numbers[i]=i+1;
int[] result=new int[10];
for(int i=0;i<result.length;i++)
{
int r=(int)(Math.random()*n);
result[i]=numbers[r];
numbers[r]=numbers[n-1];
n--;
}
return result;
}
//此方法实现存取随机抽取的选择题
public void sel_save()
{
Test s=new Test();
int k[]=s.Random();
Arrays.sort(k);
for(int i=0;i<k.length;i++)
{
System.out.println(k[i]);
try{
sql_2="select selNo,selInf,selA,selB,selC,selD,selAns from sel_test where selNo="+k[i];
sql=" insert into stu_selAns(sel_No,sel_Inf,sel_A,sel_B,sel_C,sel_D,sel_Ans)"+sql_2;
stmt=conn.createStatement();
stmt1=conn.createStatement();
rs=stmt1.executeQuery(sql);
while(rs.next())
{
stmt1.execute(sql);
}
}catch(Exception e)
{
e.printStackTrace();
}
}
//此处的FOR循环实现将试题的题号从一到十进行排列。
for(int j=0;j<k.length;j++)
{
//System.out.println(k[j]+"a");//用于测试产生的随机数是否相同。
try{
sql="update stu_selAns set sel_Id="+(j+1)+"where sel_No="+k[j];
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
//此方法实现选择题的调用
public void sel_show(int i)
{
try{
sql="select sel_Inf ,sel_Ans from stu_selAns where sel_No="+i;
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next())
{
label.setText(rs.getString(1));
label_2.setText(rs.getString("sel_Ans"));
}
}catch(Exception e)
{
e.printStackTrace();
}
}
private String sql;
public static String sql_1;
private String sql_2;
private JLabel label;
private JLabel label_1;
private JLabel label_2;
private JLabel label_3;
private JButton button; //显示答案的按钮。
private JButton button_1;
}
说明:执行此程序前需先建立两张表。其中一张表是(sel_test(selNo,selA,selB,selC,selD,selAns)),另一张表是(stu_selAns(sel_No,sel_A,sel_B,sel_C,sel_D,sel_Ans) 此张表用于保存从表sel_test

中随机抽取的题目。
此程序是大概思路是:先从题库中随机抽取十道题,然后将其保存在另一张表中并将其相应的题号变为一到十。便于接下来的其他操作。

(0)

相关推荐

  • 浅谈Java自动装箱与拆箱及其陷阱

    在本文中,笔者向大家介绍下Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,并从源码中解读自动装箱与拆箱的原理,同时这种特性也留有一个陷阱.开发者如果不注意,就会很容易跌入这个陷阱. 自动装箱(Autoboxing) 定义 大家在平时编写Java程序时,都常常以以下方式来定义一个Integer对象: Integer i=100; 从上面的代码中,大家可以得知,i为一个Integer类型的引用,100为Java中的基础数据类型(primitive data type).而这种直接将一个基

  • Java编程中的一些常见问题汇总

    本文列举了我在周围同事的Java代码中看到的一些比较典型的错误.显然,静态代码分析(我们团队用的是qulice)不可能发现所有的问题,这也是为什么我要在这里列出它们的原因. 如果你觉得少了什么,请不吝赐教,我会很乐意把它们加上. 下面列出的所有这些错误基本都与面向对象编程有关,尤其是Java的OOP. 类名 读下这篇短文"什么是对象".类应该是真实生活中的一个抽象实体,而不是什么"validators","controller", "m

  • Java陷阱之assert关键字详解

    一.概述 在C和C++语言中都有assert关键,表示断言.在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都 将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启. assert关键字语法很简单,有两种用法: 1.ass

  • java集合迭代器Iterator中的remove陷阱

    package TestList; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.TreeSet; public class TestIterator { /**      * @param args      */     public static void main(String[] args) {         // TODO Auto-gen

  • 浅析java中Integer传参方式的问题

    Java本身都是值传递式的调用,对于对象传递的是地址值.给地址值重新赋值等于重新指向,不会影响外层.而且这里Integer对象也有特殊性.其实现上可能类似 复制代码 代码如下: class Integer{final int value; //一旦赋值,就不能改变.} 这就出现:调用时传的地址值不能改变外层+对象本身又不能改变.导致这个值没法改变 解决方案很多1.java风格就是,单个值用返回值.return i; 外面再i=foo();赋值:多个值用数组或对象.2.传递自己的封装类.class

  • Java中常见的陷阱题及答案

    1.找奇数: public static boolean isOdd(int i){ return i % 2 == 1; } 上面的方法真的能找到所有的奇数么? A:没有考虑到负数问题,如果i为负则不正确.应该return i%2 == 0 2. 浮点数相减 System.out.println(2.0-1.9); A:Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题.在大多数情况下,计算的结果是准确的,但是多试几次(可以做一

  • 探讨Java中最常见的十道面试题(超经典)

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何

  • java中for循环删除集合陷阱

    首先看下面的代码: import java.util.LinkedList; import java.util.List; public class DeleteCollection { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add("a"); list.add("b"); list.add(&qu

  • Java中典型的内存泄露问题和解决方法

    Q:在Java中怎么可以产生内存泄露?A:Java中,造成内存泄露的原因有很多种.典型的例子是一个没有实现hasCode和equals方法的Key类在HashMap中保存的情况.最后会生成很多重复的对象.所有的内存泄露最后都会抛出OutOfMemoryError异常,下面通过一段简短的通过无限循环模拟内存泄露的例子说明一下. 复制代码 代码如下: import java.util.HashMap;import java.util.Map; public class MemoryLeak { pu

  • 15个高级Java多线程面试题及回答

    Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的.下面这些是我在不同时间不同地点喜欢问的Jav

随机推荐