`
xwz0528
  • 浏览: 45333 次
  • 性别: Icon_minigender_1
  • 来自: 日照
社区版块
存档分类
最新评论

C/S架构的数据库操作

阅读更多

    最近在做一个课程设计,需要用到C/S架构,客户端发出增删改查数据库的请求,服务端需要完成数据库的具体操作,这样可以保证数据的安全。数据库采用Access,名称为student,放置于F盘根目录下,文件见附件。实现结果如下:

 

服务端:


 客户端:查询到结果为 小文

 

 

实现代码如下:

 

 

ServerFrame.java实现服务端的界面:

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
/**
*
* @author xwz0528
* 
* 此类主要设置界面
*/

public class ServerFrame extends JFrame{

	public static int port=6000;
	
	Server sev;
	
	public ServerFrame() {
		
		JPanel p1=new JPanel(new GridLayout(2,2));//西
		JLabel jlb1=new JLabel("端口号 :");
		final JLabel jlbPort=new JLabel("6000");
		JLabel jlb2=new JLabel("运行状态 :");
		final JLabel jlbNow=new JLabel("关闭");
		p1.add(jlb1);
		p1.add(jlbPort);
		p1.add(jlb2);
		p1.add(jlbNow);
		p1.setBorder(new TitledBorder("服务端信息"));
		
		
		JPanel p2=new JPanel(new GridLayout(3,2));//东
		JPanel p21=new JPanel(new FlowLayout(FlowLayout.CENTER,4,4));
		JLabel jlb3=new JLabel("端口号 :");
		final JTextField jtfPort=new JTextField("6000",8);		
		p21.add(jlb3);
		p21.add(jtfPort);
		JPanel p22=new JPanel(new FlowLayout(FlowLayout.CENTER,4,4));
		final JButton jbnApply=new JButton("应用");//点击更改端口号
		p22.add(jbnApply);
		JLabel jlb6=new JLabel("");
		p2.add(jlb6);
		p2.add(p21);
		p2.add(p22);
		p2.setBorder(new TitledBorder("设置端口号"));
		
		
		JPanel p3=new JPanel(new GridLayout(2,2));
		JPanel p31=new JPanel(new FlowLayout(FlowLayout.CENTER,4,4));//南
		final JButton jbnStart=new JButton("开启服务");//点击开启服务		
		p31.add(jbnStart);
		JPanel p32=new JPanel(new FlowLayout(FlowLayout.CENTER,4,4));
		final JLabel jlbWork=new JLabel("谢谢使用!");
		p32.add(jlbWork);
		JLabel jlb4=new JLabel("");
		JLabel jlb5=new JLabel("");		
		p3.add(jlb4);
		p3.add(jlb5);
		p3.add(p31);
		p3.add(p32);
		
		setLayout(new BorderLayout());
		add(p1,BorderLayout.WEST);
		add(p2,BorderLayout.EAST);
		add(p3,BorderLayout.SOUTH);
		
		
		
		//以下是消息响应事件
		
		//应用
		jbnApply.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				
				String str=jtfPort.getText();//获得输入的端口号
				
				port=Integer.parseInt(str);
				
				jlbPort.setText(str);//显示新设置的端口号
			}
		});
		
		//开启服务
		jbnStart.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				
				jbnStart.setEnabled(false);
				jbnApply.setEnabled(false);
				jtfPort.setEnabled(false);
				jlbNow.setText("正常运行");
										
				sev=new Server();
				sev.start();
			}
		});
				
	}

	public static void main(String[] args) {
		JFrame frame=new ServerFrame();
		frame.setTitle("企业工资管理系统(ESMS)服务端");
		frame.setSize(380,300);
		frame.setLocationRelativeTo(null);//center
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

 

Server.java实现服务端与客户端的通信:

 

import java.net.*;
import java.io.*;


/**
 *
 * @author xwz0528
 * 
 * 此类的主要功能是完成与客户端的通信功能,接受客户端传来的用于增、删、改、查的sql语句,
 * 
 * 将查询到的信息,以字符串的方式发送给客户端
 */


public class Server extends Thread{
	
	private ServerSocket ss;
	
	private Socket s;
	
	//private volatile boolean isStop=false;//是否运行线程
	
    public Server()
    {
    	
    }
    
    public void run()
    {
    	try
        {
            ss=new ServerSocket(ServerFrame.port);
                       
            //接受消息
            while(true)//线程不停止时(工作)
            {      
            	s=ss.accept();
            	
            	if(s!=null)
            	{
		            InputStream is=s.getInputStream();
		            byte[] buf=new byte[100];	
					int len=is.read(buf);
					if(len!=-1)
					{                               	   
						String sql=new String(buf,0,len);//接受的sql语句
		                   
		                String[] split=sql.split(" ");//根据空格拆分字符串
		                String sqlKey=split[0];//sql语句关键字,判断进行的增删改查操作
		                
		                if(sqlKey.equals("insert")||sqlKey.equals("delete")||sqlKey.equals("update"))
		                {
		                	DataBase.executeSql(sql);
		                }
		                else if(sqlKey.equals("select"))//查询操作
		                {
		                	//发送消息
			                OutputStream os=s.getOutputStream();
		                	
			                String result=DataBase.getQueryResult(sql);
			                
			                os.write(result.getBytes());//执行查询并发送查到的数据	
		                }
		                	                                   
	            	}
            	}
            }
                     
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

 

DataBase.java实现数据库的相关操作:

import java.sql.*;

/**
 *
 * @author xwz0528
 * 
 * 此类的主要功能是对数据库进行操作
 */
public class DataBase {

    public static Connection con = null;

    public static Statement st = null;

    public static ResultSet rs; //定义返回结果值

    //连接数据库
    public static void getConn() {
        try {

            String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; //创建驱动程序

            String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=F:\\student.mdb";//创建指定数据库的URL

            Class.forName(driver);

            DataBase.con = DriverManager.getConnection(url);


        } catch (Exception e) {

            e.printStackTrace();


        }
    }

    //关闭数据库连接
    public static void closeConn() {
        try {

            if (DataBase.con != null) {
                DataBase.con.close();
            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    //执行插入(增)、删除(删)、更新(改)语句方法
    public static void executeSql(String sql){

        try{

            DataBase.getConn();

            st = DataBase.con.createStatement();

            st.executeUpdate(sql);//进行非查询操作都为executeUpdate()

            DataBase.con.commit();

            DataBase.closeConn();//关闭数据库连接,以防写不进数据去

        }
        catch(Exception e){

            e.printStackTrace();

        }

    }

    //数据库查询操作,查询方法,返回查询结果集(查)
    public static String getQueryResult(String sql) {

    	String result="";
    	
        try {

            DataBase.getConn();

            st = DataBase.con.createStatement();

            rs = st.executeQuery(sql);//查询操作为executeQuery                                  
            
            while(rs.next())
            {
            	result=rs.getString(2);//姓名
            }
            
            DataBase.closeConn();//关闭数据库连接,以防写不进数据去
            
            return result;


        } catch (Exception e) {

            e.printStackTrace();

            return result;

        }

    }

	
}

 

 

 

 

下面是客户端的测试程序:

Client.java

import java.net.*;
import java.io.*;

public class Client extends Thread{
	
	public static String result="";
	
	public static Socket s;
	
	public Client()
	{
		try
		{
			s=new Socket(InetAddress.getByName("localhost"),6000);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}	
	}
	
	public void run()
	{
		try
		{						
			//接受消息
            while(true)//线程不停止时(工作)
            {                  	
            	if(s!=null)
            	{
		            InputStream is=s.getInputStream();
		            byte[] buf=new byte[100];	
					int len=is.read(buf);
					if(len!=-1)
					{             						
						Client.result=new String(buf,0,len);
					}
            	}
            }
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}	
	}
	
	public static void send()
	{
		try
		{		
			OutputStream os=s.getOutputStream();      

			//查询学号为356的信息(服务端只实现了返回姓名)
			os.write("select * from db_student where 学号=356".getBytes());
		}
		catch(Exception ex)
		{		
			ex.printStackTrace();	
		}
	}
	
	public static void main(String[] args)
	{
		Thread client=new Client();		
		
		client.start();//一直监听者服务端返回的查询到的信息

		Client.send();//发送sql语句
		
		try
		{
			Thread.sleep(1000);//这个地方不太明白,但是很重要
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
		if(!Client.result.isEmpty())
		{
			System.out.print(Client.result);
		}
	}
}

 

  • student.rar (7.7 KB)
  • 描述: 数据库文件
  • 下载次数: 3
分享到:
评论

相关推荐

    三层架构工作流程图B/S架构及C/S架构

    下面我们将详细探讨这三个层次及其在B/S和C/S架构中的工作流程。 1. 表现层(Presentation Layer): 这是用户与系统交互的界面,负责接收用户输入并展示结果。在B/S架构中,通常表现为网页,用户通过浏览器访问;...

    C/S架构和B/S架构的概念和区别

    C/S架构,全称Client/Server,是一种传统的两层架构,它的核心特点是客户端和服务器端的直接交互。在C/S架构中,客户端包含了大部分的业务逻辑和用户界面,用户通过安装在本地的客户端程序与服务器进行通信。客户端...

    B/S架构的原理与应用

    - **三层结构**:相较于C/S架构的两层结构,B/S架构采用三层结构设计,包括表现层(浏览器)、业务逻辑层(中间件服务器)以及数据访问层(数据库服务器),这样的设计使得系统的可维护性和扩展性更强。 - **简化...

    B/S架构和C/S架构的区别和优缺点

    3. **操作系统兼容性**:C/S架构的客户端软件可能只兼容特定的操作系统,限制了其通用性和适应性。 **B/S架构**,即Browser/Server架构,是基于Web的一种架构模式。在B/S架构中,用户只需要在客户端安装标准的...

    C/S、B/S、分层、多层架构参考

    C/S架构是一种典型的两层架构,其中客户端软件直接与服务器端的应用程序进行交互。客户端负责用户界面的展示和部分业务逻辑处理,而服务器端则主要负责数据存储和管理。C/S架构的优势在于响应速度快,用户体验良好,...

    基于C/S架构的人力资源管理系统设计,毕设论文

    基于C/S架构的人力资源管理系统设计 ...本文介绍了基于C/S架构的人力资源管理系统的设计和实现,涵盖了系统的设计、数据库设计、技术应用和实现等方面的内容,为读者提供了一个完整的人力资源管理系统的解决方案。

    基于C_S架构的SQL数据库技术研究.pdf

    基于C/S架构的SQL数据库技术研究 随着信息技术的飞速发展,数据库技术在数据处理和存储方面扮演着至关重要的角色。数据库不仅为企业存储和管理数据提供了平台,还为数据分析、决策制定提供了重要依据。在众多数据库...

    医院管理系统( c/s架构 c#)

    《医院管理系统的C/S架构与C#实现》 在信息技术高度发达的今天,医院管理系统已经成为医疗机构不可或缺的一部分。本文将深入探讨一个基于C/S(客户端/服务器)架构,使用C#编程语言实现的医院管理系统,该系统涵盖...

    C/S结构sqlite数据库管理器V1.2

    在本案例中,“C/S结构sqlite数据库管理器V1.2”是一个基于C/S架构设计的用于管理和操作SQLite数据库的工具。 SQLite是一个轻量级的、开源的、自包含的SQL数据库引擎,它无需单独的服务器进程,可以直接嵌入到各类...

    代码C/S架构游戏

    总之,《代码C/S架构游戏》是一个综合性的项目,涵盖了软件工程的多个领域,包括软件设计、网络编程、数据库管理和用户界面设计等,对于学习和实践C/S架构有很高的价值。开发者需要对这些方面都有所了解,才能构建出...

    员工信息管理系统C/S架构编写

    《员工信息管理系统C/S架构详解》 员工信息管理系统是一个企业内部不可或缺的重要工具,它主要用于管理和维护员工的相关数据,包括个人信息、职位信息、薪资福利、考勤记录等。本系统采用经典的C/S(Client/Server...

    SuperVCD java编写的小的C/S架构程序源代码

    总之,SuperVCD管理系统是一个实践性的教学资源,它让初学者有机会亲手操作C/S架构的Java程序,理解网络通信、多线程、数据库操作等核心概念。通过分析源代码,不仅能学习到Java语言的运用,还能提升对C/S架构的整体...

    java开发的电影院管理系统 c/s 架构

    总的来说,通过这个电影院管理系统项目,你不仅能够深入学习Java编程,还能掌握C/S架构的设计和实现,以及数据库管理和SQL查询等核心技能。此外,通过阅读和分析源代码,还可以学习到软件工程中的模块化设计、异常...

    JAVA C/S架构应用程序

    这个C/S架构的程序很可能使用了Swing或JavaFX等库来构建用户界面,通过Java的JDBC(Java Database Connectivity)API来连接和操作数据库。 2. **JDBC API**:JDBC是Java标准版(Java SE)的一部分,提供了与各种...

    基于C/S架构的数据库课设-C#教务管理系统

    【C/S架构与数据库教务管理系统】 C/S(Client/Server)架构是一种经典的软件系统设计模式,它将应用逻辑分为客户端(Client)和服务器端(Server)。在这个基于C/S架构的教务管理系统中,客户端主要负责用户交互,...

    C/S模式的组织架构图

    在C/S架构中,Oracle服务器作为数据处理的核心,存储着组织架构的相关数据,如员工信息、部门结构等。 描述中提到的“父id”概念,是组织架构图中的关键元素,用于表示层次关系。在树形结构的组织架构中,每个节点...

    基于C/S架构的聊天系统的实现

    总之,这个基于C/S架构的聊天系统项目涵盖了Java编程、网络通信、多线程、NIO、数据库操作和文件传输等多个重要知识点。通过实践这个项目,不仅可以加深对Java语言的理解,还能提高解决实际问题的能力,对于任何希望...

    基于c/s架构的JAVA聊天程序

    在IT领域,C/S(Client/Server)架构是一种常见的分布式应用结构,主要用于构建网络应用程序,如我们这里的"基于C/S架构的JAVA聊天程序"。在这个系统中,客户端(Client)负责用户交互,而服务器端(Server)处理...

    Qt实现C/S架构的银行管理系统,C++源代码,优秀毕业设计系统!

    1.运用QT框架写C/S架构的银行管理系统,编程语言C++,整个系统开发环境在Linux下进行 2.服务器端用的linux平台下的epoll作为服务器模型,Mysql数据库实现数据存储; 3.设计模式主要用了单例模式、抽象工厂以及对象的...

Global site tag (gtag.js) - Google Analytics