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


    第十四周课程总结

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

    运行截图:

    新建:

    打开:

    保存:

    打印:

    关闭:

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

  • 相关阅读:
    【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
    【转】 Pro Android学习笔记(三九):Fragment(4):基础小例子-续
    【转】MEAN:Nodejs+express+angularjs+mongodb搭建前端项目框架NJBlog
    handlebars中的partial
    jquery源码分析
    数据库:MySQL索引背后的数据结构及算法原理【转】
    nginx做rails项目web服务器缓存配置方法
    浏览器刷新的三种方式
    【转】火狐浏览器中firebug插件的时间线域解释
    Rails:rails链接多个数据库【转】
  • 原文地址:https://www.cnblogs.com/lcbxhda/p/11958015.html
Copyright © 2020-2023  润新知