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

                                                  学习总结
  • 本周主要学习了用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 + "
");
					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();                             //  实例化当前对象
        
    }
}

实验截图:

原文地址:https://www.cnblogs.com/youlanghua/p/11959816.html