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

课程总结:

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();
 }
}

截图:



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

原文地址:https://www.cnblogs.com/leichen210/p/11955968.html