• 第十四周课程总结&实验报告(简单记事本的实现)


    课程总结:

    JDBC:

    Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

    DriverManager:

    用于管理JDBC驱动的服务类。程序中使用该类的的主要功能是获取Connection对象,该类包含如下方法:
    public static Connection getConnection(String url, String user, String password) throws SQLException
    该方法获得url对应数据库的连接;
    

    Connection:

    代表数据库连接对象,每个Connection代表一个物理连接会话。要想访问数据库,必须先得到数据库连接。该接口的常用方法如下:
    Statement createStatement() throws SQLException; 该方法返回一个Statement对象;
    PreparedStatement prepareStatement(String sql)throws SQLException;该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译;
    CallableStatement prepareCall(String sql) throws SQLException;
    该方法返回CallableStatement对象,该对象用于调用存储过程。
    上面上个方法都返回用于执行sql语句的Statement对象,PreparedStatement和CallableStatement是Statement的子类,只有获得了Statement之后才可以执行sql语句;
    除此之外,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:

    用于执行sql语句的工具接口。该对象既可以执行DDL,DCL语句,也可以用于执行DML语句,还可以用于执行sql查询。当执行sql查询时,返回查询到的结果集。它的常用方法如下:
    ResultSet executeQuery(String sql) throws SQLException;该方法用于执行查询语句,并返回查询结果对应ResultSet对象。该方法只能用于执行查询语句。
    int executeUpdate(String sql) throws SQLException;该方法用于执行DML语句,并返回受影响的行数;该方法也可用于执行DDL语句,执行DDL语句将返回0;
    boolean execute(String sql) throws SQLException;改方法可以执行任何sql语句。如果执行后第一个结果为ResultSet对象,则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回false;
    

    PreparedStatement:

    预编译的Statement对象,PreparedStatement是Statement的子接口,它允许数据库预编译sql语句(这些sql语句通常带有参数),以后每次只改变sql命令的参数,避免数据库每次都需要编译sql语句,无需再传入sql语句,
    只要为预编译的sql语句传入参数值即可。所以它比Statement多了如下方法:
    void setXxx(int parameterIndex, Xxx value):该方法根据传入参数值的类型不同,需要使用不同的方法。传入的值根据索引传给sql语句中指定位置的参数。
    

    ResultSet:

    结果集对象。该对象包含访问查询结果的方法,ResultSet可以通过列索引或列名获得列数据。它包含了如下常用方法来移动记录指针。
    void close() throws SQLException;释放ResultSet对象;
    boolean absolute( int row ) throws SQLException;将结果集的记录指针移动到第row行,如果row是负数,则移动到倒数第row行,如果移动后的记录指针指向一条有效记录,则该方法返回true;
    boolean next() throws SQLException;将结果集的记录指针定位到下一行,如果移动后的记录指针指向一条有效的记录,则该方法返回true;
    boolean last() throws SQLException;将结果集的记录指针定位到最后一行,如果移动后的记录指针指向一条有效的记录,则该方法返回true;
    

    MySQL:

    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 JNodepad extends JFrame implements ActionListener {
    JMenuBar menubar = new JMenuBar();
    JMenu file = new JMenu("文件(F)");
    JMenu edit = new JMenu("编辑(E)");
    JMenu help = new JMenu("帮助(H)");
    JMenuItem create = new JMenuItem("新建");
    JMenuItem open = new JMenuItem("打开...");
    JMenuItem save = 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 JNodepad() {
      
    file.setMnemonic(KeyEvent.VK_F);
    edit.setMnemonic(KeyEvent.VK_E);
    help.setMnemonic(KeyEvent.VK_H);
    
    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));
    
    save.addActionListener(this);
    create.addActionListener(this);
    open.addActionListener(this);
    exit.addActionListener(this);
    
    file.add(create);
    file.add(open);
    file.add(save);
    file.addSeparator();
    file.add(exit);
    
    menubar.add(file);
    menubar.add(edit);
    menubar.add(help);
    
    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 JNodepad();
     }
    }
    

    截图:



    编程总结:
    在写这个记事本的过程中,发现自己有很多问题,很多东西都不知道添加到哪里,对各种组件的运用还不熟悉,写完代码后感觉自己还是有许多不懂的地方。

  • 相关阅读:
    Redis学习第八课:Redis高级实用特性(二)
    Redis学习第八课:Redis高级实用特性(一)
    Redis学习第七课:键值命令和服务器命令
    Redis学习第六课:Redis ZSet类型及操作
    Redis学习第五课:Redis Set类型及操作
    Redis学习第四课:Redis List类型及操作
    (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
    Clickhouse单机及集群部署详解
    一致性模型及一致性协议
    HBase存储及读写原理介绍
  • 原文地址:https://www.cnblogs.com/leichen210/p/11955968.html
Copyright © 2020-2023  润新知