使用控制台进行数据库增删改查操作,首先创建一个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 的可视化数据库展示如下:
原文:https://www.cnblogs.com/cxy0210/p/11831599.html