各大系统的基本内容基本相同,只不过是存储数据的名称不同
下面我以通讯录管理系统为例:
目录
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);
}
}
}