您的位置:首页 > 数据库

数据库的访问实现过程

2016-03-29 21:53 344 查看
数据库是非常重要的数据管理软件系统,在这里我们进行一次Access数据库的访问操作,在正式介绍之前,我们先了解一下数据库访问的过程,在数据库访问中,根据最普遍的想法,需知道的构件主要有三层:分别为客户实体(

即软件的图形界面)、访问的中介(即连接数据库与实体的部分)、数据库后台。在了解这些之后,我们现在也清楚了实施这个访问过程我们该做哪些工作,那就是画一下用户使用的界面,部署一个存储数据的仓库,再找一个联系两

者的链条。下面我们就分别去做这些工作。

一、数据库的设计

数据库的种类有很多种,比如著名的Oracle,SQL server,access、Sybase等,各类软件都有自己的优点,oracle适合于大型公司大量数据的管理,Microsoft SQL Server是微软公司开发的大型关系型数据库系统。SQL Server的

功能比较全面,效率高,可以作为中型企业或单位的数据库平台。SQL Server可以与Windows操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都能得到较大的提升。

废话不多说,今天我们以Access数据库进行操作,建立JDBC-ODBC的数据库连接

1.1建立ODBC数据源

1.1.1首先,让我们做一点准备工作,那就是在自己的电脑上安装Access数据库软件,软件的安装包在网上有很多,可自行下载安装,详细的安装过程在此就不累赘,如有问题请私密,正确安装完成后可在桌面上看到下面所示的图标



图1.1.1
右键点击,进入打开文件位置,可看到



图1.1.2

建立一个名为Employer.mdb的Access数据库文件,存放到硬盘上面,记住他的存储路径比如说建在E:\DesktopFile\学习资料Java\Java
EE\ODBC_Employer这个文件夹下,如图所示



图1.1.3
下面进行详细介绍:首先双击microsoft Access出现创建新文件的窗口,然后点击右下角的文件夹图标景行存储位置的选定,在选定过程中会要求更名,按照所创数据库的类型更名,在这里我们写作Employer,然后点击确定按钮进
行确定,接着点击右下角的创建按钮进行数据库的创建,如下图所示,为创建的具体过程



图1.1.4

在上述步骤完成后,进入到表的创建界面,先确定要建表的属性及表项,在这里我们以员工信息为例,在第一行中要进行信息类型的确定,我们按常规取ID位数字,REGISTERDATE为日期,其余都为文本类型,进行如下所示的

创建,为了方便以后操作先填入4个基本人员信息,



图1.1.5

至此,我们完成了对数据库的创建,接下来我们进行可视化界面的实现。

二、可视化界面的实现

在实现可视化界面之前,我们做一点部署,对于大多数人来说,编写Java程序一般都使用Eclipse或者Myeclipse等软件,在这里我们采用开源免费的eclipse进行编程,如下图所示,安装过程在此不多介绍,如有问题请私密。



图2.1.1
现在,我们开始程序代码的编写,双击打开eclipse,进入文本编辑界面(打开时可能要配置存储路径,随便存储在自己容易识别的路径下就行),点击File->New->Java Project,如下图2.1.1所示,我们将工程名命名为

Java_Employer,最后点击Finish完成对新项目的创建.



图2.1.1
接着进行主界面的创建,右键点击工程名 ,然后按New->class,然确定包名为Java_Employer,类名为MainFrame,再勾选主函数多选框,最后点击Finish完成按钮,如下图2.1.2所示



图2.1.2
创建完主框架类之后,我们开始编程,我们要做的是先显示一个主框架,然后框架上面有功能键,在这里我们只是对插入、删除、更新、查询的操作,所以在这里我们需要做的有4个按钮,然后还需要显示文本,所以我们

再加入一个文本域,下面是具体实施的代码。

