zoukankan      html  css  js  c++  java
  • 第十四周课程总结&实验报告(简单记事本的实现)

    课程总结:

    1.JDBC(Java Database Connectivity)

    2.JDBC API:JDBC API是Java语言中用于连接各种数据库的API。

    3.主要的包和相应的接口、类:
    java.sql.: class DriverManager; interface Connection, Statement, ResultSet, PreparedStatement, CallableStatement
    javax.sql.
    : interface DataSource

    4.使用JDBC的6个关键步骤
    加载驱动

    Class.forName("com.mysql.jdbc.Driver");
    

    建立连接

    connection = DriverManager.getConnection(url, user, passwd);
    

    创建Statement

    statement = connection.createStatement();
    

    执行查询

    String sql = "show databases";
    resultSet = statement.executeQuery(sql);
    
    

    处理结果

    while (resultSet.next()) {
        String database = resultSet.getString("Database");
        System.out.println("Query: " + database);
    }
    

    关闭连接(放到finally子句)

    finally {
        //6.关闭连接
        try {
            resultSet.close();
            statement.close();
            connection.close();
        } catch (NullPointerException e) {
            System.out.println("数据库连接未建立或查询操作有误!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

    5.控制事务

    Connection还有如下几个用于控制事务的方法。
    Savepoint setSavepoint() throws SQLException;创建一个保存点;
    Savepoint setSavepoint(String name) throws SQLException;以指定名字来创建一个保存点;
    void setTransactionIsolation(int level) throws SQLException;设置事务的隔离级别;
    void rollback() throws SQLException;回滚事务;
    void rollback(Savepoint savepoint) throws SQLException;将事务回滚到指定的保存点;
    void setAutoCommit(boolean autoCommit) throws SQLException;关闭自动提交,打开事务;
    void commit() throws SQLException;提交事务;
    

    Statement批处理相关方法:

    void addBatch(String sql):添加一条语句到“批”中。
    int[] executeBatch():执行“批”中所有语句。返回值表示每条语句所影响的行数据。
    void clearBatch():清空“批”中的所有语句。
    

    Statement 向数据库发送 SQL 语句有三个常用的方法:

    int executeUpdate(String sql):
    该方法可以执行 insert、update、delete 语句,也何以执行 create table、alter table、drop table 等更新数据库表的操作。返回值为更新操作影响的行数。
    ResultSet executeQuery(String sql):
    该方法执行查询语句,返回结果为 ResultSet 对象,表示一个二维的表格。
    Boolean execute():
    该方法可以执行所有的 SQL 语句,返回值为 Boolean 类型,表示 SQL 语句是否有结果集。当执行更新操作时,可以掉用 int getUpdateCount() 方法来获取更新操作影响的行数。当执行查询操作时,可以掉用 ResultSet getResultSet() 来获取查询结果。
    

    PreparedStatement批处理

            String sql = "insert into stu values(?,?,?,?)";
            preparedStatement= con.prepareStatement(sql);
            for(int i = 0; i < 10; i++) {
                preparedStatement.setString(1, "S_10" + i);
                preparedStatement.setString(2, "stu" + i);
                preparedStatement.setInt(3, 20 + i);
                preparedStatement.setString(4, i % 2 == 0 ? "male" : "female");
                preparedStatement.addBatch();
            }
            preparedStatement.executeBatch();
    

    数据库操作也是I/O过程。
    PreparedStatement
    优点:防止SQL注入,有相应的setInt()等方法。
    基本使用:
    创建PreparedStatement:

    preparedStatement = connection.prepareStatement("select ename from emp where ename like ?");
    

    设置参数值(注意,这里的columnIndex是从1开始的)

    preparedStatement.setString(1,"%A%");
    

    执行查询

    resultSet = JdbcUtil.executeQueryPrepared();
    

    关闭PreparedStatement:调用close方法。

    MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
    如下:

    show databases; 显示数据库
    create database name; 创建数据库
    use databasename; 选择数据库
    drop database name 直接删除数据库,不提醒
    show tables; 显示表
    describe tablename; 表的详细描述
    select中加上distinct 去除重复字段
    

    实验总结

    源代码

    package text;
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.filechooser.FileNameExtensionFilter;
    import java.awt.event.*;
    import java.io.*;
    
    @SuppressWarnings("serial")
    public class test extends JFrame implements ActionListener {
    JMenuBar menubar = new JMenuBar();
    JMenu file = new JMenu("文件(F)");
    JMenu edit = new JMenu("编辑(E)");
    JMenuItem create = new JMenuItem("新建");
    JMenuItem open = new JMenuItem("打开...");
    JMenuItem save = new JMenuItem("保存");
    JMenuItem printf = new JMenuItem("打印");
    JMenuItem exit = new JMenuItem("退出");
    
    JMenuBar popup = new JMenuBar();
    JScrollPane scroll = new JScrollPane(textarea, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    String pathSelect;
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    
    public static JTextArea textarea = new JTextArea();
    
    public test() {
      
    file.setMnemonic(KeyEvent.VK_F);
    edit.setMnemonic(KeyEvent.VK_E);
    
    
    create.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
    open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
    save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
    printf.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));
    
    save.addActionListener(this);
    create.addActionListener(this);
    open.addActionListener(this);
    printf.addActionListener(this);
    exit.addActionListener(this);
    
    file.add(create);
    file.add(open);
    file.add(save);
    file.add(printf);
    file.addSeparator();
    file.add(exit);
    
    menubar.add(file);
    menubar.add(edit);
    
    
    textarea.add(popup);
    textarea.addMouseListener(new MouseAdapter() {
    @SuppressWarnings("deprecation")
    public void mouseReleased(MouseEvent e) {
    if (e.getButton() == MouseEvent.BUTTON3) {
    popup.show();
    }
    }
    });
    
    this.add(menubar, BorderLayout.NORTH);
    this.add(scroll, BorderLayout.CENTER);
    this.setTitle("记事本");
    this.setSize(500, 400);
    this.setLocationRelativeTo(null);
    //this.setIconImage(new ImageIcon(this.getClass().getResource("/icon/notepad.png")).getImage());//图标放在源目录的icon文件夹
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);
    }
    
     @SuppressWarnings("static-access")
    public void actionPerformed(ActionEvent e) {
      // Event对象发生源
      if (e.getSource() == open) {
    
       JFileChooser chooser = new JFileChooser();
       FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文档(*.txt)", "txt");
       chooser.setFileFilter(filter);
       chooser.setDialogTitle("文件打开");
       chooser.showOpenDialog(null);
       chooser.setVisible(true);
    
      }
    
      if (e.getSource() == save && (pathSelect == null)) {
       JFileChooser chooser = new JFileChooser();
       chooser.setDialogTitle("保存");
       chooser.showSaveDialog(null);
       chooser.setVisible(true);
    
       PrintStream ps;
       try {
        pathSelect = chooser.getSelectedFile().getPath();
        ps = new PrintStream(pathSelect);
        System.setOut(ps);
        System.out.println(this.textarea.getText());
    
       } catch (Exception e1) {
       }
      } else if (e.getSource() == save && !(pathSelect == null)) {
       PrintStream ps;
       try {
        ps = new PrintStream(pathSelect);
        System.setOut(ps);
        System.out.println(this.textarea.getText());
       } catch (FileNotFoundException e1) {
       }
      }
    
      if (e.getSource() == create) {
       textarea.setText("");
       pathSelect = null;
      }
    
      if (e.getSource() == exit) {
       System.exit(0);
      }
      }
     public static void main(String[] args) {
      new test();
     }
    }
    

    实验截图

    实验感想
    写这个代码老是好多错误,还是参考了一下样例代码才写出来的。那个打印我觉得没连接机器也弄不了就当个摆设吧。写完之后,感觉对于数据库和图形界面的东西还是不熟悉。

  • 相关阅读:
    final 和 static
    EL表达式
    strusts2request,session取得
    Double的精度问题
    隐藏软件盘(个人因为好用的方法)
    ListView没有分割线怎么办?
    自定义ActionBar完全覆盖系统的
    保存图片的工具类
    Intent传递list<bean>集合
    Android取得图库图片的具体地址
  • 原文地址:https://www.cnblogs.com/LfanWyuXooo/p/11959992.html
Copyright © 2011-2022 走看看