第十四周课程总结与实验报告

                                                  学习总结
  • 本周主要学习了用JDBC来使用MySQL。

一,JDBC概述

   JDBC(Java Database Connectivity,Java数据库连接),提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便地实现多种关系型数据库的统一操作,它由一组用Java语言编写的类与接口组成。

二,JDBC驱动的分类

   JDBC本身提供的是一套数据库操作标准,目前比较常见的JDBC驱动可分为以下四类:

   (1)JDBC-ODBC桥驱动:一种由Sun提供的标准JDBC操作,直接使用微软的ODBC进行数据库的连接操作,但这种操作性能低,不推荐直接使用。

   (2)JDBC本地操作:直接使用各个数据库生产商提供的JDBC驱动程序,但是只能应用在特定的数据库上,丧失了可移植性,但性能高。

   (3)JDBC网络驱动:这是一种将JDBC转换为DBMS无关的网络协议,然后又被某个服务器转换为一种DBMS协议。这是最为灵活的JDBC驱动程序。

   (4)本地纯协议JDBC驱动:将JDBC调用直接转换为DBMS所使用的网络协议。允许从客户机机器直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。

三,JDBC的主要操作类及接口

JDBC的核心是为用户提供Java API类库,让用户能够创建数据库连接、执行SQL语句、检索结果类、访问数据库数据等。在JDBC的基本操作中最基本的类和接口就是DriveManager、Connection、Statement、Result、PrepareStatement。

(1)加载数据库的驱动

    DriveManager里面的registerDriver(Driver driver)

(2)创建与数据库的连接

    DriverManager里面getConnection(String url, String user, String password)

(3)编写sql语句

(4)执行sql语句

    Statement里面executeQuery(String sql)

(5)释放资源(关闭连接)

  • jdbc的DriverManager对象

3.1 在java.sql包里面

3.2 加载数据库驱动

    registerDriver(Driver driver):参数是数据库驱动,这个驱动是由数据库提供的

(1)这个方法在实际开发中,一般是不使用的,因为这个方法会加载驱动两次在源代码中,加载了一次Driver

(2)一般在开发中使用反射的方式加载数据库的驱动

    Class.forName("com.mysql.jdbc.driver");

  • 得到数据库的连接:

getConnection(Strring url, String user, String password),返回Connection· 有三个参数:

(1)url:表示要连接的数据库

    写法:jdbc:mysql://数据库的ip:数据库的端口号/连接的数据库的名称

    示例:jdbc:mysql://localhost:3306/testdb1

    简写的方式:jdbc:mysql:///testdb1(使用范围:连接的数据库是本机,端口是3306)

(2)表示连接数据库的用户名

(3)表示连接数据库的用户密码

  • jdbc的Connection对象

4.1 代表数据库的连接,是接口,在java.sql包里面

4,.2 创建Statement对象:Statement createStatement()

4.3 创建预编译对象PreparedStatement prepareStatement(String sql)

  • jdbc的Statement对象

5.1 执行sql的对象,接口,在java.sql包里面

5.2 执行查询操作方法

    ResultSet executeQuery(String sql) , 返回查询的结果集

5.3 执行增加 修改 删除的方法

    int executeUpdate(String sql),返回成功的记录数

5.4 执行sql语句的方法

    boolean execute(String sql),返回是布尔类型,如果执行的是查询的操作返回true,否则返回false

5.5 执行批处理的方法

    addBatch(String sql) :把多个sql语句放到批处理里面

    int[] executeBatch() :执行批处理里面的所有的sql

  • jdbc的ResultSet对象

6.1 代表查询之后返回的结果,借口,在java.sql包里面类似于使用select语句查询出来的表格

6.2 遍历结果集 next()

6.3 得到数据的具体指

    · 如果是String类型,使用getString("字段的名称");

    · 如果是int类型,使用getInt("字段的名称");

    · 如果是不知道的类型,使用getObject("字段的名称");

6.4 结果集的遍历方式

    · 在最开始的时候,指向第一行之前,当执行了next方法之后,一行一行的向下进行遍历,在默认的情况下,只能向下,不能向上。遍历出来的结果也是不能修改的

四,关于数据库的连接

   一般有两个步骤,分别是:(1)加载驱动程序、(2)连接数据库

   (1)加载驱动程序:首先,我们需要先下载并安装好需要使用的数据库,如:MySQL数据库。然后用反射机制直接调用类名来使用类的功能。

   (2)连接数据库:使用DriveManager类来实现连接数据库。

                                                课程设计任务

一、使用Java fx实现的简单记事本;主要功能包括以下:

  • 新建文件
  • 打开文件
  • 保存文件
  • 另存为
  • 退出
  • …………

实验代码:


package 第十四周;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

public class Txt extends JFrame implements ActionListener {

    // 设置菜单面板
    JMenuBar cdmb;
    // 设置一级菜单按钮
    JMenu cd1, cd2, cd3, cd4, cd5;
    // 设置二级菜单按钮
    JMenuItem cd1_1, cd1_2, cd1_3, cd1_4, cd1_5, cd1_6, cd1_7;
    // 设置文本域
    JTextArea wby;
    // 设置滚动条
    JScrollPane gdt;
    // 设置欢迎面板
    Huanying huanying;