package Java_Employer;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MainFrame extends JFrame{
/**
*            实现框架
*/
static MainFrame frm_sql = new MainFrame();
static JButton Btn_Insert = new JButton("插入");
static JButton Btn_Delete = new JButton("删除");
static JButton Btn_Update = new JButton("修改");
static JButton Btn_Query = new JButton("查询");
static JTextArea jTextArea_list = new JTextArea(34,120);
static JTextField jTextField_list_question = new JTextField(120);
public static void main(String[] args) throws Exception {
frm_sql.add(Btn_Delete);
frm_sql.add(Btn_Insert);
frm_sql.add(Btn_Query);
frm_sql.add(Btn_Update);
/**
* 设置列表框和问题提示框
*/
jTextArea_list.setAutoscrolls(true);
frm_sql.add(jTextArea_list);//添加jTextArea_List到框架中
frm_sql.add(jTextField_list_question);
/**
* 框架布局设置及属性
*/
frm_sql.setLocation(2, 2);//位置
frm_sql.setSize(1366, 730);//大小
frm_sql.setLayout(new FlowLayout());//布局属性
frm_sql.setVisible(true);
}
}

在执行完这段代码之后。我们能够看到主框架已经显示出来,接下来需要做的事实施监听事件,因此我们需要在上面这段代码的基础上进行改造,首先将按钮加入到监听事件中,然后就会出现提示,点击后会做出

相应的响应函数,再点击删除后会在控制台输出删除二字,其他三个字符类似,代码如下所示(代码基本没有发生变化,只是添加了按钮的监听事件与响应事件):

package Java_Employer;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MainFrame extends JFrame implements ActionListener {
/**
* 实现框架
*/
static MainFrame frm_sql = new MainFrame();
static JButton Btn_Insert = new JButton("插入");
static JButton Btn_Delete = new JButton("删除");
static JButton Btn_Update = new JButton("修改");
static JButton Btn_Query = new JButton("查询");
static JTextArea jTextArea_list = new JTextArea(34,120);
static JTextField jTextField_list_question = new JTextField(120);
public static void main(String[] args) throws Exception {
/**
* 功能按钮的实现
*/
Btn_Insert.addActionListener(frm_sql);
Btn_Delete.addActionListener(frm_sql);
Btn_Update.addActionListener(frm_sql);
Btn_Query.addActionListener(frm_sql);
frm_sql.add(Btn_Delete);
frm_sql.add(Btn_Insert);
frm_sql.add(Btn_Query);
frm_sql.add(Btn_Update);
/**
* 设置列表框和问题提示框
*/
jTextArea_list.setAutoscrolls(true);
frm_sql.add(jTextArea_list);//添加jTextArea_List到框架中
frm_sql.add(jTextField_list_question);
/**
* 框架布局设置及属性
*/
frm_sql.setLocation(2, 2);//位置
frm_sql.setTitle("Access数据库的访问");
frm_sql.setSize(1366, 730);//大小
frm_sql.setLayout(new FlowLayout());//布局属性
frm_sql.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm_sql.setVisible(true);

}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("删除")) {
System.out.println("删除");
}
if (command.equals("插入")) {
System.out.println("插入");
}
if (command.equals("修改")) {
System.out.println("修改");
}
if (command.equals("查询")) {
System.out.println("查询");
}
}
}


至此,主界面也有了,接着我们需进行第三步,实现数据库与主界面之间的连接及信息的交流。

三、数据库与可视化界面之间联系的建立

在与数据库连接之前,我们需要进入到Windows的配置中进行数据源的配置,现在,我们开始

1、打开“控制面板”,进入到“管理工具”,能够看到”ODBC数据源(64位)“左键双击击,接着在弹出的”ODBC数据源管理程序(64位)“对话框中选择“系统DSN”标签,选择其下的“添加”按钮,然后在弹出

的对话框“创建数据源”中选择"Microsoft Access Driver"点击完成按钮后,又弹出一个绑定数据库对话框,即“ODBC Microsoft Access安装”,在这里需要输入数据源名,这儿我们取做"DDEmployer",点击选择按钮

(如图3.1.1所示),进入文件夹选择第一步做好的数据库文件。最后配置的结果如图所示(图3.1.2)



图3.1.1 命名数据源和选择数据库文件
最终配置结果:



