27、Java Applet 与数据库连接开发指南

Java Applet 与数据库连接开发指南

1. Java Applet 开发

Java Applet 是嵌入在网页中的小型 Java 程序,下面我们详细介绍如何开发一个简单的 Java Applet。

1.1 创建 Applet 面板

创建 Applet 时,通常需要创建一个面板并将其与 Applet 关联。以下是创建面板的步骤:
1. 调用 OdometerPanel 构造函数创建面板。
2. 将面板的背景设置为白色,确保 Applet 与网页的其他部分融合良好。
3. 使用 setContentPane 方法将面板与 Applet 建立连接。

1.2 paint 方法

paint 方法用于描述 Applet 运动的单个快照。在 Listing 15 - 5 中, paint 方法设置图形缓冲区的字体,在屏幕上显示 hitCount 值,并将 hitCount 加 1。为了存储较大的数字, hitCount 的类型为 long ,使用 Long 类的 toString 方法将其转换为字符串。

// 示例代码,模拟 paint 方法
import java.awt.Graphics;
import javax.swing.JApplet;

public class MyApplet extends JApplet {
    private long hitCount = 1000;

    public void paint(Graphics g) {
        g.setFont(g.getFont().deriveFont(20f));
        g.drawString(Long.toString(hitCount), 50, 50);
        hitCount++;
    }
}
1.3 调试 Applet

调试 Applet 时,可以在 Applet 代码中添加 System.out.println 调用。如果使用 Eclipse, println 的输出将显示在 Eclipse 的控制台视图中。

1.4 响应 Applet 中的事件

以下是一个简单的猜数字游戏 Applet 的示例代码:

// Listing 15 - 6: A Guessing Game Applet
import javax.swing.JApplet;

public class GameApplet extends JApplet {
    private static final long serialVersionUID = 1L;

    public void init() {
        setContentPane(new GamePanel());
    }
}

// Listing 15 - 7: The Guessing Game Panel
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

class GamePanel extends JPanel implements ActionListener {
    private static final long serialVersionUID = 1L;

    int randomNumber = new Random().nextInt(10) + 1;
    int numGuesses = 0;
    JTextField textField = new JTextField(5);
    JButton button = new JButton("Guess");
    JLabel label = new JLabel(numGuesses + " guesses");

    GamePanel() {
        setBackground(Color.WHITE);
        add(textField);
        add(button);
        add(label);
        button.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        String textFieldText = textField.getText();
        if (Integer.parseInt(textFieldText) == randomNumber) {
            button.setEnabled(false);
            textField.setText(textField.getText() + " Yes!");
            textField.setEnabled(false);
        } else {
            textField.setText("");
            textField.requestFocus();
        }

        numGuesses++;
        String guessWord = (numGuesses == 1) ? " guess" : " guesses";
        label.setText(numGuesses + guessWord);
    }
}

要运行上述代码,需要一个 HTML 文件:

<applet code="GameApplet" width=225 height=50></applet>

与 Java 框架代码相比,Applet 代码有一些不同之处:
- 不需要调用 setLayout 方法,Applet 的默认布局是 FlowLayout
- 不需要调用 pack 方法,Applet 的大小由 HTML 标签中的 width height 字段决定。
- 不需要调用 setVisible 方法,Applet 默认是可见的。

此外,Applet 通常没有 main 方法,而是有一个 init 方法。网页浏览器会创建 GameApplet 类的实例,并调用其 init 方法。

以下是 Applet 创建和运行的流程图:

graph TD;
    A[创建 Applet 实例] --> B[调用 init 方法];
    B --> C[创建面板并设置内容面板];
    C --> D[显示 Applet];
    D --> E[等待用户交互];
    E --> F[处理事件];
2. Java 数据库连接(JDBC)

在 Java 开发中,经常需要与数据库进行交互。Java 提供了 Java Database Connectivity(JDBC)来实现这一功能。

2.1 JDBC 和 Java DB

Java Development Kit(JDK)自带了一个内置数据库 Java DB,它基于 Apache Derby 数据库,安全、轻量级且符合标准。如果不使用 Java DB,也可以使用其他数据库,如 MySQL、PostgreSQL 等,只需获取相应的数据库驱动,并对代码进行一些修改。

2.2 创建数据库和插入数据

以下是一个创建数据库、表并插入数据的示例代码:

// Listing 16 - 1: Creating a Database and a Table, and Inserting Data
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;

