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

第十四周课程总结

一、JDBC

概述:JDBCJava提供的一套数据库操作标准,各个数据库生产商要按照此标准生产数据库驱动,而开发者只需要掌握核心的接口即可通过SQL实现任意的数据库操作。

简介:JDBC提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便的实现多种关系型数据库的同意操作,它由一组用Java语句编写的类和接口组成。

二、JDBC驱动分类

1)JDBC-ODBC桥驱动:

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

2)JDBC本地驱动

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

3)JDBC网络驱动

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

4)本地协议纯JDBC驱动

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

三、JDBC的主要操作及接口:

序号 类及接口 描述
1 java.sql.DriverManager 用于管理JDBC驱动程序
2 java.sql.Connection 用于建立与特定数据库的连接,一个连接就是一个会话,建立连接后便可以执行SQL语句和获得检索结果
3 java.sql.Statement 一个Statement对象用于执行静态SQL语句,并获得语句执行后产生的结果
4 java.sql.PreparedStatement 创建一个可以编译的SQL语句对象,该对象可以被多次运行,以提高执行的效率,该接口是Statement的子接口
5 java.sql.ResultSet 用于创建表示SQL语句检索结果的结果集,用户通过结果集完成对数据库的访问
6 java.sql.Date 该类是标准java.util.Date的一个子集,用于表示与SQL DATE相同的日期类型,该日期不包括时间
7 java.sql.Timestamp 标准java.util.Date类的扩展,用于表示SQL时间戳,并增加了一个能表示ns(纳秒)的时间戳
8 java.sql.CallableStatement 用于执行SQL存储过程
9 java.sql.DatabaseMetaData java.sql.ResultSetMetaData一同访问数据库的元信息
10 java.sql.Driver 定义一个数据库驱动程序的接口
11 java.sql.DataTruncation JDBC遇到数据截断的异常时,报告一个警告或产生一个异常
12 java.sql.DriverPropertyInfo 通过DriverPropertyInfoDriver进行交流,可使用getDriverPropertyInfo获取或提供驱动程序的信息
13 java.sql.Time 该类是标准java.util.Date的一个子集,用于表示时、分、秒
14 java.sql.SQLException 对数据库访问时产生的错误的描述信息
15 java.sql.SQLWarning 对数据库访问时产生的警告的描述信息
16 java.sql.Types 定义了表示SQL类型的常量

其中在JDBC的基本操作中最常用的类和接口就是DriverManagerConnectionStatementResultPreparedStatement

四、MySQL数据库

简介:MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。

五、MySQL常用命令

连接MySQL数据库

mysql -u 用户名 -p 密码

创建数据库

CREATE DATABASE 数据库名称

删除数据库

DROP DATABASE 数据库名称

使用数据库

USE 数据库名称

创建数据库表

CREATE TABLE 表名称(
    字段名称1    字段类型 [DEFAULT 默认值][约束]
    字段名称2    字段类型 [DEFAULT 默认值][约束]
    ...,
);

删除数据库表

DROP TABLE 表名称;

查看表结构

DESC 表名称;

查看一个数据库的全部表

SHOW TABLES;

查看全部数据库

SHOW DATABASES;

自己昨天也尝试着去连接数据库、使用数据库,就是很容易把数据库表和数据库的操作指令搞混,如下图:

实验报告

实验代码

package diyishiba;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.*;
public class Jsb implements ActionListener{
	JFrame frame;
	JTextArea area;
	JMenu menu1,menu2,menu3;
	JMenuBar bar;
	JMenuItem item1,item2,item3,item4,item5;
	JFileChooser filec;
	File file;
	public Jsb(){
		frame=new JFrame("记事本");
		area=new JTextArea();
		menu1=new JMenu("文件");
		menu2=new JMenu("编辑");
		menu3=new JMenu("格式");
		bar=new JMenuBar();
		item1=new JMenuItem("新建(N)");
		item2=new JMenuItem("打开(O)");
		item3=new JMenuItem("保存(S)");
		item4=new JMenuItem("打印(P)");
		item5=new JMenuItem("退出(X)");
		filec=new JFileChooser();

		area.setEditable(true);
		
		item1.setMnemonic('N');
		item2.setMnemonic('O');
		item3.setMnemonic('S');
		item4.setMnemonic('P');
		item5.setMnemonic('X');
		
		item1.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));
		item2.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK));
		item3.setAccelerator(KeyStroke.getKeyStroke('S', Event.CTRL_MASK));
		item4.setAccelerator(KeyStroke.getKeyStroke('P', Event.CTRL_MASK));
		item5.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK));
		
		item1.addActionListener(this);
		item2.addActionListener(this);
		item3.addActionListener(this);
		item4.addActionListener(this);
		item5.addActionListener(this);
		
		menu1.add(item1);
		menu1.add(item2);
		menu1.add(item3);
		menu1.add(item4);
		menu1.add(item5);
		
		bar.add(menu1);
		bar.add(menu2);
		bar.add(menu3);
		
		frame.getContentPane().add(new JScrollPane(area));
		frame.setJMenuBar(bar);
		frame.setSize(400, 300);
		frame.setLocation(600, 20);
		frame.setVisible(true);
	}
	public void actionPerformed(ActionEvent e) {
		Object obj=e.getSource();
		JMenuItem item = null;
		if(obj instanceof JMenuItem){
			item=(JMenuItem) obj;
		}
		if(item==item1){
			new Jsb();
		}
		else if(item==item2){
			filec.showSaveDialog(null);
			file=filec.getSelectedFile();
			if(file!=null) {
				try {
					FileInputStream input=new FileInputStream(file);
					byte[] b=new byte[(int)file.length()];
					input.read(b);
					area.append(new String(b));
					input.close();
				} catch (FileNotFoundException e1) {
					e1.printStackTrace();
				} catch (IOException e1) {
					e1.printStackTrace();
					JOptionPane.showMessageDialog(null,"文件读取出错");
				} 
			}
		}
		else if(item==item3){
			filec.showSaveDialog(null);
			file=filec.getSelectedFile();
			try {
				FileOutputStream out=new FileOutputStream(file);
				out.write(area.getText().getBytes());
				out.close();
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
		else if(item==item4) {
			JOptionPane.showMessageDialog(null,"当前设备没有连接打印机!");
		}
		else if(item==item5){
			System.exit(0);
		}
		
	}
}

测试类

package diyishiba;

public class Test13 {

	public static void main(String[] args) {
		new Jsb();
	}

}

运行截图:

新建:

打开:

保存:

打印:

关闭:

对于这次实验,因为上课老师讲过,再加上我也拍了些核心代码,所以写的并不是很困难,就是理解这些代码花了很长时间。

原文地址:https://www.cnblogs.com/lcbxhda/p/11958015.html