图3.1.2 最终配置结果
对于其他数据库的配置,我们能够参见如下链接处地址:部分数据库数据源的配置
2、在配置完之后,我们进行程序代码的访问工作,打开eclipse,进行代码的编写,首先我们为按钮事件的响应创建四个类,类的名称分别为Delete、Insert、Update、Query这四个类,在建立好类

之后,我们进行对类代码的编写,先以Insert为例,进行代码的编写,如下所示(图3.1.2为创建类Insert)



图3.1.2 创建Insert类
Insert代码:要注意的是,在代码中出现了关于NUMBER的错误,因为NUMBER为数据库的系统表示符,所以在使用时将其改为"NUMBERANDPHONE",所以在创建数据库的时候,需要使用更改后

的表示符好,即将”NUMBER“字段改为”NUMBERPHONE“字段,否则会出现Insert into语句错误的提示。

package Java_Employer;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.text.DateFormat;

import javax.print.attribute.DateTimeSyntax;
public class Insert{
{
try {
String id=javax.swing.JOptionPane.showInputDialog(null,"员工编号");
String name=javax.swing.JOptionPane.showInputDialog(null,"输入姓名");
String sex=javax.swing.JOptionPane.showInputDialog(null,"输入性别");
String number=javax.swing.JOptionPane.showInputDialog(null,"输入联系方式");
String registerdate=javax.swing.JOptionPane.showInputDialog(null,"输入登记日期");
String address=javax.swing.JOptionPane.showInputDialog(null,"输入家庭住址");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn= DriverManager.getConnection("jdbc:odbc:DDEmployer");
Statement stat=conn.createStatement();
String sql="insert into T_EMPLOYER(ID,NAME,SEX,NUMBERANDPHONE,REGISTERDATE,ADDRESS) VALUES(?,?,?,?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,id);
ps.setString(2, name);
ps.setString(3, sex);
ps.setString(4,(number));
ps.setString(5,registerdate);
ps.setString(6, address);
int i=ps.executeUpdate();
conn.commit();
System.out.println("成功添加"+i+"行");
stat.close();
conn.close();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
}
在编写好插入语句后,我们需要进入到MainFrame.java中进行初始化Insert函数类,即在语句中插入如下语句(Insert insert=new Insert();)即可:

if (command.equals("插入")) {
System.out.println("插入");
Insert insert=new Insert();
}
现在我们进行演示,点击eclipse运行主框架程序,则会弹出填写内容框,如下所示,按照要求填错写内容即可:









图3.1.3 写入员工信息
在输入完信息后,如果写入成功,则会在在eclipse控制台出现如下字样:



图3.1.4 插入结果显示信息
则会在数据库中插入数据,如下图所示:



图3.1.5 新填数据的显示结果
现在,我们完成了插入操作的代码,下面分别编写Delete、Update、Query类的实现,以相同的方法建立类,然后敲入里边的代码,下面是Delete类的代码:

package Java_Employer;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class Delete {
{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:DDEmployer");
Statement stat = conn.createStatement();
String id = javax.swing.JOptionPane.showInputDialog(null,"请输入要删除的员工编号");
String sql = "DELETE FROM T_EMPLOYER WHERE ID =?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, Integer.valueOf(id));
int i = ps.executeUpdate();// 之前已经给了sql字符串,所以executeUpdate是无参的。
System.out.println("成功删除" + i + "行");
stat.close();
conn.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
下面是Update类的实现:

package Java_Employer;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class Update
{
{
try {
/**
* 修改
*/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn= DriverManager.getConnection("jdbc:odbc:DDEmployer");
Statement stat=conn.createStatement();
String id = javax.swing.JOptionPane.showInputDialog(null,"请输入要修改的员工编号");
String sex= javax.swing.JOptionPane.showInputDialog(null,"请输入要修改的员工性别");
String numberandphone= javax.swing.JOptionPane.showInputDialog(null,"请输入要修改的员工的联系方式");
String address = javax.swing.JOptionPane.showInputDialog(null,"请输入要修改的员工家庭住址");
String sql="UPDATE T_EMPLOYER SET SEX =?,NUMBERANDPHONE=?,ADDRESS=? WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,sex);
ps.setString(2,numberandphone);
ps.setString(3,address);
ps.setInt(4, Integer.valueOf(id));
int i = ps.executeUpdate();// 之前已经给了sql字符串,所以executeUpdate是无参的。
conn.commit();
System.out.println("成功修改" + i + "行");
stat.close();
conn.close();
}
catch (Exception e1) {
e1.printStackTrace();
}
}

}


下面是Query类的实现:

package Java_Employer;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Query
{
{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn= DriverManager.getConnection("jdbc:odbc:DDEmployer");
Statement stat=conn.createStatement();
String id = javax.swing.JOptionPane.showInputDialog(null,"请输入要修改的员工编号");
String sql="select * from T_EMPLOYER where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, Integer.valueOf(id));
ResultSet rs = ps.executeQuery();// 之前已经给了sql字符串,所以executeUpdate是无参的。
while(rs.next())
{
System.out.println(rs.getString("ID")+"\t"+rs.getString("NAME")+"\t"+rs.getString("SEX")+"\t"+
rs.getString("NUMBERANDPHONe")+"\t"+rs.getString("ADDRESS"));
}
stat.close();
conn.close();
}
catch (Exception e1) {
e1.printStackTrace();
};
}

}


如下图所示为测试过程





图 3.1.6 查询测试过程
最后,只有知道了数据库里的数据,我们才能够操作,因此我们在创建一个类Flashface,创建过程与上面类的创建过程类似,现将代码贴出如下,需要注意的是需要在MainFrame类中进行初始化,即在mainFrame中

加入语句“Flashface flashface=new Flashface();//显示数据库中的信息”

package Java_Employer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Flashface {
{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:DDEmployer");
Statement stat = conn.createStatement();
String sql = "select * from T_EMPLOYER";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();// 之前已经给了sql字符串,所以executeUpdate是无参的。
while (rs.next()) {
System.out.println(rs.getString("ID") + "\t"+ rs.getString("NAME") + "\t" + rs.getString("SEX")
+ "\t" + rs.getString("NUMBERANDPHONe") + "\t"+ rs.getString("ADDRESS"));
}
stat.close();
conn.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}

在编写完上面代码之后,运行能够看到在控制台显示数据库里的信息,现在,我们已经实现了开始时提出要求的功能,为了更容易使用,我们将数据显示到界面上,只需将MainFrame中的代码作调整即可

:也就是在MainFrame类中增加一个函数show_table,详情请看下面代码:

/**
* 显示table内容
*/
public static void show_table()
{
String str=null;
StringBuffer strb=new StringBuffer();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:DDEmployer");
Statement stat = conn.createStatement();
String sql = "select * from T_EMPLOYER";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();// 之前已经给了sql字符串,所以executeQuery是无参的。
while (rs.next())
{
/*System.out.println(rs.getString("ID") + "\t"+ rs.getString("NAME") + "\t" + rs.getString("SEX")
+ "\t" + rs.getString("NUMBERANDPHONE") + "\t"+rs.getString("REGISTERDATE")+"\t"+
rs.getString("ADDRESS"));*/
str=str+(rs.getString("ID") + "\t"+ rs.getString("NAME") + "\t" + rs.getString("SEX")
+ "\t" + rs.getString("NUMBERANDPHONE") + "\t"+rs.getString("REGISTERDATE")+"\t"+
rs.getString("ADDRESS")+"\n");

}
stat.close();
conn.close();
}
catch (Exception e1)
{
e1.printStackTrace();
}
jTextArea_list.setText(str);

}


增加这个函数后就能够及时的查看数据库里的内容。

下面是程于最终的运行界面:



哈哈哈,到此,我们已经完成了全部工作,当然含有很多缺点在程序中,比如输入对话框弹出式,假如用户不输入任何信息时,插入时员工编号重叠时,查找时没有要找的信息等这些情况,都没具有相应

的处理程序,希望读者能够注意到,有兴趣的可以继续修改。谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: