使用java控制台和sqlServer数据库实现对客户表的操作

这是一次老师布置的作业,实现客户管理系统。作者在实现过程中做了小改动,耗时一天,特别提到 java.sql.Date 和 java.util.Date 转换的 bug。还给出实现题目接口、Javabean、DAO.Java 的代码及数据库建用户表的 SQL 语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这只是一次老师的作业.

老师作业的大体要求如下:

(1)数据库分层设计实验。
① 用root登录MySQL,在MySQL中创建数据库,注意使用中文字符集,然后创建用户,授予该用户对你创建的数据库的所有的操作权限,用你创建的用户登录数据库,在数据库中建立顾客表,字段设置如下:顾客ID——整型,自增长,主键;顾客身份证号——变长字符串,长度20,非空;顾客姓名—变长字符串,长度20,非空;电话——变长字符串,长度20,可空;出生日期——日期型,可空。
②建立针对顾客表相应的JavaBean。(注意:顾客ID属性的数据类型是整型,在JavaBean中要用Integer类型;出生日期是日期型,在JavaBean中要用java.util.Date类型)
③按指定接口的要求,实现立顾客表的DAO实现类,要包含增、删、改、查几项基本功能。
接口如下:
public interface ICustomerDAO {
	public void addCustomer(Customer c) throws Exception;//增
	public Customer getCustomerById(int id) throws Exception;//查一个
	public void deleteCustomer(Customer c) throws Exception;//删
	public void updateCustomer(Customer c, String newIdCard, String newName, String newPhone, String newBirthday) throws Exception;//改
	public List<Customer> allCustomers() throws Exception;//查所有
}
④写一个测试类,测试DAO中的每一项功能。

在实现过程中我做了一些小的改动.整个做下来不太难 , 希望会有人能借鉴一下哈哈哈哈.

耗时一天 , 给我留下特别印象的是一个bug.  java.sql.Date  和   java.util.Date 的转换.这个在代码注释里有体现.

首先是实现题目接口 , 代码如下:

import java_bean.*;
import java.util.*;
public interface ICustomerDAO {
	public void addCustomer(customer_bean c) throws Exception;//增
	public void getCustomerById(customer_bean c) throws Exception;//查一个
	public void deleteCustomer(customer_bean c) throws Exception;//删
	public void updateCustomer(customer_bean c) throws Exception;//改
	public void allCustomers() throws Exception;//查所有
}

接着,写一个Javabean,代码如下:

package java_bean;
import java.util.Date;
public class  customer_bean
{
	//customer_table中的属性: number  name  telephone  birthday
	String number;
	String name;
	String telephone;
	Date birthday;
	int ID;

	//get()
	public  String  getNumber()
	{
		return  number;
	}

	public String  getName()
	{
		return name;
	}

	public String getTelephone()
	{
		return telephone;
	}

	public Date getBirthday()
	{
		return birthday;
	}

	public  int getID()
	{
		return ID;
	}

	public void  setID(int id)
	{
		this.ID = id;
	}

	public void  setNumber(String number)
	{
		this.number = number;
	}

	public void  setName(String name)
	{
		this.name = name;
	}

	public void setTelephone(String telephone)
	{
		this.telephone = telephone;
	}

	public void setBirthday(Date birthday)
	{
		this.birthday = birthday;
	}
}

最后实现DAO.Java , 代码如下:

