数据库的访问实现过程

        数据库是非常重要的数据管理软件系统,在这里我们进行一次Access数据库的访问操作,在正式介绍之前,我们先了解一下数据库访问的过程,在数据库访问中,根据最普遍的想法,需知道的构件主要有三层:分别为客户实体(即软件的图形界面)、访问的中介(即连接数据库与实体的部分)、数据库后台。在了解这些之后,我们现在也清楚了实施这个访问过程我们该做哪些工作,那就是画一下用户使用的界面,部署一个存储数据的仓库,再找一个联系两

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

一、数据库的设计

      数据库的种类有很多种,比如著名的Oracle,SQL server,access、Sybase等,各类软件都有自己的优点,oracle适合于大型公司大量数据的管理,Microsoft SQL Server是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面,效率高,可以作为中型企业或单位的数据库平台。SQL Server可以与Windows操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都能得到较大的提升。

       废话不多说,今天我们以Access数据库进行操作,建立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所示

Mian

图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);
		
	}

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

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


哈哈哈,到此,我们已经完成了全部工作,当然含有很多缺点在程序中,比如输入对话框弹出式,假如用户不输入任何信息时,插入时员工编号重叠时,查找时没有要找的信息等这些情况,都没具有相应的处理程序,希望读者能够注意到,有兴趣的可以继续修改。谢谢。










  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suwu150

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值