今天课堂上正好讲到JAVA连接jdbc管理sqlite数据库的操作,讲完他的基本用法之后,就又把之前的手机通讯录管理系统掏出来,改装完成数据库版本的增删改查等存取工作。那么下面开始需求分析以及逻辑编码。

需求分析:

能够循环接收客户端输入的功能编号,并根据编号选择对应的功能操作
用户输入“1”时,执行增加姓名和手机号码的操作
用户输入“2”时,执行删除姓名和手机号码的操作,根据用户输入姓名,删除对应手机号码
用户输入“3”时,执行修改手机号码的操作,根据用户输入姓名,修改对应手机号码
用户输入“4”时,执行显示全部姓名和手机号码的操作
用户输入“5”时,执行查询手机号码的操作,根据用户输入姓名,查找对应手机号码
用户输入“6”时,感谢用户使用,退出手机通讯录管理系统的程序

关于以上需求的功能分析和逻辑介绍,这里就不在赘述了,直接引入本篇博客使用的SQLite数据库的介绍。

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等。

首先需要安装sqlite3的数据库,步骤如下:

 1.下载sqlite3.exe

2.将sqlit3.exe拷贝到windows/system32目录下

3.启动命令行窗口

4.输入命令sqlite3

SQL语句不用.开头,但以;结束。

打开/创建 数据库的2种方式:

1.dos下运行命令:sqlite3 mytest.db 启动sqlite3 并且设定开发的数据库文件,如果不存在则会创建.

2.先运行sqlite3,进入后输入 .open mytest.db   该文件会放在命令行所在目录下, 没有该文件时会自动创建, 即使未创建任何表。

SQLite3常用命令:

在sqlit>提示符下输入:

.open mytest.db 打开数据库   mytest.db数据库名,一次只能打开一个库文件

.table(s) 显示所有表

.schema 表名 显示创建表的建表语句。如果不指定表名,则显示所有的表的建表语句.

.database(s) 列出连接的数据库(一个)

.exit 退出本程序

.quit 退出本程序

.help 显示帮助

.read 文件名 执行文件中的全部sql语句,例如  .read abc.sql

.show 显示环境变量信息

 关于SQLite的具体教程可点击此处获取。需要使用的相关工具以及文档,我会整理提交到百度网盘,有需要可下载。

因为要使用jdbc将数据库与JAVA程序进行连接,所以需要使用jar包:sqlitejdbc-v033-nested.jar,将其导入到libs文件夹当中,然后选中,鼠标右键,选择Build Path,选择Add to build path的选项卡。即可添加到程序引用库当中使用。

创建手机通讯录类:

