Java 使用控制台操作实现数据库的增删改查

使用控制台进行数据库增删改查操作,首先创建一个Java Bean类,实现基础数据的构造,Get,Set方法的实现,减少代码重复性。

基本属性为 学生学号 Id, 学生姓名 Name,学生性别 Sex, 学生年龄 Age

 1 public class Student {
 2     
 3     //学生类需要的属性,都是私有的
 4     private String Id;
 5     private String Name;
 6     private String Sex;
 7     private String Age;
 8     
 9     //Get Set 方法的实现
10     public String getId() {
11         return Id;
12     }
13     public void setId(String id) {
14         Id = id;
15     }
16     public String getName() {
17         return Name;
18     }
19     public void setName(String name) {
20         Name = name;
21     }
22     public String getSex() {
23         return Sex;
24     }
25     public void setSex(String sex) {
26         Sex = sex;
27     }
28     public String getAge() {
29         return Age;
30     }
31     public void setAge(String age) {
32         Age = age;
33     }
34     //构造方法
35     public Student(String id, String name, String sex, String age) {
36         super();
37         Id = id;
38         Name = name;
39         Sex = sex;
40         Age = age;
41     }
42     public Student(String string, String string2, String string3) {
43         // TODO Auto-generated constructor stub
44         this.Id=null;
45         this.Name=string;
46         this.Age=string3;
47         this.Sex=string2;
48     }
49     
50 
51 }

其次是Java Dao类,实现对数据库的连接,和通过sql语句实现增删改查。

getRowCount 获取行的数量
getColumnCount获取列的数量

//接口
Connection conn= null;
//加载 JDBC 桥的驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");


String url="jdbc:mysql://localhost:3306/user? serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false";
(user 处 为数据库名称)
String username = "root";
String password = "101032";


//使用sql 包中的 Connection 接口,通过DriverManger 类的静态方法getConnection()创建连接对象
conn=DriverManager.getConnection(url,username,password);

String sql="insert into students(Name,Sex,Age) values(?,?,?)";

PreparedStatement pstmt; (PreparedStatement类型执行 为动态sql 语句
如 插入 insert 更新 update 删除 delete)
execute(String sql) 执行sql语句 返回 ResultSet 对象
executeUpdate(String sql) 执行动态的sql语句


Statement 执行静态sql 语句
方法 execute(String sql)执行静态 查找 select 语句,可能返回多个结果集
executeQuery(String sql) 返回单个 ResultSet 对象

  1 /**
  2  * 数据库的连接 
  3  * 实现数据库的增删改查
  4  */
  5 import java.sql.Connection;
  6 import java.sql.DriverManager;
  7 import java.sql.PreparedStatement;
  8 import java.sql.ResultSet;
  9 import java.sql.SQLException;
 10 
 11 import com.Bean.Student;
 12 
 13 public class DAO {
 14     
 15     private static Connection getConn() {
 16         Connection conn =null;
 17         
 18         try {
 19             //加载 JDBC 桥的驱动程序
 20             Class.forName("com.mysql.cj.jdbc.Driver");
 21         } catch (ClassNotFoundException e) {
 22             // TODO Auto-generated catch block
 23             e.printStackTrace();
 24         } // 加载对应驱动
 25         
 26         //通过数据库的 url 访问数据库
 27         String url="jdbc:mysql://localhost:3306/user?serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false";
 28         //mysql 数据库的用户名
 29         String username = "root";
 30         //mysql 数据库密码
 31         String password = "101032";
 32         
 33         try {
 34             //使用sql 包中的 Connection 接口,通过DriverManger 类的静态方法getConnection()创建连接对象
 35             conn=DriverManager.getConnection(url,username,password);
 36         } catch (SQLException e) {
 37             // TODO Auto-generated catch block
 38             e.printStackTrace();
 39         }
 40         
 41         return conn;
 42     }
 43     
 44     //数据库查找操作
 45     public static int insert(Student student) {
 46         // Connection 接口代表与特定的数据库连接  并在连接上下文中执行sql 语句
 47         Connection conn = getConn();
 48         int i=0;
 49         // sql 语句的查找             Name,Sex,Age  插入的数据属性
 50         String sql="insert into students(Name,Sex,Age) values(?,?,?)";
 51         PreparedStatement pstmt;
 52         
 53         try {
 54             //执行 动态的sql 语句
 55             pstmt = conn.prepareStatement(sql);
 56             //将获取到的 Name,Sex,Age 的数据插入到指定的位置
 57             pstmt.setString(1, student.getName());
 58             pstmt.setString(2, student.getSex());
 59             pstmt.setString(3, student.getAge());
 60             i=pstmt.executeUpdate();
 61             pstmt.close();
 62             conn.close();
 63         } catch (SQLException e) {
 64             // TODO Auto-generated catch block
 65             e.printStackTrace();
 66         }        
 67         
 68         return i;
 69     }
 70     
 71     //数据库的修改
 72     public static int updata(Student student) {
 73         // Connection 接口代表与特定的数据库连接  并在连接上下文中执行sql 语句
 74         Connection conn= getConn();
 75         int i=0;
 76         // sql语句实现数据库修改  按名字修改年龄
 77         String sql =  "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
 78         // PreparedStatement 执行动态的sql语句 如增删改
 79         PreparedStatement pstmt;
 80         try {
 81             pstmt = conn.prepareStatement(sql);
 82                  //执行动态的sql语句  包含insert update delete 
 83             i = pstmt.executeUpdate();
 84             if(i>0) {
 85                 System.out.println("修改成功!");
 86             }else {
 87                 System.out.println("未找到需要修改的数据!");
 88             }
 89             System.out.println("restult:"+i);
 90             // 关闭
 91             pstmt.close();
 92             //关闭数据库连接
 93             conn.close();
 94         } catch (SQLException e) {
 95             // TODO Auto-generated catch block
 96             e.printStackTrace();
 97         }        
 98        return i;    
 99     }
100     //ResultSet 接口 暂存数据库的查询结果
101     
102     //数据库的查找
103     public static Integer getAll() {
104         // Connection 接口代表与特定的数据库连接  并在连接上下文中执行sql 语句
105         Connection conn= getConn();
106         String sql="select * from students";
107         //PreparedStatement类型执行动态的sql语句     Statement 执行静态语句
108         PreparedStatement pstmt;
109         
110         try {
111             //执行sql语句  
112             pstmt = conn.prepareStatement(sql);
113             // 执行给定的sql语句返回单个 ResultSet 对象
114             ResultSet rs = pstmt.executeQuery();
115             // getMetaData()  检索此 ResultSet对象列的数量,类型和属性。 getColumnCount() 返回ResultSet对象列的数量 
116             int col =rs.getMetaData().getColumnCount();
117             System.out.println("============================");
118             while(rs.next()) {
119                 for(int i=1;i<=col;i++) {
120                     //输出获取到的数据库数据
121                     System.out.print(rs.getString(i)+"\t");
122                     if((i==4)&&(rs.getString(i).length()<8)){
123                         System.out.println();
124                     }
125                 }
126                 //分行
127                 System.out.println();
128             }
129             System.out.println("======================");
130         } catch (SQLException e) {
131             // TODO Auto-generated catch block
132             e.printStackTrace();
133         }
134         return null;
135         
136     }
137     
138     //数据库的删除
139     public static int delete(String name) {
140         // Connection 接口代表与特定的数据库连接  并在连接上下文中执行sql 语句
141         Connection conn =getConn();
142         int i=0;
143         //修改类型的sql 语句实现
144         String sql="delete from students where Name ='"+ name+ "'";
145         PreparedStatement pstmt;
146         
147         try {
148             // 执行动态sql语句
149             pstmt = conn.prepareStatement(sql);
150             // executeUpdate() 指示受影响的行数
151             i = pstmt.executeUpdate();
152             if(i>0) {
153             System.out.println("删除成功!");
154             }else {
155                 System.out.println("未找到需要删除数据!");
156             }
157             System.out.println("result:"+i);
158             pstmt.close();
159             conn.close();
160         } catch (SQLException e) {
161             // TODO Auto-generated catch block
162             e.printStackTrace();
163         }
164         
165         return i;
166     }
167 
168 }