    // 自动执行
    public Txt() {

        // 设置菜单面板
        cdmb = new JMenuBar();

        // 设置一级菜单按钮名称
        cd1 = new JMenu("文件(F)");
        cd2 = new JMenu("编辑(E)");
        cd3 = new JMenu("格式(O)");
        cd4 = new JMenu("查看(V)");
        cd5 = new JMenu("帮助(H)");

        // 设置二级菜单按钮名称
        cd1_1 = new JMenuItem("新建(N)");
        cd1_1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
        cd1_2 = new JMenuItem("打开(O)");
        cd1_2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
        cd1_3 = new JMenuItem("保存(S)");
        cd1_3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
        cd1_4 = new JMenuItem("另存为(A)");
        cd1_4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
        cd1_5 = new JMenuItem("页面设置(U)");
        cd1_5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.CTRL_MASK));
        cd1_6 = new JMenuItem("打印(P)");
        cd1_6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));
        cd1_7 = new JMenuItem("退出(X)");
        cd1_7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));

        // 添加监听事件
        cd1_1.addActionListener(this);
        cd1_1.setActionCommand("xinjian");
        cd1_2.addActionListener(this);
        cd1_2.setActionCommand("dakai");
        cd1_3.addActionListener(this);
        cd1_3.setActionCommand("baocun");
        cd1_4.addActionListener(this);
        cd1_4.setActionCommand("lingcunwei");

        // 设置文本域
        wby = new JTextArea();

        // 设置滚动条
        gdt = new JScrollPane(wby);

        // 设置欢迎面板
        huanying = new Huanying();
        huanying.setSize(500, 100);

        // 添加二级菜单到一级菜单
        cd1.add(cd1_1);
        cd1.add(cd1_2);
        cd1.addSeparator(); // 添加横线
        cd1.add(cd1_3);
        cd1.add(cd1_4);
        cd1.addSeparator(); // 添加横线
        cd1.add(cd1_5);
        cd1.add(cd1_6);
        cd1.add(cd1_7);

        // 添加一级菜单到菜单面板
        cdmb.add(cd1);
        cdmb.add(cd2);
        cdmb.add(cd3);
        cdmb.add(cd4);
        cdmb.add(cd5);

        // 添加面板到窗口
        this.setJMenuBar(cdmb);
        this.add(gdt);
        this.add(huanying, BorderLayout.SOUTH);

        // 设置窗口标题
        this.setTitle("记事本");
        // 设置窗口的宽高
        this.setSize(500, 350);
        // 添加标题栏图片
        this.setIconImage((new ImageIcon("image/1.jpg")).getImage());
        // 设置窗口出现对于屏幕的位置
        this.setLocation(100, 100);
        // 禁止拉大拉小
        // this.setResizable(false);
        // 关闭窗口后释放资源
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 输出窗口
        this.setVisible(true);

    }

    public void actionPerformed(ActionEvent e) {
        /**
         * 新建文件
         */
        if (e.getActionCommand().equals("xinjian")) {
            System.out.println("新建文件");

        }

        /**
         * 打开文件
         */
        if (e.getActionCommand().equals("dakai")) {
            System.out.println("打开文件");

            // 打开文件的窗口
            JFileChooser wjxz = new JFileChooser(); // 创建文件窗口的对象
            wjxz.setDialogTitle("打开文件"); // 设置文件窗口标题
            wjxz.showOpenDialog(null); // 打开文件窗口风格默认 *******,跟另存为只是这里有区别
            wjxz.setVisible(true); // 显示文件窗口

            // 得到用户选择的文件全路径
            String wjlj = wjxz.getSelectedFile().getAbsolutePath();

            FileReader wjl = null; // 文件流
            BufferedReader hcl = null; // 缓冲流

            try {
                wjl = new FileReader(wjlj); // 文件流方式打开文件
                hcl = new BufferedReader(wjl); // 缓冲流方式缓冲文件
                String s = hcl.readLine(); // 读取一行
                String content = "";

                while (s != null) {
                    content += (s + "\n");
                    s = hcl.readLine(); // 继续读取一行
                }
                wby.setText(content);

            } catch (Exception aa) {

            } finally {
                try {
                    // 关闭流,文件
                    wjl.close();
                    hcl.close();
                } catch (Exception bb) {

                }
            }

        }

        /**
         * 另存为文件
         */

        if (e.getActionCommand().equals("lingcunwei")) {
            System.out.println("另存为文件");

            // 另存为文件的窗口
            JFileChooser wjxz = new JFileChooser(); // 创建文件窗口的对象
            wjxz.setDialogTitle("另存为文件"); // 设置文件窗口标题
            wjxz.showSaveDialog(null); // 另存为文件窗口风格默认
            wjxz.setVisible(true); // 显示文件窗口

            // 得到用户选择的文件全路径
            String bclj = wjxz.getSelectedFile().getAbsolutePath();

            try {
                // 保存文件
                PrintStream pl = new PrintStream(bclj);
                System.setOut(pl);
                System.out.println(this.wby.getText());
                pl.close();
            } catch (Exception aa) {

            }

        }

    }

}

class Huanying extends JPanel {
    public void paint(Graphics g) {
        // 设置颜色
        g.setColor(Color.red);
        // 文字
        g.setFont(new Font("宋体", Font.BOLD, 12));
        g.drawString("清悠灬音辰", 200, 10);
    }
}
package 第十四周;

public class DuiX {
    public static void main(String[] args) throws Exception{
        
        Txt index = new Txt();                             //  实例化当前类
        
    }
}

实验截图:

猜你喜欢

转载自www.cnblogs.com/youlanghua/p/11959816.html