站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Netbeans 专题在 NetBeans 中构建一个简单的 MySQL 客户端

在 NetBeans 中构建一个简单的 MySQL 客户端

摘要: 在 NetBeans 中构建一个简单的 MySQL 客户端 作者:Miki Shimizu( Win With NetBeans 竞赛的成员) NetBeans 拥有一个连接 DB 的友好界面,但是很...
在 NetBeans 中构建一个简单的 MySQL 客户端

NetBeans 拥有一个连接 DB 的友好界面,但是很多 SQL 命令都是作为整个句子输入的。我使用 Swing 应用程序向 MySQL 数据库表插入并查看数据。这个例子十分简单,可用于一个特定表而无需进行删除或更新操作;可进行扩展,但文档会变得更长、更复杂。

索引

连接到 MySQL 数据库

我希望读者已具备运行 MySQL 数据库服务器所需的恰当环境,且数据库为给定用户提供了足够的授权。在本示例中,

数据库名称:nonidb
用户名:noniko
密码:(空)
<- 因为这仅仅是一个示例。如果您有一些重要数据,请设置适当的密码!

您还应获取 MySQL 的 JDBC 驱动文件。我已借助 MySQL 开发者网站准备好了 mysql-connector-java-3.1.6-bin.jar 文件。

现在,我们转到 NetBeans。单击 Runtime 选项卡切换通常看到的 Projects 窗口或 Files 窗口。

选择 Runtime 窗口中的 Add Driver

您将在这里找到 Databases 节点。打开该节点,找到其下的 Drivers 节点。如果继续打开节点以显示 Drivers 的内容,您只会找到 JDBC-ODBC。要做的第一件事情是添加 MySQL 驱动程序。右键单击 Drivers 节点显示上下文菜单,选择 Add Driver。

然后会出现设置窗口。

找到 JDBC 驱动文件的位置。

通过单击 Add 按钮,您可以图形方式搜索驱动文件。对于上述示例,我先创建了 D:\nonidata\nb4worksnew 文件夹,用来包含项目文件夹和 lib 子文件夹(用来包含库文件)。

如果您选择驱动文件位置,则会自动设置 Driver Class 和 Name。在 MySQL JDBC 驱动程序示例中,首先会设置旧的类名称。而单击 Find 按钮则会激活下方的进程栏,最后将显示“Searching for driver classes finished”。

然后打开 Driver Class 设置组合框,您可以选择 JDBC Driver 的当前类名称。

将类名称更改为当前版本的类名称。

单击 OK,然后新的驱动程序节点会被添加到 Driver 节点下。右键单击该节点,从上下文菜单中选择 Connect Using..。

从上下文菜单中选择 Connect Using...

出现设置窗口。这里需要填写 Database URL、User Name 和 Password(在本例中,Password 为空)。单击 OK,然后您在下方的进程栏中能看到“Connection established”消息。可以将该页面切换到 Advanced,但在本例中不需要任何高级设置。

建立连接后,会出现该连接的节点。我们继续进行下一步。

创建一个示例表

右键单击所建立连接的节点,选择 Create Table...。

从上下文菜单中选择 Create Table

然后将出现一个窗口,可对创建的表进行设置。若要显示所需的设置,可能需手动展开该窗口。重要的设置是 Key、Column name、Data type 和 Size(依赖于 Data 类型)。

在 NetBeans 中创建表

在本例中,我创建了一个示例表 cars,具有 caridnamevendortype 字段。carid 字段是主键码。所有字段的数据类型都是 VARCHAR。只有 carid 字段的大小是 10,其他字段的大小都是 20。

一旦创建了表,您可以在连接节点下查看其节点。表 cars 的结构显示如下。

所创建表的节点树

插入第一个数据

现在,通过发送 SQL 命令,我们插入第一行。右键单击连接节点下的任一节点,显示 Execute Commands... 菜单项。

然后在代码编辑器的相同位置上,会出现操作命令的大窗口。由于窗口太大,我在这里只显示部分屏幕截图。重要的位置是输入命令的文本区。