public class Contact {
	private String name;
	private String phone;
	public Contact(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}
	public Contact() {super();}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public String getPhone() {return phone;}
	public void setPhone(String phone) {this.phone = phone;}
	@Override
	public String toString(){return "姓名:"+name+"\t电话号码:"+phone;}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((phone == null) ? 0 : phone.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Contact other = (Contact) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (phone == null) {
			if (other.phone != null)
				return false;
		} else if (!phone.equals(other.phone))
			return false;
		return true;
	}
}

 然后创建本篇博客的核心类:ContactManager.java 手机通讯录管理类,在此类中完成对于数据库的连接,以及对于表的操作等功能。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class ContactManager2 {
	private Statement stmt;
	private Connection conn;
	/**
	 * @param path :数据库地址
	 **/
	public ContactManager2(String path){
//		连接数据库
		try {
//			创建驱动
			Class.forName("org.sqlite.JDBC");
			conn = DriverManager.getConnection("jdbc:sqlite:/"+path);
			stmt = conn.createStatement();
			
			stmt.executeUpdate("create table if not exists contact(_id integer primary key autoincrement,name varchar(30) unique not null,phone varchar(20) not null)");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void work(){
		System.out.println("欢迎手机管理系统,功能如下:");
		System.out.println("-------------手机通讯录管理系统-------------" +
				"\n 输入“1”,可添加联系人到通讯录(同名不可添加)" +
				"\n 输入“2”,可根据姓名删除联系人信息" +
				"\n 输入“3”,可根据姓名修改联系人信息" +
				"\n 输入“4”,可根据姓名查询联系人信息" +
				"\n 输入“5”,可显示全部联系人信息" +
				"\n 输入“6”,退出当前系统" +
				"\n--------------------------------------------");
		Scanner sc = new Scanner(System.in);
		out:while (true) {
			System.out.print("请输入相关功能编号:");
			String code = sc.next();
			switch (code) {
			case "1":
				addContactInfo(sc);
				break;
			case "2":
				deleteContactInfo(sc);
				break;
			case "3":
				modifyContactInfo(sc);
				break;
			case "4":
				selectContactInfo(sc);
				break;
			case "5":
				printAllInfo();
				break;
			case "6":
				System.out.println("感谢您的使用,退出当前系统!!");
//				退出系统之后,一定要和数据库断开连接,否则下次会不允许连接
				try {
					stmt.close();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				break out;
			default:
				break;
			}
		}
	}
//	修改联系人信息
    private void modifyContactInfo(Scanner sc) {
    	System.out.print("请输入修改联系人姓名:");
		String dname = sc.next();
		System.out.print("请输入修改电话号码:");
		String phone = sc.next();
		String sql = "update contact set phone='"+phone+"' where name='"+dname+"'";
		try {
			int count = stmt.executeUpdate(sql);
			if (count>0) {
				System.out.println("修改成功!");
			} else {
				System.out.println("联系人不存在,修改失败!");
			}
		} catch (SQLException e) {
			System.out.println("联系人不存在,修改失败!");
		}
	}
	//	删除相关联系人信息
	private void deleteContactInfo(Scanner sc) {
		System.out.print("请输入删除联系人姓名:");
		String dname = sc.next();
		String sql = "delete from contact where name='"+dname+"'";
		try {
			int count = stmt.executeUpdate(sql);
			if (count>0) {
				System.out.println("删除成功!");
			} else {
				System.out.println("删除失败!");
			}
		} catch (SQLException e) {
			System.out.println("删除失败!");
		}
	}
//	添加联系人信息方法
	private void addContactInfo(Scanner sc) {
		System.out.print("请输入添加联系人姓名:");
		String name = sc.next();
		System.out.print("请输入添加电话号码:");
		String phone = sc.next();
		String insertSql = "insert into contact (name,phone) values('"+name+"','"+phone+"')";
		int count;
		try {
			count = stmt.executeUpdate(insertSql);
			if (count>0) {
				System.out.println("插入成功!");
		} else {
				System.out.println("插入失败!");
		}
		} catch (SQLException e) {
			System.out.println("联系人已经存在,不能插入!");
			
		}
	}
	//	根据输入姓名查询相关信息
	private void selectContactInfo(Scanner sc){
		System.out.print("请输入查询联系人姓名:");
		String dname = sc.next();
		try {
			String sql = "select * from contact where name='"+dname+"'";
			ResultSet set = stmt.executeQuery(sql);
			
			while (set.next()) {
				String name = set.getString("name");
				String phone = set.getString("phone");
				int id = set.getInt("_id");
				System.out.println("姓名:"+name+"  电话号码:"+phone);
			}
			set.close();
		} catch (SQLException e) {
			System.out.println("查找出现故障,待修复......");
		}
		
	}
	/**
	 * 打印表格当中所有数据
	 * */		
	public void printAllInfo(){
		System.out.println("-------联系人信息-------");
		String sql = "select * from contact";
		try {
			ResultSet resultSet = stmt.executeQuery(sql);
			while (resultSet.next()) {
				int id = resultSet.getInt("_id");
				String name = resultSet.getString("name");
				String phone = resultSet.getString("phone");
				System.out.println("id:"+id+"\t姓名:"+name+"\t电话号码:"+phone);
			}
			resultSet.close();
		} catch (SQLException e) {
			System.out.println("通讯录为空");
		}
	}
}

最后在写一个测试类,在主方法中运行work方法。

public class Test {
	public static void main(String[] args) {
        ContactManager2 manager2 = new ContactManager2("e:/test.db");
		manager2.work();
	}
}

效果图如下:

电话簿管理Java程序 java电话号码管理系统_sqlite数据库与java

以上就是存储信息到数据库版本的手机通讯录的内容了,感谢您的阅读~