七、JDBC快速入门
1、jdbc的概念
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。通俗易懂说:jdbc就是java操作数据库
jdbc的本质就是:java官方提供的一套规范接口,用于帮助程序员开发者操作不同的关系型数据库(mysql/Oracle/SQLServer)
2、jdbc快速入门
1.创建一张表
CREATE TABLE `mayikt_users` (
`id` int NOT NULL,
`name` varchar(255) DEFAULT NULL,
`pwd` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
INSERT INTO `mayikt`.`mayikt_users` (`id`, `name`, `pwd`) VALUES ('1', 'mayikt', '123');
INSERT INTO `mayikt`.`mayikt_users` (`id`, `name`, `pwd`) VALUES ('2', 'meite', '666');
2.在java官方只是提供JDBC规范的接口,如果需要连接到具体的数据库 例如
mysql ,我们就需要导入mysql的依赖jar包,具体实现是有不同的数据库
产商实现的。
1.导入mysql驱动jar包;
2.注册驱动 javase 反射机制Class.forName()
3.获取数据库连接
4.获取执行者对象
5.执行sql语句并获取返回结果
6.对结果进行处理
7.释放jdbc资源
jdbc驱动依赖下载:有道云笔记
编写代码
public class JdbcDemo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.导入jar包
// 2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 3.获取执行者
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC",
"root", "root");
// 4.获取执行者对象
Statement statement = connection.createStatement();
// 5.执行sql语句获取返回结果
ResultSet resultSet = statement.executeQuery("select * from mayikt_users");
// 6.对返回结果进行处理
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + "," + resultSet.getString("name") + "," +
resultSet.getString("pwd"));
}
// 7.释放资源
connection.close();
statement.close();
}
}
启动该程序报错
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
需要在jdbc连接后面加上该参数 jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC
在Java中使用JDBC操作数据库,该数据库版本为8.0.15属于高版本(如果是低版本的话,通常是不会出现这些问题的)
import java.sql.*;
public class JdbcDemo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.导入jar包
// 2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 3.获取执行者
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC",
"root", "root");
// 4.获取执行者对象
Statement statement = connection.createStatement();
// 5.执行sql语句获取返回结果
ResultSet resultSet = statement.executeQuery("select * from mayikt_users");
// 6.对返回结果进行处理
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + "," + resultSet.getString("name") + "," +
resultSet.getString("pwd"));
}
// 7.释放资源
connection.close();
statement.close();
}
}
常见问题
1.Exception in thread “main” java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
原因是没有引入mysql 驱动jar包
2. No suitable driver found for jdbc:mysql//127.0.0.1:3306/mayikt1?serverTimezone=UTC
原因jdbc地址填写是错误的
3. Access denied for user ‘root1’@’localhost’ (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.jav
mysql 连接账户和密码 错误
4. Table ‘mayikt.mayikt_users11’ doesn’t exist 在我们的mayikt数据库
是没有mayikt_users11
3、jdbcAPI详解
DriverManager 驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中后续的处理就可以对这个列表进行操作.
注册驱动方式
1.DriverManager.registerDriver();
2.写代码实现
Class.forName(“com.mysql.jdbc.Driver”);
3.com.mysql.jdbc.Driver类中存在静态代码快
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
4.开发者是不需要调用DriverManager.registerDriver();方法,因为我们在使用class.forName 会加载到我们的
com.mysql.jdbc.Driver 通过Driver静态代码快 注册我们的Driver驱动。
5.mysql5之后,在jar包中存在一个java.sql.Driver配置文件,文件指定加载com.mysql.cj.jdbc.Driver通过SPI机制实现。
6.获取连接Connection 连接对象
Connection connection = DriverManager.getConnection(“数据库连接地址”,
“用户名称”, “用户密码”);
参数:指定连接的路径 语法:jdbc://mysql://ip地址:端口号码/数据库名称
user:用户名称
pwd:用户的密码
ResultSet结果集对象
1.判断结果集是否有数据: boolean next();
1.1.有数据返回true 并将索引向下移动一行
1.2.没有数据返回false
2.获取结果集中的数据:xxx.getxx(列名称) 注意与 数据库数据类型需要对应
4、jdbc案例
需求讨论与分层架构
使用jdbc技术访问到mysql数据库 对 student学生数据做增删改查操作
1.初始化数据库
CREATE TABLE `mayikt_student` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`age` tinyint DEFAULT '0',
`address` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3;
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('1', 'mayikt', '18', '武汉市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('2', 'meite', '23', '上海市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('3', '李思', '12', '孝感市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('4', '刘流', '27', '武汉市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('5', '王麻子', '12', '孝感市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('6', 'KKK', '11', '成都');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('7', 'xiaokey', '22', '武汉市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('8', '999', '33', '孝感市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('9', 'wang', '55', '武汉市');
INSERT INTO `mayikt`.`mayikt_student` (`id`, `name`, `age`, `address`) VALUES ('10', 'lisi', '38', '孝感市');
2.定义实体类层
public class Student {
private Long id;
private String name;
private Integer age;
private String address;
}
数据库中的数据类型需要与db对应 实体类中的 基本数据类型 建议用包装类 默认是为null
分层架构
com.mayikt.entity—实体类—-创建实体类与数据库表结构字段一一对应的
com.mayikt.dao—-数据库访问层—-db打交道
com.mayikt.serivce—业务逻辑层
com.mayikt.controller—控制层
如果在db数据类型是为varchar 对应 string
如果在db数据类型是为int对应 Integer
需求1:查询所有学生信息
需求2:根据id查询学生信息
需求3:新增学生信息 —-insert into
需求4:根据主键id修改学生信息
需求5:根据主键id删除学生信息 企业实际开发中 不会真正物理删除数据 而是隐藏update的形式。—javaweb开发。
1.导入mysql驱动jar包;
2.注册驱动 javase 反射机制Class.forName()
3.获取数据库连接
4.获取执行者对象
5.执行sql语句并获取返回结果
6.对结果进行处理
7.释放jdbc资源
executeUpdate—-执行insert 、update、delete sql语句
返回影响行数
相关代码
实体类层
public class StudentEntity {
/**
* 学生对象
* 在java中定义数据库实体类层
* 不建议使用基本数据类型 使用包装类
*/
/**
* 学生的id
*/
private Long id; // 默认值null
/**
* 学生姓名
*/
private String name;
/**
* 学生年龄
*/
private Integer age;
/**
* 学生的地址
*/
private String address;
public StudentEntity(Long id, String name, Integer age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public StudentEntity( String name, Integer age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "StudentEntity{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
Dao层
package com.mayikt.dao;
import com.mayikt.entity.StudentEntity;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class StudentDao {
/**
* 学生对象数据库访问层
*/
/**
* 查询所有的学生信息
*
* @return
*/
public ArrayList<StudentEntity> allStudent() {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC", "root", "root");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果
resultSet = statement.executeQuery("select * from mayikt_student");
ArrayList<StudentEntity> studentEntities = new ArrayList<>();
//6. 对结果进行处理
while (resultSet.next()) { // 如果false结束该循环
// 获取该行数据的第一列 id
Long id = resultSet.getLong("id");
// 获取该行数据的第二列 name
String name = resultSet.getString("name");
// 获取该行数据的第三列 age
Integer age = resultSet.getInt("age");
// 获取该行数据的第四列 address
String address = resultSet.getString("address");
// 将db中查询到数据封装成java学生对象
StudentEntity studentEntity = new StudentEntity(id, name, age, address);
// 将该对象存入到集合中
studentEntities.add(studentEntity);
}
return studentEntities;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
// 7. 释放jdbc资源
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 根据学生id 查询学生信息 学生的id
*
* @return
*/
public StudentEntity getByIdStudent(Long stuId) {
/**
* 判断用户是否传递学生id的值
*/
if (stuId == null) {
return null;
}
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC", "root", "root");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 自己拼接 查询sql语句
resultSet = statement.executeQuery("select * from mayikt_student where id=" + stuId);
boolean result = resultSet.next(); // 查询不到数据 false
// 判断如果查询不到数据 则不会取值
if (!result) {
return null;
}
//6. 对结果进行处理
// 获取该行数据的第一列 id
Long id = resultSet.getLong("id");
// 获取该行数据的第二列 name
String name = resultSet.getString("name");
// 获取该行数据的第三列 age
Integer age = resultSet.getInt("age");
// 获取该行数据的第四列 address
String address = resultSet.getString("address");
// 将db中查询到数据封装成java学生对象
StudentEntity studentEntity = new StudentEntity(id, name, age, address);
return studentEntity;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
// 7. 释放jdbc资源
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 插入我们的学生
*
* @param stu
* @return
*/
public int insertStudent(StudentEntity stu) {
Connection connection = null;
Statement statement = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC", "root", "root");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 executeUpdate执行 insert sql语句
String insertStudentSql = "INSERT INTO mayikt_student values(null,'" + stu.getName() + "'," + stu.getAge() + ",'" + stu.getAddress() + "')";
System.out.println("insertStudentSql:" + insertStudentSql);
// log输出
int result = statement.executeUpdate(insertStudentSql);
// 执行该sql语句 影响行数
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
// 7. 释放jdbc资源
try {
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 修改学生的信息
*
* @param stu
* @return
*/
public int updateStudent(StudentEntity stu) {
Connection connection = null;
Statement statement = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC", "root", "root");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 executeUpdate执行 update sql语句
String updateStudentSql = "update mayikt_student set name='" + stu.getName() + "' ,age=" + stu.getAge() + "," +
"address='" + stu.getAddress() + "' where id=" + stu.getId() + "";
// log输出
System.out.println("updateStudentSql:" + updateStudentSql);
int result = statement.executeUpdate(updateStudentSql);
// 执行该sql语句 影响行数
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
// 7. 释放jdbc资源
try {
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 根据主键id删除学生信息
*
* @param id
* @return
*/
public int delStudent(Long id) {
// 判断id是否为null
if (id == null) {
return 0;
}
Connection connection = null;
Statement statement = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC", "root", "root");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 executeUpdate执行 delete sql语句
String delSQL = "delete from mayikt_student where id=" + id;
System.out.println("delSql:" + delSQL);
// log输出
int result = statement.executeUpdate(delSQL);
// 执行该sql语句 影响行数
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
// 7. 释放jdbc资源
try {
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Service
package com.mayikt.serivce;
import com.mayikt.dao.StudentDao;
import com.mayikt.entity.StudentEntity;
import java.util.ArrayList;
public class StudentService {
/**
* new 学生对象dao层
*/
private StudentDao studentDao = new StudentDao();
/**
* 查询所有的学生信息
*
* @return
*/
public ArrayList<StudentEntity> allStudent() {
// 在通过业务逻辑层调用dao层代码
ArrayList<StudentEntity> studententities = studentDao.allStudent();
return studententities;
}
public StudentEntity getByIdStudent(Long stuId) {
return studentDao.getByIdStudent(stuId);
}
public int insertStudent(StudentEntity stu) {
return studentDao.insertStudent(stu);
}
public int updateStudent(StudentEntity stu) {
return studentDao.updateStudent(stu);
}
public int delStudent(Long id) {
return studentDao.delStudent(id);
}
}
jdbc工具类封装
1.编写配置文件
在src目录下创建config.properties配置文件
driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC
user=root
password=root
2.编写jdbc工具 获取连接 释放连接
类名称.方法名称—
package com.mayikt.utils;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class MayiktJdbcUtils {
/**
* 1.需要将我们的构造方法私有化 ---工具类 不需要 new出来 是通过类名称.方法名称访问
*/
private MayiktJdbcUtils() {
}
/**
* 2.定义工具类 需要 声明 变量
*/
private static String driverClass;
private static String url;
private static String user;
private static String password;
/**
*3.使用静态代码快 来给我们声明好 jdbc变量赋值(读取config.properties)
*/
static {
try {
// 1.读取config.properties IO 路径 相对路径
InputStream resourceAsStream = MayiktJdbcUtils.class.getClassLoader().
getResourceAsStream("config.properties");
// 2.赋值给我们声明好的变量
Properties properties = new Properties();
properties.load(resourceAsStream);
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
// 3.注册驱动类
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 4.封装连接方法
*/
public static Connection getConnection() {
try {
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 5.封装释放连接方法 (重载)
*/
public static void closeConnection(ResultSet resultSet, Statement statement, Connection connection) {
// 1.查询 释放连接 resultSet statement connection
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
// 2.增删改 释放连接 statement connection
}
/**
* 增删改---释放jdbc资源
*
* @param statement
* @param connection
*/
public static void closeConnection(Statement statement, Connection connection) {
// 1.查询 释放连接 resultSet statement connection
closeConnection(null, statement, connection);
}
}
封装主菜单系统
package com.mayikt.test;
import com.mayikt.entity.StudentEntity;
import com.mayikt.serivce.StudentService;
import java.util.ArrayList;
import java.util.Scanner;
public class IndexTest {
private static StudentService studentService = new StudentService();
/**
* new对象存放 堆内存
*
* @param args
*/
public static void main(String[] args) {
mainMenu();
}
/**
* 1.需要定义主菜单程序的入口
*/
public static void mainMenu() {
while (true) {
// 1.提示语
System.out.println("欢迎来到学生管理系统");
System.out.println("1.查询所有的学生信息");
System.out.println("2.根据学生id查询学生信息");
System.out.println("3.新增学生信息");
System.out.println("4.根据学生id修改学生信息");
System.out.println("5.根据学生id删除学生信息");
System.out.println("请选择对应序号:");
// 2.接受用户输入的序号 int
Scanner scanner = new Scanner(System.in);
int result = scanner.nextInt();
// 3.在根据用户选择的序号 判断
switch (result) {
case 1:
showAllStudent();
break;//直接让我们while退出了
case 2:
findByIdStudent();
break;
case 3:
insertStudent();
break;
case 4:
updateIdStudent();
break;
case 5:
delIdStudent();
break;
}
}
}
/**
* 查询所有学生信息
*/
public static void showAllStudent() {
System.out.println("查询到的所有学生信息");
ArrayList<StudentEntity> studentEntities = studentService.allStudent();
for (StudentEntity stu : studentEntities) {
System.out.println(stu);
}
}
/**
* 根据学生id查询学生信息
*/
public static void findByIdStudent() {
System.out.println("请输入学生的id:");
Scanner scanner = new Scanner(System.in);
Long stuId = scanner.nextLong();
// 根据用户输入的学生id查询学生信息
// 根据用户输入的学生id查询学生信息 查询不到 查询得到
StudentEntity student = studentService.getByIdStudent(stuId);
if (student == null) {
System.out.println("该学生id" + student + ",不存在的");
return;// 后面代码不会继续执行
}
// 查询到了学生信息
System.out.println("学生信息:" + student);
}
/**
* 根据学生id删除学生信息
*/
public static void delIdStudent() {
System.out.println("请输入学生的id:");
Scanner scanner = new Scanner(System.in);
Long stuId = scanner.nextLong();
int result = studentService.delStudent(stuId);
if (result > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
}
/**
* 插入我们的学生信息
*/
public static void insertStudent() {
Scanner scanner = new Scanner(System.in);
// System.out.println("请输入学生的id:");
// Long stuId = scanner.nextLong();
System.out.println("请输入学生的名称:");
String name = scanner.nextLine();
System.out.println("请输入学生的年龄:");
int age = scanner.nextInt();
scanner.nextLine(); // 跳过
System.out.println("请输入学生的地址:");
String address = scanner.nextLine();
StudentEntity studentEntity = new StudentEntity(name, age, address);
int result = studentService.insertStudent(studentEntity);
if (result > 0) {
System.out.println("插入学生信息成功");
} else {
System.out.println("插入学生信息失败");
}
}
public static void updateIdStudent() {
// 需要先根据学生的id查询该学生信息 如果查询得到的情况下 才会修改学生信息
// 查询不到的情况下 就不会修改学生信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生的id:");
Long stuId = scanner.nextLong();
// 根据学生id查询学生信息
StudentEntity student = studentService.getByIdStudent(stuId);
if (student == null) {
System.out.println("没有查询该学生的id对应学生信息");
return;
}
scanner.nextLine();
System.out.println("请输入学生的名称:");
String name = scanner.nextLine();
System.out.println("请输入学生的年龄:");
int age = scanner.nextInt();
scanner.nextLine(); // 跳过
System.out.println("请输入学生的地址:");
String address = scanner.nextLine();
// 封装接受的参数 变成学生对象
StudentEntity studentEntity = new StudentEntity(stuId, name, age, address);
int result = studentService.updateStudent(studentEntity);
if (result > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
}
}
报错:
Exception in thread “main” java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.mayikt.test.IndexTest.mainMenu(IndexTest.java:43)
at com.mayikt.test.IndexTest.main(IndexTest.java:25)
原因:
in.nextLine();不能放在in.nextInt();代码段后面
他不是跳过你了,而是他已经有内容了,内容就是‘\n’。因为nextInt();接收一个整型字符,不会读取\n,nextline();读入一行文本,会读入”\n”字符
解决办法in.nextInt() 中间(in.nextLine();) in.nextLine();
未完,下一章我们继续讲解~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111839.html