输入整个命令语句。

单击 Execute 按钮,如果命令是合法的,则可以看到下方的“Command successfully excuted”消息。要更确切这一点,右键单击 cars 节点,选择 View data。

右键单击 cars 节点查看数据。

已插入第一个数据

好的!已成功插入第一个数据。但是您也许认为整个句子“insert into...”很烦人。我是这样认为的。于是我决定构建一个应用程序,以更图形化的操作来插入数据。

创建新 Java 项目

我们为应用程序创建新的 Java Project。从菜单栏选择 File -> New Project。在新项目向导中,选择 General -> Java Application 作为项目类型。在我的例子中,项目名称是 mysqloperation,位置是 d:\nonidata\nb4worksnew\mysqloperation。取消勾选 create main project。

创建项目后,创建新包。在我的例子中是 mysqlop。

创建连接数据库的实用工具类

Java 中数据库的操作是十分复杂的,需要连接、语句、结果集和许多“try&catch”。因此,我使用实用工具类来处理此类操作。

完整的代码在 MyDBConnection.java

init() 方法用于连接 MySQL 数据库。

getConnection() 方法是在 init() 方法后调用,为其他类确定所建立的连接。

两个 close() 方法和 destroy() 方法用于处理操作的结束。关闭连接、语句或结果集都需要“try&catch”,因此这里精简了这些操作。

若要使用该文件,必须为该项目设置到 JDBC 驱动程序的类路径。右键单击 mysqloperation 项目,从上下文菜单中选择 Properties...。在 Project Properties 窗口中,选择 Build -> Compiling Sources。单击 Classpath for Compiling Source 设置附近的 Add JAR/Folder... 按钮,这样就可以搜索 JDBC jar 文件的位置。

向类路径添加 JDBC jar 文件

创建表模块

为了使 JTable 能在此应用程序中使用,我准备了一个自定义表模块。

完整的代码在 CarTableModel.java

编写该代码的过程中,我使用了一些好用的 NetBeans 工具。
首先,创建名为 CarTableModel.java 的新 Java 类文件。该类文件有一个空白的模板,只有包和类声明。


手动编辑类声明,以扩展 AbstractTableModel 类。编辑器很快会显示红色波浪下划线以表明错误。原因之一是缺少 javax.swing.table.AbstractTableModel 类的导入。通过右键单击该代码的某个位置并选择 Fix Imports,可以纠正该错误。

使用 Fix imports 工具

您可以查看声明

import javax.swing.table.AbstractTableModel;

已经插入到接近源代码顶部的位置。

但是红色下划线仍然存在。原因是缺少适当抽象方法的实现
。使用 overriding method 工具可以纠正这个错误,该工具以这种方式激活:

使用 Overrice Methods 工具

选中 Show Abstract Methods Only,可以提取出所需的实现。

列出所需的实现

通过单击节点然后单击 OK,选择所有的三个方法。

自动插入所需的实现

现在红色下划线消失了!

实际上,我们也需要重写 getColumnName(int param) 方法,否则我们无法得到自定义表头。

现在,我们填写内容。
该代码被指定用于访问特定的表 cars,因此列数确定为 4。
每列的名称也已知,并可以直接设置。

这时我首次使用了 JDK5.0 的一个新功能 Generics。它已成功地用于 NB(鼓掌!)

创建 JFrame Form 类 - 窗体设计

现在,我们创建 JFrame Form Application。它是该项目的主类!可以在新向导中选择 JFrame Form。在我的例子中,名称是 InsertTable,创建了源文件 InsertTable.java。

首先,设计窗体。它是一个垂直方向的长窗口,因此我固定了窗体大小,而不是使用 packing
。在 Inspector 窗口中选择 JFrame 节点显示其属性。将 Form Size Policy 由默认的 Generate pack() 更改为 Generate Resize Code。

确定 Form 大小。

然后 Form Size 属性变成可编辑的。将其编辑为:

