📄 queryapplet.java
字号:
package querydbinapplet;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import java.sql.*;import java.util.*;import javax.swing.*;import javax.swing.table.*;/** * Title: Applet与Servlet通讯查询数据库 * Description: 教学示范 * Copyright: Copyright (c) 2003 * Company: 北京师范大学计算机系 * @author 孙一林 * @version 1.0 */public class queryApplet extends Applet { private boolean isStandalone = false; private Button queryButton = new Button(); private TextField queryTextField = new TextField(); private Label queryLabel = new Label(); String title[]; //定义显示数据表格的标题 Vector vector; //定义存储结果集数据的数组 AbstractTableModel tm; //定义显示数据表格的抽象类 JScrollPane scroll; //定义装载数据表格的容器 boolean lastQuery = false; //上次查询是否成功 public String getParameter(String key, String def) { return isStandalone ? System.getProperty(key, def) : (getParameter(key) != null ? getParameter(key) : def); } public queryApplet() { } public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { queryButton.setLabel("查询"); queryButton.setBounds(new Rectangle(288, 348, 75, 29)); queryButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { queryButton_actionPerformed(e); } }); this.setLayout(null); queryTextField.setBounds(new Rectangle(107, 26, 168, 26)); queryLabel.setText("请输入学号"); queryLabel.setBounds(new Rectangle(24, 26, 69, 21)); this.add(queryLabel, null); this.add(queryTextField, null); this.add(queryButton, null); } public void start() { } public void stop() { } public void destroy() { } public String getAppletInfo() { return "Applet Information"; } public String[][] getParameterInfo() { return null; } private void getResult() //把用户在applet中输入的查询学号传送给Servlet,然后把Servlet的处理结果显示出来 { try { String Num = queryTextField.getText(); //获取要查询的学号 URL servletURL = new URL(this.getDocumentBase(),"queryservlet"); //创建与后台Servlet通讯的连接实例 URLConnection connection = servletURL.openConnection(); //与后台Servlet进行连接 connection.setUseCaches(false); //设置连接不使用缓存 connection.setDoOutput(true); //设置连接的Servlet进行输出 ByteArrayOutputStream byteStream = new ByteArrayOutputStream(1024); //创建二进制字节流ByteArrayOutputStream实例 PrintWriter out = new PrintWriter(byteStream, true); //创建向二进制字节流写入文本数据的PrintWriter实例 String postData = "Num=" + URLEncoder.encode(Num); //将学生学号以URL方式编码 out.print(postData); //将学生学号写入二进制字节流 out.flush(); //清空PrintWriter String lengthString = String.valueOf(byteStream.size()); //获取学生学号长度,即向Servlet传送的参数的长度 connection.setRequestProperty("Content-Length", lengthString); //设置与Servlet的连接的输入参数长度 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//把与Servlet连接的输入参数转化为x-www-form-urlencoded格式 byteStream.writeTo(connection.getOutputStream()); //将学生学号传送到后台Servlet进行查询 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); //创建读取Servlet处理结果的BufferReader实例 String resultStr = br.readLine(); //读取后台Servlet以字符串形式返回的查询结果 displayResult(resultStr); //处理查询结果字符串获取查询结果并显示 } catch(Exception ex) { ex.printStackTrace(); } } void displayResult(String resultStr) //处理查询结果字符串获取查询结果并以表格方式显示 { int colCount = Integer.parseInt(trimColCount(resultStr)); //解析查询结果字符串获取查询结果的字段数 int recordCount = Integer.parseInt(trimRecordCount(resultStr)); //解析查询结果字符串获取查询结果的记录数 if (recordCount==0) //若查询结果为空,则返回查询结果为空的信息 { JOptionPane msg = new JOptionPane(); JOptionPane.showMessageDialog(this, "数据库中没有您查询的学号", "数据库中没有您查询的学号!", 1); lastQuery = false; //数据库查询操作失败 } else //若查询结果不为空,则创建表格显示查询数据 { String[][] result = new String[recordCount+1][colCount]; //创建存取查询结果的二维字符串数组 result = trimResult(colCount, recordCount, resultStr); //解析查询结果字符串获取查询结果的各个字段存入查询结果数组中 title = new String[colCount]; //获取显示数据的表格的标题 for(int i=0; i<colCount; i++) { title[i] = new String(result[0][i]); } initTable(); //初始化显示数据的表格 vector.removeAllElements(); //刷新表格并显示查询结果数组中的结果 tm.fireTableStructureChanged(); for(int i=1; i<=recordCount; i++) { Vector rec_vector = new Vector(); for(int j=0; j<colCount; j++) { rec_vector.addElement(result[i][j]); } vector.addElement(rec_vector); } tm.fireTableStructureChanged(); lastQuery = true; //数据库查询操作成功 } } String trimColCount(String s) //解析查询结果字符串获取查询结果的字段数 { int idx = s.indexOf('#'); return s.substring(0,idx); } String trimRecordCount(String s) //解析查询结果字符串获取查询结果的记录数 { int idx1 = s.indexOf('#'); int idx2 = s.indexOf('#',idx1+1); return s.substring(idx1+1,idx2); } String[][] trimResult(int colCount, int recordCount, String s) //解析查询结果字符串获取查询结果的各个字段 { String[][] result = new String[recordCount+1][colCount]; int idx1 = s.indexOf('#'); int idx2 = s.indexOf('#',idx1+1); int idx3; for(int i=0; i<=recordCount; i++) { for(int j=0; j<colCount; j++) { idx3 = s.indexOf('#', idx2+1); result[i][j] = s.substring(idx2+1, idx3); idx2 = idx3; } } return result; } void initTable() { //初始化显示数据集结果的表格 JTable table; vector = new Vector(); tm = new AbstractTableModel() { //实现表格抽象类的接口 public int getColumnCount() { return title.length; } public int getRowCount() { return vector.size(); } public Object getValueAt(int row, int column) { if(!vector.isEmpty()) { return ((Vector)vector.elementAt(row)).elementAt(column); } else { return null; } } public void setValueAt(Object value, int row, int column) { } public String getColumnName(int column) { return title[column]; } public Class getColumnClass(int c) { return getValueAt(0,c).getClass(); } public boolean isCellEditable(int row, int column) { return false; } }; table = new JTable(tm); table.setToolTipText("Display Query Result"); table.setAutoResizeMode(table.AUTO_RESIZE_SUBSEQUENT_COLUMNS); table.setCellSelectionEnabled(false); table.setShowHorizontalLines(true); table.setShowVerticalLines(true); scroll = new JScrollPane(table); scroll.setBounds(20,60,550,200); this.add(scroll,null); } public static void main(String[] args) { queryApplet applet = new queryApplet(); applet.isStandalone = true; Frame frame; frame = new Frame() { protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; frame.setTitle("Applet Frame"); frame.add(applet, BorderLayout.CENTER); applet.init(); applet.start(); frame.setSize(400,320); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2); frame.setVisible(true); } void queryButton_actionPerformed(ActionEvent e) { //把用户在applet中输入的查询学号传送给Servlet,然后把Servlet的处理结果使用表格显示 if(lastQuery==true) //若上次查询成功,则首先清除上次查询的表格 { scroll.setVisible(false); this.remove(scroll); } getResult(); //处理输入的查询学号并传送给Servlet,然后把Servlet的处理结果使用表格显示 }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -