JAVA-MySQL再战关系型数据库

Java与Mysql基础应用

确保已有java jdk

确保已安装mysql

1.百度搜索 mysql-connector-java-8.0.21.jar 并下载

2.在项目中创建lib文件夹并放入 mysql-connector-java-8.0.21.jar

3.右键 mysql-connector-java-8.0.21.jar =>Build Path=>Add to Build Path

Java获取Mysql数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MainTest {

    public static void main(String[] args) {
        // 声明Connection对象
        Connection con;
        // 驱动程序名
        String driver = "com.mysql.cj.jdbc.Driver";
        // URL指向要访问的数据库名 test
        String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false";
        // MySQL配置时的用户名
        String user = "root";
        // MySQL配置时的密码
        String password = "********";
        // 遍历查询结果集

            try {
                // 加载驱动程序
                Class.forName(driver);//此驱动程序在4.0版本后可不在加载 不加载也可正常使用
                //静态代码块--->类加载,就执行 为防二次注册 推荐使用Class.forName加载驱动
                //DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());

                // 1.getConnection()方法,连接MySQL数据库!!
                con = DriverManager.getConnection(url, user, password);

                if (!con.isClosed())//判断是否成功连接
                   System.out.println("\n\t\t成功以 " + user + " 身份连接到数据库!!!");

                // 2.创建statement类对象,用来执行SQL语句!!
                Statement st = con.createStatement();

                // 要执行的SQL语句
                String sql = "select * from author";
                // 3.ResultSet类,用来存放获取的结果集!!
                ResultSet rs = st.executeQuery(sql);

                int ID = 0;
                String Name = null;
                String Sex = null;
                int Age = 0;

                System.out.println("\n\t\t执行结果如下所示:");
                System.out.println("\t\t-----------------------------------------------------------------");
                System.out.println("\t\t|\t" + "ID" + "\t" + "姓名" + "\t\t" + "性别" + "\t" + "年龄\t|");
                System.out.println("\t\t-----------------------------------------------------------------");

                while (rs.next()) {//4.遍历查询
                    // 获取 ID 这列数据
                    ID = rs.getInt("id");
                    // 获取 Name 这列数据
                    Name = rs.getString("author");
                    // 获取 Sex 这列数据
                    Sex = rs.getString("sex");
                    // 获取 Age 这列数据
                    Age = rs.getInt("age");
                    // 输出结果
                    System.out.println("\t\t|\t" + ID + "\t" + Name + "\t\t" + Sex + "\t" + Age + "\t|\t\t");
                }

                System.out.println("\t\t-----------------------------------------------------------------");
                rs.close();//5.释放资源
                st.close();
                con.close();
            }         
            catch (ClassNotFoundException e) {
                // 数据库驱动类异常处理
                System.out.println("Sorry,can`t find the Driver!");
                e.printStackTrace();
            }
            catch (SQLException e) {
                // 数据库连接失败异常处理
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                System.out.println("\t\t\t\t\t\t\t\t获取数据库数据完毕!!!");
            }
    }
}

运行结果:
成功以 root 身份连接到数据库!!!

执行结果如下所示:
-----------------------------------------------------------------
|    ID    姓名        性别    年龄    |
-----------------------------------------------------------------
|    1      yj         man      22        |        
|    2    迪丽热巴     girl     18        |        
|    3    阿巴阿巴     pig       1        |        
-----------------------------------------------------------------
                    获取数据库数据完毕!!!

优化释放资源 close

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUti {

    public static void main(String[] args) {
        // 声明Connection对象
        Connection con = null;
        // 驱动程序名
        String driver = "com.mysql.cj.jdbc.Driver";
        // URL指向要访问的数据库名 test
        String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false";
        // MySQL配置时的用户名
        String user = "root";
        // MySQL配置时的密码
        String password = "********";
        // 声明Statement对象 用来执行SQL语句
        Statement st = null;
        // 声明ResultSet对象 ResultSet类,用来存放获取的结果集!!
        ResultSet rs = null;
        // 遍历查询结果集
            try {
                // 加载驱动程序
                Class.forName(driver);

                // 1.getConnection()方法,连接MySQL数据库!!
                con = DriverManager.getConnection(url, user, password);

                if (!con.isClosed())//判断是否成功连接
                   System.out.println("\n\t\t成功以 " + user + " 身份连接到数据库!!!");

                // 2.创建statement类对象,用来执行SQL语句!!
                st = con.createStatement();

                // 要执行的SQL语句
                String sql = "select * from author";
                // 3.ResultSet类,用来存放获取的结果集!!
                rs = st.executeQuery(sql);

                int ID = 0;
                String Name = null;
                String Sex = null;
                int Age = 0;

                System.out.println("\n\t\t执行结果如下所示:");
                System.out.println("\t\t-----------------------------------------------------------------");
                System.out.println("\t\t|\t" + "ID" + "\t" + "姓名" + "\t\t" + "性别" + "\t" + "年龄\t|");
                System.out.println("\t\t-----------------------------------------------------------------");

                while (rs.next()) {//4.遍历查询
                    // 获取 ID 这列数据
                    ID = rs.getInt("id");
                    // 获取 Name 这列数据
                    Name = rs.getString("author");
                    // 获取 Sex 这列数据
                    Sex = rs.getString("sex");
                    // 获取 Age 这列数据
                    Age = rs.getInt("age");
                    // 输出结果
                    System.out.println("\t\t|\t" + ID + "\t" + Name + "\t\t" + Sex + "\t" + Age + "\t|\t\t");
                }

                System.out.println("\t\t-----------------------------------------------------------------");
            }         
            catch (ClassNotFoundException e) {
                // 数据库驱动类异常处理
                System.out.println("Sorry,can`t find the Driver!");
                e.printStackTrace();
            }
            catch (SQLException e) {
                // 数据库连接失败异常处理
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                //5.优化释放资源
                JDBCUtil.release(con, st, rs);
                System.out.println("\t\t\t\t\t\t\t\t获取数据库数据完毕!!!");
            }
    }
}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
 * 关闭的封装
*/
public class JDBCUtil {

    public static void release(Connection con,Statement st,ResultSet rs) {
        closeRs(rs);
        closeSt(st);
        closeConn(con);
    }