已编辑 Form 大小。

该窗体将被垂直分成三部分:

(1)JTextfields 或 JComboBox,用于输入新数据。
(2)JButton 用于发送数据并显示消息。
(3)JTable。

前两个应该位于每个 JPanel 上,而 JTable 位于 JScrollPane 上。这是基本部分。

JPanel 和 JScrollPane 定位组件。

请注意,节点的垂直位置并不代表其实际位置。我的意思是,dataPanel、sendPanel 和 tablePane 分别位于 BorderLayout 的北面、中心和南面。

在 dataPanel 上,应定位 3 个 JTextField 和 1 个 JComboBox 用于输入数据,4 个 JLabel 用于解释。我认为最好使用 GridLayout 设置这些位置。在 NetBeans 中,JPanel 上的默认布局是 FlowLayout。必须进行更改:

更改为 GridLayout

然后会显示该 GridLayout 的属性。将列数设置为 2,行数设置为 4。

然后定位组件。如果您对位置不满意的话,可以在窗体上进行拖放来移动组件。

在 GridLayout 中移动 JComboBox。

组件可能偏离到一个十分错误的位置,成为其它面板。不必担心,您也可以在 Inspector 窗口中进行拖放来移动其位置。

在 Inspector 窗口中移动 JComboBox

在对全部组件进行设置后,定制其名称以标识其作用。
还要定制每个 JLabel 的文本属性,并删除每个 JTextField 的文本属性。这里是一个编辑 JLabel 的 text 属性的示例:

定制 text 属性,将 ID: 显示为 JLabel

然后用 sendPanel 来定位 JButton 和 JLabel。设置该 JPanel 的 GridLayout 为 1 列 2 行。定制名称和 text 属性。

用这种方式将 JTable 之外的组件排列如下:

除 JTable 之外的组件已被定制。

定制 JTable

如上所示,现在 JTable 是 4x4 结构,数据为空。我们对它进行定制,以显示 MySQL 数据库的表 cars 的内容。

在 Inspector 窗口中,选择名为 carTable 的 JTable 以显示其属性。找到 model 属性,单击右边缘上的省略号按钮 (...)。

carTable 及其 model 属性

然后会出现编辑器窗口。默认的 4x4 结构在该窗口中进行设置。现在,我们将 Select Mode 由 TableModelEditor 更改为 FormConnection

从默认的 Table Model 编辑器切换为 Form Connection 模式

在 Form Connection 模式下,单击选项窗口中的 User Code 单选按钮。

Form Connection 模式

然后查看该窗口的底部。有一个 Advanced 按钮。单击该按钮!

窗口底部的 Advanced 按钮

会出现一个窗口,用于在设置 JTable 的 TableModel 的代码之前和之后进行编辑。这次选中两者进行编辑。

在 InsertTable.java 源代码中,应手动创建名为 getResultFromCars 的方法,如下


 public ResultSet getResultFromCars() {

        ResultSet rs=null;

        try{
            rs=stmt.executeQuery("Select * from cars");

        }
        catch(SQLException e){}

        return rs;

    }

单击 OK,返回到 User Code 进行填写。

注意,在这里不要输入用于结束句子的分号(;)。为什么?请查看源代码。请查看 InitComponents() 方法。在这里!

浅蓝色“受保护”的“不可编辑”区域?谁说的?Ho-ho-ho!您可使用这种由 NetBeans 提供的方式进行自由编辑!

第一次运行 InsertTable

要对该定制 JTable 进行首次测试运行,我们还应做一些事情。首先,声明。

private MyDBConnection mdbc;
private java.sql.Statement stmt;

它们应写在源代码中的某个位置。最好是靠近 EOF 或其它变量旁边的位置。

然后是构造方法。注意,我们应向其添加 throw 声明

以避免烦人的编译错误“java.sql.SQLException is not reported...”。

构造方法的完整内容是:


