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 应用程序。
超级会员免费看
496

被折叠的 条评论
为什么被折叠?