class CreateTable {
    public static void main(String args[]) {
        final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
        final String CONNECTION = "jdbc:derby:AccountDatabase;create=true";

        try {
            Class.forName(DRIVER).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try (Connection connection = DriverManager.getConnection(CONNECTION);
             Statement statement = connection.createStatement()) {
            statement.executeUpdate(
                    "create table ACCOUNTS                       "
                            + "  (NAME VARCHAR(32) NOT NULL PRIMARY KEY, "
                            + "   ADDRESS VARCHAR(32),                   "
                            + "   BALANCE FLOAT)                         ");
            statement.executeUpdate(
                    "insert into ACCOUNTS values                "
                            + "  ('Barry Burd', '222 Cyber Lane', 24.02)");
            statement.executeUpdate(
                    "insert into ACCOUNTS values                 "
                            + "  ('Joe Dow', '111 Luddite Street', 55.63)");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

如果要使用 MySQL 数据库,需要将 DRIVER 的值改为 "com.mysql.jdbc.Driver" ,将 CONNECTION 的值改为 "jdbc:mysql://localhost/AccountDatabase;create=true"

运行数据库代码时,需要将包含数据库驱动的 .jar 文件添加到 Java 类路径中。以 Eclipse 为例,添加步骤如下:
1. 选择 Project -> Properties -> Java Build Path
2. 点击 Add External JARs 按钮,导航到 JDK db/lib 目录,选择 derby.jar 文件。

运行上述代码后,虽然没有可见的输出,但数据库中会创建相应的表和插入数据。第一次运行代码后,硬盘上会生成一些额外的文件,如 derby.log derbyDB 文件夹。

以下是数据库连接和数据插入的步骤列表:
1. 加载数据库驱动。
2. 建立与数据库的连接。
3. 创建 Statement 对象。
4. 执行 SQL 语句创建表和插入数据。
5. 处理可能的异常。

2.3 使用 SQL 命令

在上述代码中,核心是调用 executeUpdate 方法执行 SQL 命令。SQL 命令是普通的 Java 字符串,可以使用 + 运算符将字符串拼接起来。如果熟悉 SQL 语言,这些命令很容易理解;如果不熟悉,可以参考相关书籍。

以下是代码中各部分的功能说明表格:
| 代码部分 | 功能 |
| ---- | ---- |
| Class.forName(DRIVER).newInstance() | 加载数据库驱动 |
| DriverManager.getConnection(CONNECTION) | 建立与数据库的连接 |
| connection.createStatement() | 创建 Statement 对象 |
| statement.executeUpdate(SQL) | 执行 SQL 命令 |
| try-catch 块 | 处理异常 |

2.4 连接和断开连接

代码中各部分的详细解释如下:
- Class.forName :查找数据库驱动。使用 Class.forName 方法加载 org.apache.derby.jdbc.EmbeddedDriver 类,加载成功后即可与数据库建立连接。
- DriverManager.getConnection :建立与特定数据库的会话。通过 getConnection 方法创建 AccountDatabase 并打开连接。
- connection.createStatement :创建 Statement 对象,用于执行 SQL 命令。
- try...catch... :处理代码中可能抛出的异常。
- try-with-resources :自动释放资源,确保在代码执行结束后关闭连接和 Statement 对象。

以下是数据库连接和操作的流程图:

graph TD;
    A[加载数据库驱动] --> B[建立数据库连接];
    B --> C[创建 Statement 对象];
    C --> D[执行 SQL 命令];
    D --> E[处理异常];
    E --> F[释放资源];
2.5 检索数据

创建数据库并插入数据后,通常需要从数据库中检索数据。以下是一个查询数据库的示例代码:

// Listing 16 - 2: Making a Query
import static java.lang.System.out;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.NumberFormat;

class GetData {
    public static void main(String args[]) {
        NumberFormat currency = NumberFormat.getCurrencyInstance();
        final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
        final String CONNECTION = "jdbc:derby:AccountDatabase";

        try {
            Class.forName(DRIVER).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try (Connection connection = DriverManager.getConnection(CONNECTION);
             Statement statement = connection.createStatement();
             ResultSet resultset = statement.executeQuery("select * from ACCOUNTS")) {
            while (resultset.next()) {
                out.print(resultset.getString("NAME"));
                out.print(", ");
                out.print(resultset.getString("ADDRESS"));
                out.print(" ");
                out.println(currency.format(resultset.getFloat("BALANCE")));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

如果要使用 MySQL 数据库,需要将 DRIVER 的值改为 "com.mysql.jdbc.Driver" ,将 CONNECTION 的值改为 "jdbc:mysql://localhost/AccountDatabase;create=true"

运行上述代码后,会查询数据库并输出 ACCOUNTS 表中的数据。代码首先调用 executeQuery 方法执行 SQL 查询,返回一个 ResultSet 对象。 ResultSet 对象类似于数据库表,包含多行多列的数据。

通过 resultset.next() 方法可以逐行遍历 ResultSet 对象。每次调用 resultset.next() 方法时,会将指针移动到下一行,并返回一个布尔值表示是否还有下一行。如果有下一行,则可以通过 getString getFloat 等方法获取该行的数据。

以下是数据检索的步骤列表:
1. 加载数据库驱动。
2. 建立与数据库的连接。
3. 创建 Statement 对象。
4. 执行 SQL 查询语句,获取 ResultSet 对象。
5. 逐行遍历 ResultSet 对象,获取数据。
6. 处理可能的异常。
7. 自动释放资源。

以下是数据检索的流程图:

graph TD;
    A[加载数据库驱动] --> B[建立数据库连接];
    B --> C[创建 Statement 对象];
    C --> D[执行 SQL 查询];
    D --> E[获取 ResultSet 对象];
    E --> F{是否有下一行};
    F -- 是 --> G[获取该行数据并输出];
    G --> F;
    F -- 否 --> H[释放资源];

总结

本文详细介绍了 Java Applet 开发和 Java 数据库连接(JDBC)的相关知识。通过示例代码和详细解释,展示了如何创建和运行 Java Applet,以及如何连接数据库、插入数据和检索数据。

在 Java Applet 开发方面,我们学习了如何创建面板、使用 paint 方法、调试 Applet、响应事件以及 Applet 与 Java 框架代码的区别。同时,还给出了 Applet 创建和运行的流程图,帮助读者更好地理解 Applet 的工作原理。

在 Java 数据库连接方面,我们介绍了 JDBC 和 Java DB 的概念,以及如何使用 JDBC 连接不同类型的数据库。通过示例代码,展示了如何创建数据库、表并插入数据,以及如何使用 SQL 命令和处理异常。此外,还详细解释了数据库连接和断开连接的过程,以及如何检索数据库中的数据。同时,给出了数据库连接、数据插入和数据检索的步骤列表和流程图,方便读者掌握数据库操作的流程。

希望本文对读者在 Java 开发中使用 Applet 和连接数据库有所帮助。通过学习和实践,读者可以更好地掌握这些技术,开发出更强大的 Java 应用程序。

**项目概述:** 本资源提供了一套采用Vue.jsJavaScript技术栈构建的古籍文献文字检测识别系统的完整源代码及相关项目文档。当前系统版本为`v4.0+`,基于`vue-cli`脚手架工具开发。 **环境配置运行指引:** 1. **获取项目文件**后,进入项目主目录。 2. 执行依赖安装命令: ```bash npm install ``` 若网络环境导致安装缓慢,可通过指定镜像源加速: ```bash npm install --registry=https://registry.npm.taobao.org ``` 3. 启动本地开发服务器: ```bash npm run dev ``` 启动后,可在浏览器中查看运行效果。 **构建部署:** - 生成测试环境产物: ```bash npm run build:stage ``` - 生成生产环境优化版本: ```bash npm run build:prod ``` **辅助操作命令:** - 预览构建后效果: ```bash npm run preview ``` - 结合资源分析报告预览: ```bash npm run preview -- --report ``` - 代码质量检查自动修复: ```bash npm run lint npm run lint -- --fix ``` **适用说明:** 本系统代码经过完整功能验证,运行稳定可靠。适用于计算机科学、人工智能、电子信息工程等相关专业的高校师生、研究人员及开发人员,可用于学术研究、课程实践、毕业设计或项目原型开发。使用者可在现有基础上进行功能扩展或定制修改,以满足特定应用场景需求。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【EI复现】基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(Matlab代码实现)内容概要:本文介绍了基于阶梯碳交易机制的虚拟电厂优化调度模型,重点研究了包含P2G-CCS(电转气-碳捕集封存)耦合技术和燃气掺氢技术的综合能源系统在Matlab平台上的仿真代码实现。该模型充分考虑碳排放约束阶梯式碳交易成本,通过优化虚拟电厂内部多种能源设备的协同运行,提升能源利用效率并降低碳排放。文中详细阐述了系统架构、数学建模、目标函数构建(涵盖经济性环保性)、约束条件处理及求解方法,并依托YALMIP工具包调用求解器进行实例验证,实现了科研级复现。此外,文档附带网盘资源链接,提供完整代码相关资料支持进一步学习拓展。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础的研究生、科研人员或从事综合能源系统、低碳调度方向的工程技术人员;熟悉YALMIP和常用优化算法者更佳。; 使用场景及目标:①学习和复现EI级别关于虚拟电厂低碳优化调度的学术论文;②掌握P2G-CCS、燃气掺氢等新型低碳技术在电力系统中的建模应用;③理解阶梯碳交易机制对调度决策的影响;④实践基于Matlab/YALMIP的混合整数线性规划或非线性规划问题建模求解流程。; 阅读建议:建议结合提供的网盘资源,先通读文档理解整体思路,再逐步调试代码,重点关注模型构建代码实现之间的映射关系;可尝试修改参数、结构或引入新的约束条件以深化理解并拓展应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值