📄 dbpreparedstatementframe.java
字号:
package dbpreparedstatement;import java.awt.*;import java.awt.event.*;import java.sql.*;import java.util.*;import javax.swing.*;import javax.swing.table.*;/** * Title: 使用PreparedStatement进行数据库操作 * Description: 教学示范 * Copyright: Copyright (c) 2002 * Company: 北京师范大学计算机系 * @author 孙一林 * @version 1.0 */public class dbPreparedStatementFrame extends JFrame { private JPanel contentPane; private Label label1 = new Label(); private TextField numField = new TextField(); private Label label2 = new Label(); private TextField nameField = new TextField(); private Label label3 = new Label(); private Choice sexChoice = new Choice(); private Label label4 = new Label(); private TextField ageField = new TextField(); private Label label5 = new Label(); private TextField departmentField = new TextField(); private Button addButton = new Button(); private Button saveButton = new Button(); private Button refreshButton = new Button(); Vector stu_Vec = null; //定义存储用户插入数据的数组 Connection connection = null; //定义与数据库进行连接的Connection对象 Statement statement = null; //定义查询数据库的Statement对象 ResultSet rs = null; //定义数据库查询的结果集 boolean lastQuery = false; //上次查询是否成功 Vector vector; //定义存储结果集数据的数组 String[] title = {"学号","姓名","年龄","性别","系名"}; //定义显示数据表格的标题 AbstractTableModel tm; //定义显示数据表格的抽象类 JScrollPane scroll; //定义装载数据表格的容器 public dbPreparedStatementFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { //初始化用户界面 contentPane = (JPanel) this.getContentPane(); label1.setText("学号"); label1.setBounds(new Rectangle(43, 17, 32, 23)); contentPane.setLayout(null); this.setSize(new Dimension(400, 450)); this.setTitle("使用PreparedStatement进行数据库操作"); numField.setBounds(new Rectangle(81, 17, 93, 28)); label2.setText("姓名"); label2.setBounds(new Rectangle(194, 17, 32, 23)); nameField.setBounds(new Rectangle(232, 17, 102, 28)); label3.setText("性别"); label3.setBounds(new Rectangle(27, 61, 29, 23)); sexChoice.setBounds(new Rectangle(63, 61, 63, 28)); label4.setText("年龄"); label4.setBounds(new Rectangle(141, 61, 29, 23)); ageField.setBounds(new Rectangle(180, 61, 57, 28)); label5.setText("系别"); label5.setBounds(new Rectangle(255, 61, 29, 23)); departmentField.setBounds(new Rectangle(295, 61, 57, 28)); addButton.setLabel("添加学生信息"); addButton.setBounds(new Rectangle(26, 380, 106, 28)); addButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { addButton_actionPerformed(e); } }); saveButton.setLabel("存储到数据库"); saveButton.setBounds(new Rectangle(139, 380, 118, 28)); saveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { saveButton_actionPerformed(e); } }); refreshButton.setLabel("刷新显示结果"); refreshButton.setBounds(new Rectangle(264, 380, 111, 28)); refreshButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { refreshButton_actionPerformed(e); } }); contentPane.add(label1, null); contentPane.add(numField, null); contentPane.add(label2, null); contentPane.add(nameField, null); contentPane.add(label3, null); contentPane.add(sexChoice, null); contentPane.add(label4, null); contentPane.add(ageField, null); contentPane.add(label5, null); contentPane.add(departmentField, null); contentPane.add(addButton, null); contentPane.add(saveButton, null); contentPane.add(refreshButton, null); sexChoice.addItem("男"); sexChoice.addItem("女"); saveButton.setEnabled(false); stu_Vec = new Vector(); } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { try { connection.close(); } catch(Exception ex) { ex.printStackTrace(); } System.exit(0); } } 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(50,100,300,250); contentPane.add(scroll,null); } void addButton_actionPerformed(ActionEvent e) { //响应用户的添加数据的要求 studentInfo info = new studentInfo(); //创建存储用户输入数据的类 info.stu_Number = Integer.parseInt(numField.getText()); info.stu_Name = nameField.getText(); info.stu_Sex = sexChoice.getSelectedItem(); info.stu_Age = Integer.parseInt(ageField.getText()); info.stu_Department = departmentField.getText(); stu_Vec.addElement(info); //将用户输入的数据存入数组 numField.setText(""); nameField.setText(""); ageField.setText(""); departmentField.setText(""); saveButton.setEnabled(true); } void saveButton_actionPerformed(ActionEvent e) { //将用户数据存储到数据库 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //指定与数据库连接使用JDBC-ODBC桥驱动程序 String url = "jdbc:odbc:student"; //指定数据源名 connection = DriverManager.getConnection(url); //与数据源建立连接 String sql = "insert into studentbase(学号,姓名,年龄,性别,系名) values(?,?,?,?,?)"; //创建要多次执行的插入数据的SQL语句,变量使用“?”代替 PreparedStatement preStatement = connection.prepareStatement(sql); //使用特定格式的SQL语句建立PreparedStatement接口实例 for(int i=0; i<stu_Vec.size(); i++) //将用户数据数组中的数据逐条插入到数据库中 { int num = ((studentInfo)stu_Vec.elementAt(i)).stu_Number; //取出一条数据 String name = ((studentInfo)stu_Vec.elementAt(i)).stu_Name; String sex = ((studentInfo)stu_Vec.elementAt(i)).stu_Sex; int age = ((studentInfo)stu_Vec.elementAt(i)).stu_Age; String department = ((studentInfo)stu_Vec.elementAt(i)).stu_Department; preStatement.setInt(1, num); //设置一条数据的各个字段的值 preStatement.setString(2, name); preStatement.setInt(3, age); preStatement.setString(4, sex); preStatement.setString(5, department); preStatement.executeUpdate(); //将一条数据插入数据库 } JOptionPane msg = new JOptionPane(); String insert_msg = "添加" + stu_Vec.size() + "条记录成功"; JOptionPane.showMessageDialog(this, insert_msg, insert_msg, 1); preStatement.close(); //关闭PreparedStatement接口实例 stu_Vec.clear(); //清空用户数据数组中的数据 saveButton.setEnabled(false); } catch(SQLException ex){ //捕捉异常 System.out.println("\nERROR:----- SQLException -----\n"); while (ex != null) { System.out.println("Message: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("ErrorCode: " + ex.getErrorCode()); ex = ex.getNextException(); } } catch(Exception ex ) { ex.printStackTrace(); } finally { try { if(statement != null) { statement.close(); //关闭Statement接口实例 } if(connection != null) { connection.close(); //关闭Connection接口实例 } } catch (SQLException ex) { System.out.println("\nERROR:----- SQLException -----\n"); System.out.println("Message: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("ErrorCode: " + ex.getErrorCode()); } } } void refreshButton_actionPerformed(ActionEvent e) { //使用表格显示数据库数据 if(lastQuery) //若上次查询成功,则首先清除上次查询的表格 { scroll.setVisible(false); contentPane.remove(scroll); } initTable(); //初始化新的表格 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //指定与数据库连接使用JDBC-ODBC桥驱动程序 String url = "jdbc:odbc:student"; //指定数据源名 connection = DriverManager.getConnection(url); //与数据源建立连接 statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //创建Statement接口实例 String sql = "select * from studentbase"; //创建取出studentbase表中所有数据的SQL语句 rs = statement.executeQuery(sql); //将数据存入结果集中 vector.removeAllElements(); tm.fireTableStructureChanged(); //刷新表格显示结果集中的数据 while(rs.next()) { Vector rec_vector = new Vector(); rec_vector.addElement(rs.getString("学号")); rec_vector.addElement(rs.getString("姓名")); rec_vector.addElement(rs.getString("性别")); rec_vector.addElement(rs.getString("年龄")); rec_vector.addElement(rs.getString("系名")); vector.addElement(rec_vector); } tm.fireTableStructureChanged(); lastQuery = true; //数据库查询操作成功 } catch(SQLException ex){ //捕捉异常 System.out.println("\nERROR:----- SQLException -----\n"); while (ex != null) { System.out.println("Message: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("ErrorCode: " + ex.getErrorCode()); ex = ex.getNextException(); } } catch(Exception ex ) { ex.printStackTrace(); } finally { try { if(statement != null) { statement.close(); //关闭Statement接口实例 } if(connection != null) { connection.close(); //关闭Connection接口实例 } } catch (SQLException ex) { System.out.println("\nERROR:----- SQLException -----\n"); System.out.println("Message: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("ErrorCode: " + ex.getErrorCode()); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -