MySQL数据库的创建
1.建立数据库
create database mydb;
2.建立所需要的表格并且插入准备好的数据
//设置数据视图
use mydb;
//判断表格是否存在存在即删除表格
drop table if exists student;
//创建表格
create table student(
stuId int primary key auto_increment,
stuName varchar(20),
stuSex varchar(2),
stuAge int,
stuAddr varchar(50)
);
//插入测试数据
INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values('张三','男',20,'河南');
INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values('小美','女',19,'河南');
INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values('小兰','女',18,'河南');
INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values('小红','女',21,'河南');
//查询表格
SELECT * from student
检查数据是否完好
java的创建实体类(类的首字母大写,IDEA自动构造代码快捷键: alt + insert )
package com.hp.bean;
//实体类属性
public class Student {
private int stuId;
private String stuName;
private String stuSex;
private int stuAge;
private String stuAddr;
//类的无参有参构造方法
public Student() {
this.stuId = stuId;
this.stuName = stuName;
this.stuSex = stuSex;
this.stuAge = stuAge;
this.stuAddr = stuAddr;
}
//属性的getter和setter方法
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuSex() {
return stuSex;
}
public void setStuSex(String stuSex) {
this.stuSex = stuSex;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public String getStuddr() {
return stuAddr;
}
public void setStuddr(String studdr) {
this.stuAddr = studdr;
}
//打印
@Override
public String toString() {
return "Student{" +
"stuId=" + stuId +
", stuName='" + stuName + '\'' +
", stuSex='" + stuSex + '\'' +
", stuAge=" + stuAge +
", studdr='" + stuAddr + '\'' +
'}';
}
}
4.0写入JDBC操作类
junit的用法补充来帮助写JDBC
package com.text;
import com.hp.bean.Student;
import org.junit.Test;
import java.sql.*;
import static java.lang.Class.forName;
public class studentTest {
// JDBC连接数据库,需要配置四大参数,同时需要导入数据库对应的驱动包
// junit用法:1.方法要定义为无参无返回值的。且测试类的名字不能是Test
2.在方法上使用 @Test 这个注解
3.光标放在后面,然后使用 alt + 回车 进行自动导包,选择---Add 'JUnit4' to
classpath
4.这个方法就不需要依赖main方法就可以直接执行
private String driver="com.mysql.cj.jdbc.Driver";
private String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimezone=UTC";
private String username="root";
private String password="root";
//密码的格式取决于自己定义,自己设定的密码
(1)查询操作
//查询操作
@Test
public void testSelectAll() throws Exception {
//JDBC操作数据库的步骤
//1.首先在项目根目录创建lib文件夹,放入jdbc驱动程序,然后Add As Library
//2.加载数据库驱动
forName(driver);
//3.使用驱动管理器来获得连接---获得一个数据库连接对象Connection
Connection con = DriverManager.getConnection(url, username, password);//生成方法调用返回值的快捷键:ctrl + alt + v
//4.使用Connection创建PreparedStatement预处理对象---PreparedStatement对象可以
执行带 ? 的sql语句
String sql="select * from student";
PreparedStatement pstm = con.prepareStatement(sql);
//5.使用PreparedStatement对象执行SQL语句,获得ResultSet结果集对象
ResultSet rs = pstm.executeQuery();
//6.操作判断--增删改返回的是影响的行数(返回值是int),只有查询获得结果集(返回值
ResultSet)
//6.操作判断--增删改返回的是影响的行数(返回值是int),只有查询获得结果集(返回值
ResultSet)
//让结果集的游标不断的往下移动,直到没有数据的时候结束循环
List studentList=new ArrayList<>(); //定义集合(大的容器),用来装
Student对象(小容器)
while (rs.next()){
//使用循环根据字段名称获取表中的数据
int stuId = rs.getInt("stuId");
String stuName = rs.getString("stuName");
String stuSex = rs.getString("stuSex");
System.out.println(stuId+"---"+stuName+"---"+stuSex);
}
//释放资源
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}
查询结果如下
添加
//添加操作
@Test
public void test() throws Exception{
//1.导入包
//2.加载驱动
forName(driver);
//3..通过驱动管理器获得数据库的连接对象
Connection connection = DriverManager.getConnection(url, username, password);
//4.通过连接对象,获取SQ预处理对象
String sql="insert into student(stuName,stuSex,stuAge,stuAddr)values(?,?,?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 4.1 实际开发是前端页面传递过来的数据,此处我们直接模拟一组数据
Student student = new Student();
student.setStuName("李华");
student.setStuSex("女");
student.setStuAge(18);
student.setStuddr("南阳");
//5.1传递参数
preparedStatement.setObject(1,student.getStuName());
preparedStatement.setObject(2,student.getStuSex());
preparedStatement.setObject(3,student.getStuAge());
preparedStatement.setObject(4,student.getStuddr());
//5.2执行更新(增删改都叫做数据库的更新,更新返回的是影响的行数)
int n = preparedStatement.executeUpdate();
//6判断影响的行数 n > 0 表示插入成功,否则插入失败
if(n>0){
System.out.println("插入数据成功");
}else{
System.out.println("插入数据失败");
}
//7释放资源
if(preparedStatement!=null){
preparedStatement.close();
}
if(connection!=null){
connection.close();
}
}
删除
//删除操作
@Test
public void testDel() throws Exception {
// 1.
// 2.通过反射加载驱动程序
Class.forName(driver);
//3.通过驱动管理器获得数据库的连接对象
Connection connection = DriverManager.getConnection(url,username,password);
//4.通过数据库连接对象获取sql预处理对象
String sql="delete from student where stuId=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//5.1预处理对象的sql语句有 ? ,所以需要传参
int stuId=3;
preparedStatement.setObject(1,stuId);
//5.2执行更新操作(增删改都是更新操作,返回的结果是影响的行数)
int n=preparedStatement.executeUpdate();
// 6判断影响的行数 n>0 表示删除成功,否则删除失败
if(n>0){
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
//7释放资源
if(preparedStatement!=null){
preparedStatement.close();
}
if(connection!=null){
connection.close();
}
}
修改
// 修改操作
@Test
public void textli() throws Exception {
//1
// 2.加载驱动
Class.forName(driver);
//3.获得数据
Connection connection = DriverManager.getConnection(url, username, password);
//4连接对象那
String sql="update student set stuSex=? where stuName=? ";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1,"女");
preparedStatement.setObject(2,"蔡徐坤");
int n= preparedStatement.executeUpdate();
if(n>0){
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
if (preparedStatement!=null){
preparedStatement.close();
}
if (connection!=null){
connection.close();
}
}
}