通讯录管理系统:Java连接数据库(JDBC实现)

各大系统的基本内容基本相同,只不过是存储数据的名称不同

下面我以通讯录管理系统为例:

目录

1. 联系人信息初始化(database)

2. 查找联系人(database)

3. 添加/删除联系人(database)

4. 修改联系人信息(database)

5. 展示所有联系人信息(database)

6.退出程序


1. 联系人信息初始化(database)

首先要在数据库中实现用户数据的初始化,需要先在mysql中建立一个名为 personlist的数据库,并在该表中定义出列名:

create database personlist;

然后在personlist的数据库下建立表person

CREATE TABLE `person` (
                          `name` varchar(10) NOT NULL,
                          `电话号码` varchar(11) DEFAULT NULL,
                          `性别` varchar(2) DEFAULT NULL,
                          `邮箱` varchar(20) DEFAULT NULL,
                          CONSTRAINT `person_chk_1` CHECK ((length(`电话号码`) = 11)),
                          CONSTRAINT `person_chk_2` CHECK (((`性别` = _utf8mb3'男') or (`性别` = _utf8mb3'女')))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

当我们创建好表格后,便可以通过表格中的属性和sql语言对personlist表中的数据进行增删改查。

然后我们需要通过JDBC建立数据库和java之间的链接,从而通过Java来操作数据库中储存的数据:

import java.sql.*;
import java.util.Scanner;
public class PERSONS {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/personlist", "root", "abc123");

 这里用到了Java中反射的概念和DriverManage的驱动

getConnection后面首先是我们要使用的协议:jdbc,接着是我们的主机地址localhost,然后是我们数据库的端口号,默认是3306,最后是我们要连接的数据库名称,也就是我们刚刚建立的personlist。接着输入用户名和密码。

此时,我们已经建立了数据库与Java之间的连接。

2. 查找联系人(database)

在数据库中对联系人信息的处理十分简单,我们可以通过建立的连接,创建statement对象。并且在String数据类型中写入我们要执行的sql语句。statement当中的executeQuery()方法可以执行sql语句,返回出resultset 对象,通过resultset,我们可以对在数据库查找出的结果进行打印。

            

 Scanner sc = new Scanner(System.in);
            System.out.println("请输入您需要的功能:1.查询所有联系人  2.添加联系人  3.删除联系人  4.修改联系人  5.查询指定联系人   6.退出系统");
            int a = sc.nextInt();
            switch (a) {
                case 1:
                    String s = "SELECT * FROM person";
                    Statement ss = connection.createStatement();
                    ResultSet resultSet = ss.executeQuery(s);
                    lookup(resultSet);
                    resultSet.close();
                       break;

                                                                                                                                                                                                                                                                                                                                                                

3. 添加/删除联系人(database)

在对数据库中的数据进行操作时,大部分的操作基本相同,差距只在要运行的sql语句当中。

需要注意的是,statement中的executeQuery()只能处理select相关语句,对于增删改等操作,要使用statement中的executeUpdate()方法。

  case 2:
                    System.out.println("输入添加的联系人姓名:");
                    String name = sc.next();
                    System.out.println("输入联系人电话号码:");
                    String phone = sc.next();
                    System.out.println("输入联系人性别:");
                    String sex = sc.next();
                    System.out.println("输入联系人邮箱:");
                    String s2 = sc.next();


                    String sql = "INSERT INTO person VALUES (?,?,?,?)";
                    PreparedStatement preparedStatement = connection.prepareStatement(sql);
                    preparedStatement.setString(1, name);
                    preparedStatement.setString(2, phone);
                    preparedStatement.setString(3, sex);
                    preparedStatement.setString(4, s2);
                    int i = preparedStatement.executeUpdate();

                    if (i > 0)
                        System.out.println("添加成功");
                    preparedStatement.close();
                    break;

                case 3:
                    System.out.println("输入删除的联系人姓名:");
                    String name2 = sc.next();
                    String sql2 = "DELETE FROM person where name=?";
                    PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
                    preparedStatement2.setString(1, name2);
                    preparedStatement2.executeUpdate();
                    System.out.println("删除成功");
                    preparedStatement2.close();
                       break;

4. 修改联系人信息(database)

   在修改联系人信息时,具体实现步骤与之前相似,需要注意的是statement与preparestatement之间的区别:

1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程。

2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理。

prepareStatement可以替换变量

在SQL语句中可以包含?,可以用ps=conn.prepareStatement("select * from Cust where ID=?");

int sid=1001;

ps.setInt(1, sid);

rs = ps.executeQuery();

可以把?替换成变量。

而Statement只能用

int sid=1001;

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);

 case 4:
                    System.out.println("输入修改的联系人姓名:");
                    String name3 = sc.next();
                    System.out.println("输入修改后的联系人姓名:");
                    String name4 = sc.next();
                    String sql3 = "UPDATE person SET name=? WHERE name=?";
                    PreparedStatement preparedStatement3 = connection.prepareStatement(sql3);
                    preparedStatement3.setString(2, name3);
                    preparedStatement3.setString(1, name4);
                    preparedStatement3.executeUpdate();
                    System.out.println("修改成功");
                    preparedStatement3.close();
                         break;

这里我只对姓名进行了修改,要更改全部信息,只需要更改sql语句即可

5. 展示所有联系人信息(database)

此模块较为简单且与之前代码重复,这里不过多赘述。

6.退出程序

在两种方法中,都提供了退出程序的操作。

这里主要运用了System中的exit(),使程序终止。

下面列出系统的完整代码:

import java.sql.*;
import java.util.Scanner;
public class PERSONS {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/personlist", "root", "abc123");
        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您需要的功能:1.查询所有联系人  2.添加联系人  3.删除联系人  4.修改联系人  5.查询指定联系人   6.退出系统");
            int a = sc.nextInt();
            switch (a) {
                case 1:
                    String s = "SELECT * FROM person";
                    Statement ss = connection.createStatement();
                    ResultSet resultSet = ss.executeQuery(s);
                    lookup(resultSet);
                    resultSet.close();
break;
                case 2:
                    System.out.println("输入添加的联系人姓名:");
                    String name = sc.next();
                    System.out.println("输入联系人电话号码:");
                    String phone = sc.next();
                    System.out.println("输入联系人性别:");
                    String sex = sc.next();
                    System.out.println("输入联系人邮箱:");
                    String s2 = sc.next();


                    String sql = "INSERT INTO person VALUES (?,?,?,?)";
                    PreparedStatement preparedStatement = connection.prepareStatement(sql);
                    preparedStatement.setString(1, name);
                    preparedStatement.setString(2, phone);
                    preparedStatement.setString(3, sex);
                    preparedStatement.setString(4, s2);
                    int i = preparedStatement.executeUpdate();

                    if (i > 0)
                        System.out.println("添加成功");
                    preparedStatement.close();
                    break;
                case 3:
                    System.out.println("输入删除的联系人姓名:");
                    String name2 = sc.next();
                    String sql2 = "DELETE FROM person where name=?";
                    PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
                    preparedStatement2.setString(1, name2);
                    preparedStatement2.executeUpdate();
                    System.out.println("删除成功");
                    preparedStatement2.close();
                    break;
                case 4:
                    System.out.println("输入修改的联系人姓名:");
                    String name3 = sc.next();
                    System.out.println("输入修改后的联系人姓名:");
                    String name4 = sc.next();
                    String sql3 = "UPDATE person SET name=? WHERE name=?";
                    PreparedStatement preparedStatement3 = connection.prepareStatement(sql3);
                    preparedStatement3.setString(2, name3);
                    preparedStatement3.setString(1, name4);
                    preparedStatement3.executeUpdate();
                    System.out.println("修改成功");
                    preparedStatement3.close();
                    break;
                case 5:
                    System.out.println("输入查询的联系人姓名:");
                    String name5 = sc.next();
                    String sql5 = "SELECT * FROM person WHERE name=?";
                    PreparedStatement preparedStatement5 = connection.prepareStatement(sql5);
                    preparedStatement5.setString(1, name5);
                    ResultSet resultSet1 = preparedStatement5.executeQuery();
                    lookup(resultSet1);
                    System.out.println("查询成功");
                    preparedStatement5.close();
                    break;
                case 6:
                    connection.close();
                    return;
            }
        }
    }
    private static void lookup(ResultSet resultSet1) throws SQLException {
            while (resultSet1.next()) {
                String name6 = resultSet1.getString("name");
                String csdn = resultSet1.getString("电话号码");
                String sex6 = resultSet1.getString("性别");
                String email = resultSet1.getString("邮箱");
                System.out.println(name6 + csdn + sex6 + email);

            }

    }


}

  • 40
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值