• 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)+"	");
    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 的可视化数据库展示如下:

  • 相关阅读:
    关于AE大数据点文件读取生成SHP文件时使用IFeatureBuffer快速提高读取效率
    随手写了个opengl的demo
    render Target sample in UI
    堆排序
    PAT 1040. Longest Symmetric String
    为什么要学习机器学习?如何学习
    输出一个字符串的全排列
    关于Logistic Regression的疑问
    PAT上机考试模板
    如何设置tomcat的默认访问路径
  • 原文地址:https://www.cnblogs.com/cxy0210/p/11831599.html
Copyright © 2020-2023  润新知