public InsertTable() throws  Exception{

         mdbc=new MyDBConnection();
         mdbc.init();
         Connection conn=mdbc.getMyConnection();
         stmt= conn.createStatement();

        initComponents();
    }

 

也要避免相同的编译错误。请编辑由 NetBeans 提供的 main 方法:

向 main 方法添加 try-catch

现在,我们开始运行项目!会出现一个窗口以选择主类。在列表中您只能找到 InsertTable.class。选择该类。

显示 MySQL 的表数据

已显示出 MySQL 数据库的 cars 表中唯一存在的一行!

请注意...

现在我们可以将现有数据从 MySQL 显示到 JTable。那么我们就可以放心了,同时为了得到更好的应用程序,请注意一些方面。

一方面是该程序的正确终止。所有与 MySQL 的会话(connection、statement、resultsets)都必须关闭。
通过关闭窗口来结束该应用程序。因此,我们应为 WindowClosing 事件添加事件处理方法。
在 Inspector 窗口中选择 JFrame 显示其属性窗口,然后单击 events 切换页面。找到 windowClosing 事件。默认情况下其设置为 <none>,单击 <none> 会自动更改为 formWindowClosing ...,选中该行时按 Enter 键。

设置 JFrame 的 windowClosing 事件

然后会出现源代码,可以编辑方法。

编辑 formWindowClosing 方法

关闭语句和连接。

另一方面是对名为 typeCombo 的 JComboBox 各条目进行设置。是的,应该对它进行装备以选择 car 的驱动类型。

在 Inspector 窗口中选择 typeCombo 节点显示其属性。找到 model 属性并单击右边缘的 ... 按钮,正如我们设置 JTable 的 TableModel 时所进行的操作。
会出现一个窗口,这次我们使用默认的 ComboBoxModelEditor

在 Item: 字段中输入新的条目并单击 Add 按钮。就这么容易!我准备了条目 FF、FR、MR 和 4WD 作为驱动类型。还有其它什么事情吗?

向 MySQL 插入数据

最后一击!单击 Send 按钮(名为 sendButton 的 JButton)时,应向 MySQL 添加数据。

在 NetBeans 的 GUI Editor 中,很容易为 JButton 构造事件处理方法。仅在窗体上右键单击 JButton 本身即可。

会在源文件中创建 sendButtonActionPerformed 方法。现在,我们填写如下内容:

private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendButtonActionPerformed
        // TODO add your handling code here:

        String carid=idField.getText();
        String name=nameField.getText();
        String vendor=vendorField.getText();
        String type=(String)typeCombo.getSelectedItem();

        String insertStr="";

        try{

            insertStr="insert into cars (carid, name, vendor, type) values("
                    +quotate(carid)+","
                    +quotate(name)+","
                    +quotate(vendor)+","
                    +quotate(type)
                    +")";

            int done=stmt.executeUpdate(insertStr);

            commentLabel.setText("1 row inserted");

            getContentPane().removeAll();
            initComponents();

        }
        catch(Exception e){
            commentLabel.setText("Error occurred in inserting data");
            e.printStackTrace();
        }

    }//GEN-LAST:event_sendButtonActionPerformed

注意,在插入数据且删除当前 comtent 窗格后,调用 initComponents 方法。有必要刷新 JTable 的外观。如果我的技术更好,可以只刷新 JTable 而不是整个容器。这就像日语中所说的“用斧头切豆腐”。抱歉!

还要注意在这里调用了 quotate 方法。我创建该方法是为了避免大量引号:

 public String quotate(String content){

return "'"+content+"'";
}

现在就是 InsertTable.java 的完整代码。

运行项目!输入数据并单击 Send 按钮。现在,您可以看到 JTable 中刚刚插入了另一行。重复插入多行!

对已完成的应用程序进行操作

...现在,让我们来确认一下,这些数据也可以由 NetBeans 的实用工具进行浏览。

艰难的工作!但是通过这个项目,我们学习了以下几方面内容:

等等。

 




↑返回目录
前一篇: Derby 教程
后一篇: IDE 屏幕截图