import  java_bean.*;
import  java.util.Scanner;
import  java.sql.PreparedStatement;
import  java.text.SimpleDateFormat;
import  java.text.ParseException;
import  java.sql.Connection;
import  java.sql.ResultSet;
import  java.sql.DriverManager;
import  java.util.Date;
import  java.util.List;
import  java.util.ArrayList;
public class DAO  implements  ICustomerDAO
{
	public void addCustomer(customer_bean c) throws Exception
	{
		customer_bean customer = c;
		Scanner sc = new Scanner(System.in);
		String  s;//暂存用户输入的信息
		System.out.println("您正在执行的操作是:增加客户信息");
		System.out.println("输入客户的姓名:");
		s = sc.nextLine();
		customer.setName(s);
		System.out.println("输入客户的身份证号:");
		s = sc.nextLine();
		customer.setNumber(s);
		System.out.println("输入客户的电话号码:");
		s = sc.nextLine();
		customer.setTelephone(s);
		System.out.println("输入客户的出生日期:  格式(yyyy-MM-dd)");
		s = sc.nextLine();
		SimpleDateFormat  format;
		Date date = new Date();
		try
		{
			format = new SimpleDateFormat("yyyy-MM-dd");
			date = format.parse(s);    //format解析字符串后返回的是java.util.date   不是java.sql.date
		}
		catch(ParseException e)
		{
			System.out.println("日期输入格式不正确.");
		}
		customer.setBirthday(date);

		//将数据插入数据库
		try
		{
			String  driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
        	Class.forName(driver);
        	String url = "jdbc:sqlserver://localhost:1433;DatebaseName=experiment_second";
        	Connection  con = DriverManager.getConnection(url , "sa" , "123");
        	String sql_insert = "use experiment_second ; insert into customer_table(number , name , telephone , birthday ) values(? , ? , ? ,? ) ;";
        	PreparedStatement ps  = con.prepareStatement( sql_insert , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        	ps.setString( 1 , customer.getNumber());
        	ps.setString( 2 , customer.getName());
        	ps.setString( 3 , customer.getTelephone());
        	/*
        	这个包中统一用的是java.util.Date类.
        	java.text.SimpleDateFormat 的  parse()方法解析日期后返回一个java.util.Date类型的Date
        	而PreparedStatement 的 setDate()方法参数为  java.sql.Date
        	所以这里在设置参数时将java.util.Date类型转换为java.sql.Date类型
        	*/
        	java.sql.Date dt = new java.sql.Date(customer.getBirthday().getYear() , customer.getBirthday().getMonth() , customer.getBirthday().getDay());
        	ps.setDate( 4 , dt );
       	 	ps.executeUpdate();
       	 	System.out.println("增加客户信息操作成功!");
        	ps.close();
    	}
    	catch(Exception e)
    	{
    		System.out.println("程序出现了错误,用户创建失败!");
    	}
	}//addCustomer



	public void getCustomerById(customer_bean c) throws Exception  
	{
		//查一个
		customer_bean customer = c;
		System.out.println("您正在执行的操作是: 按用户 ID 查找 ");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户ID进行查找:");
		int id = Integer.parseInt(sc.nextLine() );
		customer.setID(id);
		try
		{
			String  driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
        	Class.forName(driver);
        	String url = "jdbc:sqlserver://localhost:1433;DatebaseName=experiment_second";
        	Connection  con = DriverManager.getConnection(url , "sa" , "123");
        	String sql_select_id = "use experiment_second  select * from customer_table where ID = ? ;";
        	PreparedStatement ps  = con.prepareStatement( sql_select_id , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        	ps.setInt( 1 , customer.getID());
        	ResultSet rs = ps.executeQuery();
        	if(rs.next())
        	{
        		System.out.println("查询到匹配用户:");
        		System.out.println("用户姓名:" + rs.getString("name"));
        		System.out.println("用户身份证号:" + rs.getString("number"));
        		System.out.println("用户电话:" + rs.getString("telephone"));
        		System.out.println("用户生日:" + rs.getDate("birthday"));
        	}
        	else
        	{
        		System.out.println("没有查询到用户信息 , 请检查输入的用户ID是否存在.");
        	}
        	ps.close();
		}
		catch(Exception e)
		{
			System.out.println("执行查询操作失败,失败原因:" + e.getMessage());
		}
	}




	
	public void deleteCustomer(customer_bean c)
	{
		System.out.println("您正在执行的操作是:删除用户信息");
		Scanner sc = new Scanner(System.in);
		String  number;
		customer_bean customer = c;
		System.out.println("请输入您要删除的用户身份证号:");
		number = sc.nextLine();
		customer.setNumber(number);
		try
		{
			String  driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
        	Class.forName(driver);
        	String url = "jdbc:sqlserver://localhost:1433;DatebaseName=experiment_second";
        	Connection  con = DriverManager.getConnection(url , "sa" , "123");
        	String sql_delete_number = "use experiment_second ; select * from customer_table where number = ? ;";
        	PreparedStatement ps  = con.prepareStatement( sql_delete_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        	ps.setString( 1 , customer.getNumber());
        	ResultSet rs = ps.executeQuery();
        	if(rs.next())
        	{
        		System.out.println("即将要删除的用户:    "  +"姓名:"  + (rs.getString("name") ) + "     电话:" + (rs.getString("telephone") ) + "     出生日期:" + (rs.getDate("birthday")) );
        		System.out.println("确定要将该用户删除吗? ------ Y/N");
        		String del = sc.nextLine();
        		switch(del)
        		{
        			case "Y":
        			{
        				sql_delete_number = "use experiment_second ; delete from customer_table where ID = ? ;";
        				ps = con.prepareStatement( sql_delete_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY);
        				ps.setString(1 , customer.getNumber());
        				ps.executeUpdate();
        				ps.close();
        				break;
        			}

        			case "N":
        			{
        				System.out.println("您已放弃删除该用户");
        				break;
        			}

        			default:
        			{
        				System.out.println("输入不合法");
        			}
        		}
        	}
        	else
        	{
        		System.out.println("未查询到您要删除的用户,请核对您输入的身份证号");
        	}
		}
		catch(Exception e)
		{
			System.out.println("执行删除操作失败,失败原因:" + e.getMessage());
		}
	}//删




	public void updateCustomer(customer_bean c) throws Exception
	{
		//暂时不写
		System.out.println("请输入您要更改的用户身份证号:");
		Scanner sc = new Scanner(System.in);
		String number;
		number = sc.nextLine();
		try
		{
			String  driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
        	Class.forName(driver);
        	String url = "jdbc:sqlserver://localhost:1433;DatebaseName=experiment_second";
        	Connection  con = DriverManager.getConnection(url , "sa" , "123");
        	String sql_update_number = "use experiment_second ; select * from customer_table where number = ? ;";
        	PreparedStatement ps  = con.prepareStatement( sql_update_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        	ps.setString(1 , number);  //先注入值 , 在执行executeQuery() 
        	ResultSet rs = ps.executeQuery();
        	if(rs.next())
        	{
        			int i;
        			System.out.println("请输入您要更改的字段信息------1:身份证号------2:姓名------3:电话号码------    ");
        			i = Integer.parseInt(sc.nextLine());
        			switch(i)
        			{
        				case 1:
        				{
        					System.out.println("请输入新的身份证号:");
        					String n = sc.nextLine();
        					
        					sql_update_number = "use experiment_second ; update customer_table set number = ?  where number = ? ; ";
        					ps  = con.prepareStatement( sql_update_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        					ps.setString(1 , n);
        					ps.setString(2 , number);
        					ps.executeUpdate();
        					System.out.println("身份证号已更新");
        				}

        				case 2:
        				{
        					System.out.println("请输入新的姓名:");
        					String n = sc.nextLine();
        					sql_update_number = "use experiment_second ; update customer_table set name = ?  where number = ? ; ";
        					ps  = con.prepareStatement( sql_update_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        					ps.setString(1 , n);
        					ps.setString(2 , number);
        					ps.executeUpdate();
        					System.out.println("姓名已更新");
        					break;
        				}


        				case 3:
        				{
        					System.out.println("请输入新的电话号码:");
        					String n = sc.nextLine();
        					sql_update_number = "use experiment_second ; update customer_table set telephone = ?  where number = ? ; ";
        					ps  = con.prepareStatement( sql_update_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        					ps.setString(1 , n);
        					ps.setString(2 , number);
        					ps.executeUpdate();
        					System.out.println("电话号码已更新");
        					break;
        				}


        				default:
        				{
        					System.out.println("输入错误");
        				}
        			}//switch
        	}//if
        	else
        	{
        		System.out.println("您要更改的用户不存在,请检查输入的身份证号是否正确");
        	}
        	ps.close();
		}//try
		catch(Exception e)
		{
			 System.out.println("执行修改操作失败 , 失败原因:" + e.getMessage());
		}

	}





	public void allCustomers() throws Exception
	{
		
		System.out.println("正在执行--查看全部信息--的功能");
		System.out.println("全部信息如下:");
		try
		{
			String  driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
        	Class.forName(driver);
        	String url = "jdbc:sqlserver://localhost:1433;DatebaseName=experiment_second";
        	Connection  con = DriverManager.getConnection(url , "sa" , "123");
        	String sql_update_number = "use experiment_second ; select * from customer_table ;";
        	PreparedStatement ps  = con.prepareStatement( sql_update_number , ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY );
        	ResultSet rs = ps.executeQuery();
        	while(rs.next())
        	{
        		System.out.println("身份证号:" + (rs.getString("number")) + "   姓名:" + (rs.getString("name")) + "    电话:" + (rs.getString("telephone")) + "出生日期:" + (rs.getDate("birthday").toString()));
        	}
        	ps.close();
		}
		catch(Exception e)
		{
			System.out.println("执行查看全部信息操作失败 , 失败原因:" + e.getMessage());
		}
	}



	public static void main(String [] args)
	{
		try
		{
			customer_bean c = new customer_bean();
			DAO dao = new DAO();
			//dao.addCustomer(c);
			//dao.allCustomers();
			//dao.updateCustomer(c);
			//dao.deleteCustomer(c);
			boolean exit = true;
			do
			{
				System.out.println("-------------菜单------------");
				System.out.println("---------1:添加用户----------");
				System.out.println("---------2:按ID查找用户------");
				System.out.println("---------3:删除用户----------");
				System.out.println("---------4:更改用户信息------");
				System.out.println("---------5:查询所有信息------");
				System.out.println("---------6:退出菜单----------");
				System.out.println("------------请输入-----------");
				Scanner sc = new Scanner(System.in);
				int i = Integer.parseInt(sc.nextLine());
				switch(i)
				{
					case 1:
					{
						dao.addCustomer(c);
						break; 
					}

					case 2:
					{
						dao.getCustomerById(c);
						break;
					}

					case 3:
					{
						dao.deleteCustomer(c);
						break;
					}

					case 4:
					{
						dao.updateCustomer(c);
						break;
					}

					case 5:
					{
						dao.allCustomers();
						break;
					}

					case 6:
					{
						exit = false;
						break;
					}

					default:
					{
						System.out.println("输入数据不正确");
					}
				}
			}
			while(exit);
		}
		catch(Exception e)
		{
			System.out.println("主函数执行出现错误 , 错误原因:" + e.getMessage());
		}
	}
}

最后,给出数据库建立用户表的sql语句:

//创建一个数据库
use  master
create database experiment_second
on
(
   name = experiment_second_data,
   filename ='F:\HelloWorld\JavaEE\Code\shangJiShiYan\experiment_second_data.mdf',    
   size = 6MB,
   maxsize = 10,
   filegrowth = 10%
)

log on
(
  name = experiment_second_log,
  filename ='F:\HelloWorld\JavaEE\Code\shangJiShiYan\experiment_second_log.ldf',
  size = 6,
  maxsize = 17,
  filegrowth = 1MB
  )
  go

  --建表
  /*
   用root登录MySQL,在MySQL中创建数据库,注意使用中文字符集,然后创建用户,授予该用户对你创建的数据库的所有的操作权限,用你创建的用户登录数据库,
  在数据库中建立顾客表,字段设置如下:顾客ID——整型,自增长,主键;顾客身份证号——变长字符串,长度20,非空;顾客姓名—变长字符串,长度20,非空;电话——变长字符串,
  长度20,可空;出生日期——日期型,可空。
   */
  use experiment_second
  create table customer_table
    (
      ID  int  identity(1,1) primary key,
      number varchar(20) not null , 
      name varchar(20) not null , 
      telephone varchar(20) null,
      birthday  datetime  default getdate() null
    )
    go

    --插入一个实例数据
    --  number '20162025051'    name '李浩' telephone '18846791357'  birthday '2016-03-20'
    use experiment_second
    insert into customer_table( number , name ,telephone , birthday)
      values('20162025051' , '李浩' , '18846791357' , '2016-03-20');

我发现一个很有意思的事情,如果代码有错在csdn里插入代码片段会出现敲不了回车而无法操作的情况 , 这是真的吗?各位朋友有了解的吗?

最后一点简单的说明:

1:将数据库的数据文件(experiment_second_data)附加到数据库
  如果因为sql server版本问题导致附加数据库失败,则需要重新创建数据库
  找到data.sql文件,在数据库管理工具中执行文件中的语句. 则创建数据库成功.
  需要保证该数据库的登录名是sa  密码 123


 2:执行DAO.class文件.
   如果由于jdk版本问题导致编译的class文件报错,则需要在具体环境下重新编译所有java文件.
   执行过程如下:
        1:编译ICustomerDAO.java文件
        2:编译customer_bean.java文件
        3:编译DAO.java文件
        4:执行主类文件------java DAO

结束了!

 

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值