Sevrelt层 实现数据库的操作,给出界面

在控制台输入数据时:出现输入乱码的问题,原因:输入数据是为汉语输入法,产生乱码,所以在输入数据的时候要注意切换成英文输入法。

 1 package com.JDBC;
 2 
 3 import java.util.Scanner;
 4 
 5 import com.Bean.Student;
 6 import com.Dao.DAO;
 7 
 8 public class JDBC {
 9     @SuppressWarnings("resource")
10     public static void main(String[] args) {
11         String name=null;
12         String sex=null;
13         String age=null;
14         Scanner sc=null;
15         do {
16             //界面
17             System.out.println("  ~~~~~~~~~~~~~~欢迎使用数据库~~~~~~~~~~~~~~   ");
18             System.out.println("请选择你需要执行的操作的编号:");
19             System.out.println("1.添加数据  2.删除数据 3.修改数据 4.查询数据");
20             System.out.println("~~~~~~~~~~~~~~请输入您的操作~~~~~~~~~~~~~~");
21             sc=new Scanner(System.in);
22             int c=sc.nextInt();
23             switch(c) {
24             case 1:
25                 //添加数据
26                 System.out.println("添加数据:");
27                 System.out.println("请输入学生 姓名,性别,年龄:");
28                 sc=new Scanner(System.in);
29                 name=sc.next();
30                 sex=sc.next();
31                 age=sc.next();
32                 DAO.insert(new Student(name,sex,age));
33                 DAO.getAll();
34                 break;
35             case 2:
36                 //删除数据
37                 System.out.println("删除数据:");
38                 System.out.println("请输入学生 姓名:");
39                 sc=new Scanner(System.in);
40                 name=sc.next();
41                 DAO.delete(name);
42                 DAO.getAll();
43                 break;
44             case 3:
45                 //修改数据
46                 System.out.println("修改数据:");
47                 System.out.println("请输入需要修改的同学的姓名 和 需要修改的年龄:");
48                 sc=new Scanner(System.in);
49                 name=sc.next();
50                 age=sc.next();
51                 DAO.getAll();
52                 DAO.updata(new Student(name,"",age));
53                 break;
54             case 4:
55                 //查询数据
56                 System.out.println("查询数据:");
57                 DAO.getAll();
58                 break;
59                 default:
60                     System.out.println("错误!");
61             }
62         }while(true);
63     }
64 
65 }

 使用Navicat Premium 的可视化数据库展示如下:

猜你喜欢

转载自www.cnblogs.com/cxy0210/p/11831599.html
今日推荐