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

实验报告(简单记事本的实现)

实验任务详情:

完成简单记事本的练习。

(1)实验代码:

package 测试;
 
import java.awt.EventQueue;
import java.awt.FileDialog;

import javax.swing.JFrame;
import javax.swing.JMenu;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

import javax.swing.JScrollPane;
import javax.swing.JMenuItem;
	 
public class NotePad {
	private JFrame frame;
	private JTextArea text;
		private File file;
		public static void main(String[] args) {
			EventQueue.invokeLater(new Runnable() {
				public void run() {
				try {
					NotePad window = new NotePad();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}


	public NotePad() {
		initialize();
		}

	private void initialize() {
		frame = new JFrame("记事本");
		frame.setBounds(100, 100, 960, 720);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JMenuBar menuBar = new JMenuBar();
		frame.setJMenuBar(menuBar);
		
		JMenu mne = new JMenu("\u6587\u4EF6(F)");
		menuBar.add(mne);
			
		JMenuItem new_new = new JMenuItem("\u65B0\u5EFA");
		mne.add(new_new);
		//监听和处理新建
		new_new.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
					int ret = JOptionPane.showOptionDialog(null, "已经打开的文件尚未保存,需要保存吗?", "提示", 
						JOptionPane.YES_NO_CANCEL_OPTION,
						JOptionPane.WARNING_MESSAGE, null, null, null);
				if(ret == JOptionPane.NO_OPTION){
					
					text.setText(null);
				}
				if(ret == JOptionPane.YES_OPTION){
					
					//new JFileChooser();
					FileDialog fd = new FileDialog(frame, "保存", FileDialog.SAVE);
					
					if(file==null)
					{
						fd.setVisible(true);
							String dirPath = fd.getDirectory();
						String fileName = fd.getFile();
						if(dirPath==null || fileName==null)
							return ;
						file = new File(dirPath,fileName);
					}
					try
					{
						BufferedWriter bufw  = new BufferedWriter(new FileWriter(file));
						String text1 = text.getText();
						bufw.write(text1);
						bufw.close();
					}
					catch (IOException ex)
					{
						throw new RuntimeException();
					}
						text.setText(null);
					
				}
			}
			});
		
			
		JMenuItem open = new JMenuItem("\u6253\u5F00");
			mne.add(open);
		//监听和处理打开
			open.addActionListener(new ActionListener() {
				
			public void actionPerformed(ActionEvent e) {
					FileDialog fd = new FileDialog(frame, "打开", FileDialog.LOAD);
				fd.setVisible(true);
				String dir = fd.getDirectory();
				String f = fd.getFile();
				File f_open = new File(dir, f);
				try {
					BufferedReader buf = new BufferedReader(new FileReader(f_open));
					
					String line = null;
					while((line=buf.readLine())!=null) {
						
						text.append(line+"\r\n");
						}
					buf.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
				}
			});
		
		JMenuItem save = new JMenuItem("\u4FDD\u5B58");
		mne.add(save);
		//监听和处理保存
		save.addActionListener(new ActionListener() {
				
			public void actionPerformed(ActionEvent arg0) {
				FileDialog fd = new FileDialog(frame, "保存", FileDialog.SAVE);
				fd.setVisible(true);
				String dir = fd.getDirectory();
				String f = fd.getFile();
				File file = new File(dir, f);
					
				try {
						BufferedWriter buf = new BufferedWriter(new FileWriter(file));
						
						String s = text.getText();
					buf.write(s);
						buf.close();
				} catch (IOException e) {
						e.printStackTrace();
				}
				}
			});
			
			JMenuItem exit = new JMenuItem("\u9000\u51FA");
		mne.add(exit);
			//监听和处理退出
			exit.addActionListener(new ActionListener() {
				
				public void actionPerformed(ActionEvent arg0) {
					String s = text.getText();
					if(s==null) {
						System.exit(0);
					}
					else {
						int ret = JOptionPane.showOptionDialog(null, "是否将更改保存到 无标题?", "记事本", 
							JOptionPane.YES_NO_CANCEL_OPTION,
								JOptionPane.WARNING_MESSAGE, null, null, null);
					if(ret == JOptionPane.NO_OPTION){
							
							System.exit(0);
						}
						if(ret == JOptionPane.YES_OPTION){
						
							FileDialog fd = new FileDialog(frame, "保存", FileDialog.SAVE);
							fd.setVisible(true);
							String dir = fd.getDirectory();
							String f = fd.getFile();
						File file = new File(dir, f);
							
						try {
							BufferedWriter buf = new BufferedWriter(new FileWriter(file));
								
								String s1 = text.getText();
								buf.write(s1);
								buf.close();
							} catch (IOException e) {
								e.printStackTrace();
							}
						System.exit(0);
						}
				}
				
				}
		});
		
		JScrollPane scrollPane = new JScrollPane();
			frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
			
			text = new JTextArea();
			scrollPane.setViewportView(text);
	}
		

	}

(2)实验运行结果截图:

(3)实验中遇到的问题:

做这个记事本,我发现自己对于这些代码的运用还不太熟练,出现了大量的错误,勉强完成了这个代码,但是还是会有些bug,比如说读取的时候有时候会出现乱码,不太清楚应该如何解决.实力不行,还需再练.

第十四周课程总结

这周主要学习了JDBC

这周学习的内容:

1.JDBC

  • JDBC(Java Database Connectivity,Java数据库连接),提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便的实现多种关系型数据库的统一操作,它由一组用Java语言编写的类和接口组成。
  • 在实际开发中可以直接使用JDBC进行各个数据库的连接与操作,而且可以方便的向数据库中发送各种SQL命令。在JDBC中提供的是一套标准的接口,这样,各个支持JAVA的数据库生产商只要按照此接口提供相应的实现,则就都可以使用JDBC进行操作。极大的体现了JAVA的可移植性的设计思想。

2.JDBC驱动分类

JDBC本身提供的是一套数据库操作标准,而这些标准又需要各个数据库厂商实现,所以针对于每一个数据库厂商都会提供一个JDBC的驱动程序,目前比较常见的JDBC驱动程序可分为以下四类:

(1).JDBC-ODBC桥驱动

JDBC-ODBC是SUN提供的一个标准的JDBC操作,直接利用微软的ODBC进行数据库的连接操作,但是,这种操作性能较低,所以通常情况下是不推荐使用这种方式进行操作的。

(2).JDBC本地驱动

直接使用各个数据库生产商提供的JDBC驱动程序,但是因为其只能应用在特定的数据库上,会丧失掉程序的可移植性,但是这样操作的性能较高。

(3).JDBC网络驱动

这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。

(4).本地协议纯JDBC驱动

这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。

3.JDBC的主要操作类及接口

4.JDBC操作步骤

数据库安装并配置完成之后,就可以按照以下的步骤进行数据库的操作了:

  • 1.加载数据库驱动程序:各个数据库都会提供JDBC的驱动程序开发包,直接把JDBC操作所需要的开发包(一般为.jar或.zip)直接配置到classpath路径即可。
  • 2.连接数据库:根据各个数据库的不同,连接的地址也不同,此连接地址将由数据库厂商提供,一般在使用JDBC连接数据库的时候都要求用户输入数据库连接的用户名和密码,本章使用的是mysql数据库,所以用户名为“root”,密码为“mysqladmin”,用户在取得连接之后才可以对数据库进行查询或更新的操作。
  • 3.使用语句进行数据库操作:数据库操作分为更新和查询两种操作,除了可以使用标准的SQL语句之外,对于各个数据库也可以使用其自己提供的各种命令。
  • 4.关闭数据库连接:数据库操作完毕之后需要关闭连接以释放资源。

5.连接及关闭数据库

数据库驱动程序可以正常加载的话,下面就可以连接数据库了,使用DriverManager类进行连接操作,DriverManager类中的常用方法如下

DriverManager说明
在DriverManager中,提供的主要操作就是得到一个数据库的连接,getConnection()方法就是取得连接对象,此方法返回的类型是Connection对象,不管使用那种方式连接,都必须提供一个数据库的连接地址,如果在连接数据库的时候需要用户名和密码,则还需要将用户名和密码设置上。
MySQL数据库的连接地址格式

jdbc:mysql://IP地址:端口号/数据库名称

通过DriverManager取得Connection对象之后,实际上就表示数据库连接上了,连接上数据库之后就可以进行数据库的更新及查询操作,但是操作的最后数据库连接必须关闭。
Connection接口的常用方法

posted on 2019-11-29 19:57  噫~  阅读(377)  评论(1编辑  收藏  举报

导航