今天课堂上正好讲到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();
}
}
效果图如下:
以上就是存储信息到数据库版本的手机通讯录的内容了,感谢您的阅读~