    private static void closeRs(ResultSet rs) {
        try {
            if(rs != null) {
                rs.close();
            }
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        finally {
            rs = null;
        }
    }
    private static void closeSt(Statement st) {
        try {
            if(st != null) {
                st.close();
            }
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        finally {
            st = null;
        }
    }
    private static void closeConn(Connection con) {
        try {
            if(con != null) {
                con.close();
            }
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        finally {
            con = null;
        }
    }
}

优化连接对象

import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

class JDBC{
    public static Connection getCon() {//获取连接对象
    // 声明Connection对象
    Connection con = null;
    // 驱动程序名
    String driver = "com.mysql.cj.jdbc.Driver";
    // URL指向要访问的数据库名 test
    String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false";
    // MySQL配置时的用户名
    String user = "root";
    // MySQL配置时的密码
    String password = "********";

    try {
        // 加载驱动程序
        Class.forName(driver);

        // 1.getConnection()方法,连接MySQL数据库!!
        con = DriverManager.getConnection(url, user, password);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return con;
 }
}


public class Demo1 {

    public static void main(String[] args) {
        // 声明Connection对象
        Connection con = null;
        // 声明Statement对象 用来执行SQL语句
        Statement st = null;
        // 声明ResultSet对象 ResultSet类,用来存放获取的结果集!!
        ResultSet rs = null;
        // 遍历查询结果集
            try {
                con = JDBC.getCon();

                if (!con.isClosed())//判断是否成功连接
                   System.out.println("\n\t\t成功连接到数据库!!!");

                // 2.创建statement类对象,用来执行SQL语句!!
                st = con.createStatement();

                // 要执行的SQL语句
                String sql = "select * from author";
                // 3.ResultSet类,用来存放获取的结果集!!
                rs = st.executeQuery(sql);

                int ID = 0;
                String Name = null;
                String Sex = null;
                int Age = 0;

                System.out.println("\n\t\t执行结果如下所示:");
                System.out.println("\t\t-----------------------------------------------------------------");
                System.out.println("\t\t|\t" + "ID" + "\t" + "姓名" + "\t\t" + "性别" + "\t" + "年龄\t|");
                System.out.println("\t\t-----------------------------------------------------------------");

                while (rs.next()) {//4.遍历查询
                    // 获取 ID 这列数据
                    ID = rs.getInt("id");
                    // 获取 Name 这列数据
                    Name = rs.getString("author");
                    // 获取 Sex 这列数据
                    Sex = rs.getString("sex");
                    // 获取 Age 这列数据
                    Age = rs.getInt("age");
                    // 输出结果
                    System.out.println("\t\t|\t" + ID + "\t" + Name + "\t\t" + Sex + "\t" + Age + "\t|\t\t");
                }

                System.out.println("\t\t-----------------------------------------------------------------");
            }         
            catch (SQLException e) {
                // 数据库连接失败异常处理
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                //5.释放资源
                JDBCUtil.release(con, st, rs);
                System.out.println("\t\t\t\t\t\t\t\t获取数据库数据完毕!!!");
            }
    }
}

配置文件 properties

1.在src下声明jdbc.properties文件

driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false
user=root
password=xxxxxxxx

2.在工具类中使用静态代码块读取属性

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import com.test.JDBCUtil;
/*
*使用配置文件 
*/
class JDBC{
    // 声明Connection对象
    static Connection con = null;
    // 驱动程序名
    static String driver = null;
    // URL指向要访问的数据库名 test
    static String url = null;
    // MySQL配置时的用户名
    static String user = null;
    // MySQL配置时的密码
    static String password = null;
    static {
        try {
            //创建一个属性配置对象
            Properties properties = new Properties();
            //InputStream is = new FileInputStream("jdbc.properties");//放项目根目录下则可使用 如放在src下则报错未找到
            //使用类加载器,读取src底下的资源文件
            InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            //导入输入流
            properties.load(is);
            //读取属性
            driver = properties.getProperty("driverClass");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static Connection getCon() {//获取连接对象

    try {
        // 加载驱动程序
        Class.forName(driver);

        // 1.getConnection()方法,连接MySQL数据库!!
        con = DriverManager.getConnection(url, user, password);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return con;
 }
}

public class Demo2 {

    public static void main(String[] args) {
        // 声明Connection对象
        Connection con = null;
        // 声明Statement对象 用来执行SQL语句
        Statement st = null;
        // 声明ResultSet对象 ResultSet类,用来存放获取的结果集!!
        ResultSet rs = null;
        // 遍历查询结果集
            try {
                con = JDBC.getCon();

                if (!con.isClosed())//判断是否成功连接
                   System.out.println("\n\t\t成功连接到数据库!!!");

                // 2.创建statement类对象,用来执行SQL语句!!
                st = con.createStatement();

                // 要执行的SQL语句
                String sql = "select * from author";
                // 3.ResultSet类,用来存放获取的结果集!!
                rs = st.executeQuery(sql);

                int ID = 0;
                String Name = null;
                String Sex = null;
                int Age = 0;

                System.out.println("\n\t\t执行结果如下所示:");
                System.out.println("\t\t-----------------------------------------------------------------");
                System.out.println("\t\t|\t" + "ID" + "\t" + "姓名" + "\t\t" + "性别" + "\t" + "年龄\t|");
                System.out.println("\t\t-----------------------------------------------------------------");

                while (rs.next()) {//4.遍历查询
                    // 获取 ID 这列数据
                    ID = rs.getInt("id");
                    // 获取 Name 这列数据
                    Name = rs.getString("author");
                    // 获取 Sex 这列数据
                    Sex = rs.getString("sex");
                    // 获取 Age 这列数据
                    Age = rs.getInt("age");
                    // 输出结果
                    System.out.println("\t\t|\t" + ID + "\t" + Name + "\t\t" + Sex + "\t" + Age + "\t|\t\t");
                }

                System.out.println("\t\t-----------------------------------------------------------------");
            }         
            catch (SQLException e) {
                // 数据库连接失败异常处理
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                //5.释放资源
                JDBCUtil.release(con, st, rs);
                System.out.println("\t\t\t\t\t\t\t\t获取数据库数据完毕!!!");
            }
    }
}

Mysql的CRUD

常见的MySQL语句命令
进入mysql 命令行:mysql -uroot -p;
查看所有数据库:show databases;
创建数据库:create database niu charset utf8;
删除数据库:drop database niu;
选择数据库:use databases;
查看所有表:show tables;
查看创建数据库的语句:show create database databasename;
查看创建表的语句:show create table tablename;
查看表结构:desc tablenmae;


库操作
创建数据库:create database shujukuba;
创建带字符集的数据库:create database mydb2 CHARACTER SET=utf8;
创建带校验的数据库:create database mydb3 CHARACTER SET=utf8 COLLATE utf8_general_ci;
显示数据库:show databases;
删除数据库:drop database shujukuba;
修改数据库编码:ALTER DATABASE shujukuba character set gb2312; 


表操作
创建数据库表(创建一个表名为:employee,该表中含有id、name、sex、birthday、job字段):
create table employee
(
    id int,
    name varchar(40),
    sex  char(4),
    birthday date,
    job  varchar(100),
);
表中增加image字段:alter table employee add image blob;
修改job值,使其长度为60(原长度为1000):alter table employee modify job varchar(60);
删除sex列:alter table employee drop sex;
表名改为user(原名employee):rename table employee to user;
修改表的字符集为utf-8:alter table user character set utf8;
列name修改为username:alter table user change column name username varchar(100);
删除表:drop table user;


增删改查实例
新建表employee:
create table employee
(
id int,
name varchar(40),
sex varchar(4),
birthday date,
entry_date date,
salary decimal(8,2),
resume text
);

插入数据:
insert into employee(id,name,sex,birthday,entry_date,salary,resume) values(1,'zhangsan','male','1993-03-04','2016-11-10','1000','i am a developer');
指定某些列插入数据:insert into employee(id) values(6);
插入汉字:insert into employee(id,name) values(6,'张三');

修改表数据:
将所有员工薪水修改为5000元:update employee set salary=5000;
将姓名为’zs’的员工薪水修改为3000元:update employee set salary = 3000 where name='zhangsan';
将姓名为’aaa’的员工薪水修改为4000元,job改为ccc:update employee set salary = 4000,job='ccc' where name='张三';
将wu的薪水在原有基础上增加1000元:update employee set salary = salary+1000 where name='张三';

删除表数据:
删除表中名称为“zs”的记录:delete from employee where job='ccc';
删除表中所有记录:delete from employee;
使用truncate删除表中记录:truncate table employee;

查询表数据:
查询表中所有学生的信息:select id,name,chinese,english,math from student;
查询表中所有学生的姓名和对应的英语成绩:select name,english from student;
查询姓名为wu的学生成绩:select * from student where name='张三';
查询英语成绩大于90分的同学:select * from student where english>'90';
查询英语分数在 80-90之间的同学:select * from student where english>=80 and english=<90;


常见MySQL字段含义
自增长:auto_increment
非空:not null
默认值:default
唯一:unique
指定字符集:charset
主键:primary key

使用单元测试,测试代码

1.定义一个类,TestXXXX,里面定义方法testXXX

2.添加junit的支持

右键工程 --- Build Path --- add Library --- Junit --- Junit4

3.在方法的上面加上注释(标记)

@Test
public void testQuery(){
    ...
}

4.光标选中方法名字,然后右键执行单元测试。或打开outline视图,然后选择方法右键执行

插入

//核心代码
    // 要执行的SQL语句
    String sql = "insert into user(name,sex,birthday,entry_date,salary,resume) values('xx','man','199x-xx-xx','2020-7-11','1000','i am a developer')";
    // ResultSet类,存放获取的结果集
    rs = st.executeQuery(sql);
    if(rs>0){
        System.out.println("添加成功");
    }else{
        System.out.println("添加失败");
    }

删除

//核心代码
    // 要执行的SQL语句
    String sql = "delete from user where id=2";
    // ResultSet类,存放获取的结果集
    rs = st.executeQuery(sql);
    if(rs>0){
        System.out.println("删除成功");
    }else{
        System.out.println("删除失败");
    }

更新

//核心代码
    // 要执行的SQL语句
    String sql = "update user set name='yj',birthday='1998-xx-xx' where id=1";
    // ResultSet类,存放获取的结果集
    rs = st.executeQuery(sql);
    if(rs>0){
        System.out.println("删除成功");
    }else{
        System.out.println("删除失败");
    }
//核心代码
    // 要执行的SQL语句
    String sql = "update user set name=?,birthday=? where id=?";

    PreparedStatement ps = con.prepareStatement(sql);
    ps.setString(1,"姓名");//从左到右数 1代表第一个?
    ps.setString(2,"生日");//传入什么类型 就set什么类型
    ps.setInt(3,1);
    rs = ps.executeQuery();

    if(rs>0){
        System.out.println("删除成功");
    }else{
        System.out.println("删除失败");
    }
//封装成通用方法
public static int executeDML(String sql,Object...objs){//sql为要执行的mysql语句

    try {
        ps = con.prepareStatement(sql);
        for(int i=0;i<objs.length;i++){
            ps.setObject(i+1,objs[i]);
        }
        return ps.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } 

    return -1;
}

完结封装

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import com.test.JDBCUtil;
class JDBC{
    // 声明Connection对象
    static Connection con = null;
    // 驱动程序名
    static String driver = null;
    // URL指向要访问的数据库名 test
    static String url = null;
    // MySQL配置时的用户名
    static String user = null;
    // MySQL配置时的密码
    static String password = null;
    static {
        try {
            //创建一个属性配置对象
            Properties properties = new Properties();
            //InputStream is = new FileInputStream("jdbc.properties");//放项目根目录下则可使用 如放在src下则报错未找到
            //使用类加载器,读取src底下的资源文件
            InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            //导入输入流
            properties.load(is);
            //读取属性
            driver = properties.getProperty("driverClass");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static Connection getCon() {//获取连接对象
    try {
        // 加载驱动程序
        Class.forName(driver);//可省略

        // 1.getConnection()方法,连接MySQL数据库!!
        con = DriverManager.getConnection(url, user, password);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return con;
 }
}


public class Demo3 {
    // 声明Connection对象
    static Connection con = null;
    // 声明Statement对象 用来执行SQL语句
    static Statement st = null;
    // 声明ResultSet对象 ResultSet类,用来存放获取的结果集!!
    static ResultSet rs = null;
    //声明PreparedStatement对象,用来针对?
    static PreparedStatement ps = null;

    public static int executeDML(String sql,Object...objs){//sql为要执行的mysql语句
       //增删改的封装方法
        try {
            ps = con.prepareStatement(sql);
            for(int i=0;i<objs.length;i++){
                ps.setObject(i+1,objs[i]);
            }
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } 

        return -1;
    }

    public static void main(String[] args) {

            try {
                con = JDBC.getCon();

                st = con.createStatement();

                // 要执行的SQL语句
                String sql = "update user set name=?,birthday=? where id=?";
                int i = executeDML(sql, "苍老师","2100-10-10",1);//此封装方法可以将增 删 改 合为一句

                if(i>0){
                    System.out.println("修改成功");
                }else{
                    System.out.println("修改失败");
                }
            }         
            catch (SQLException e) {
                // 数据库连接失败异常处理
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                //5.释放资源
                JDBCUtil.release(con, st, rs);
            }
    }
}
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:小林博客 www.vvso.cn小林博客 » JAVA-MySQL再战关系型数据库

分享到: 更多 (0)

评论 抢沙发

春节
快乐
切换注册

登录

忘记密码 ?

切换登录

注册