【数据库】java连接数据库,进行数据查询,获取查询数据,数据操作【java】

package ShuJuKu;

import java.sql.*;
import java.util.HashMap;

public class sjk_cz {
    
    
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
    
    
        HashMap<String, Object> map = new HashMap<>();
        // 1. 加载驱动
		// 2:连接
		// 面试:本机的几种表示形式
		// a:localhost	 b:127.0.0.1	 c: ip地址: 192. 168.108.1 	d:讣算机名
		// mysql :3306	sqlsever :1433	orcl: 1521	sglite: 直接链接--文件

        Class.forName("com.mysql.cj.jdbc.Driver");  // 固定写法,加载驱动

        // 2. 用户信息和url
        String url = "jdbc:mysql://339.196.102.504:3306/hx?serverTimezone=UTC&useSSL" +
                "=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2b8";
        String user = "root";
        String  psw = "123456";

        // 3. 连接成功,返回值是--数据库对象(connection) 代表数据库 是一种对象
        Connection connection = DriverManager.getConnection(url, user, password);

        // 4. 执行sql对象
        Statement statement = connection.createStatement();

        // 5. 指向sql的对象去执行sql

        // Statement 方法解析
        // 1)executeQuery
        // public abstract ResultSet executeQuery(String sql) throws SQLException
        // 参数:静态的SQL SELECT(查询)语句
        // 返回值:包含有查询产生的数据的ResultSet;永远不为null
        String sql = "select * from user where phone = '15199235042'";
        ResultSet resultSet = statement.executeQuery(sql);

        // 这里count是:搜索出了多少条数据
        int count = resultSet.getMetaData().getColumnCount();  // -->3

        // resultSet.next() 的值是:查询成功为true,调用一次后其值立马变为false;查询失败为false;
        while (resultSet.next()) {
    
    
            // (1) 查询出来后,直接获取查询结果(一个一个单独获取)
            //  field 标识的字段名【键】--> phone (获取的是【键】)
            String field = resultSet.getMetaData().getColumnName(1);

            // field1 标识的值【值】--> 15199235032 (获取的是【值】)
            String field1 = (String) resultSet.getObject(field);
            // String phone = (String) resultSet.getObject("phone"); 键也可以不用获取,自己直接给即可

            // (2) 查询出来后,直接获取查询结果(一次性获取全部查询结果)
            // 注意下标是从1开始的
            for (int i = 1; i <= count; i++) {
    
    

                //  field 标识的字段名【键】--> phone (获取的是全部的【键】)
                String field2 = resultSet.getMetaData().getColumnName(i);

                // field1 标识的值【值】--> 15199235032 (获取的是全部的【值】)
                String field3 = (String) resultSet.getObject(field2);
                // String phone = (String) resultSet.getObject("phone"); 键也可以不用获取,自己直接给即可

                // (3) 查询出来后,放进map集合中 (一次性全部放进去)
                map.put(field2, resultSet.getString(field2));

                // (4) {phone=15199235032} 根据键,筛选数据库里面查到的值,并把查到的值赋值给对应的键
                map.put("phone", resultSet.getString("phone"));

                // 根据键,获取值
                String phone1 = (String) map.get("phone");
                System.out.println(phone1);
            }
        }

        // 2)executeUpdate
        // public abstract int executeUpdate(String sql) throws SQLException
        // 参数:一条 SQL INSERT(插入)、UPDATE(更新) 或 DELETE(删除) 语句或没有返回值的 SQL 语句
        // 返回值:如果执行 INSERT、UPDATE 或 DELETE 语句返回行数或者为执行没有返回值的语句返回 0
        String sql = "INSERT INTO user(phone, pwd, mibao, jijiu) VALUES('123', '123', '123', '123');";
        int number = statement.executeUpdate(sql); // number = 1


        // 6. 释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }

}

增删查改sql语句

-- 创建数据库
CREATE DATABASE student
DROP DATABASE student

-- 数据库建模
-- varchar2 (自动回收多余的空间) 
-- varchar (不会回收)
CREATE TABLE stuMess(
sid INT,
sname VARCHAR(20),
sage INT,
ssex CHAR(4))

-- 修改约束
-- 1. 插入(增)
INSERT INTO stumess VALUES(1, 'cuihua',18 ,'女')
INSERT INTO stumess VALUES(2, '老高',20 ,'男')
-- 2. 修改
UPDATE stumess SET ssex='女', sage=73 WHERE sid=2
-- 3. 删除
DELETE from stumess
TRUNCATE TABLE stumess
-- 4. 查询
SELECT * FROM stumess
SELECT sname, ssex from stumess
SELECT sname, sexx FROM stumess WHERE sid=1

-- DCL:权限
查询(select)
插入(insert)
修改(update)
删除(delete)
-- 1. 授予权限
grant select on stumess root;
-- 2.  回收权限
-- public (所有用户)
revoke select on stumess from public;

数据库语句封装

import java.sql.*;

public class connectionMysql {
    /*
    *写方法的一般原则:
    * 1. 知道这个要干什么?【业务理解】
    * 2. 要不要返回值?返回值的意义?
    *  a: 调用此方法的目的就是为了拿到返回值
    *  b: 通过返回值判断方法的执行过程
    * 3. 方法要不要参数?
    * */
    Connection con = null;
    Statement sta = null;
    ResultSet res = null;
    // 打开数据库连接
    public Connection openMysql() {
        try {
            String username = "root";
            String pwd = "123456";
            String url = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL" +
                    "=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2b8";
            // 1. 加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2. 连接
            con = DriverManager.getConnection(url, username, pwd);
        } catch (Exception e) {
            System.out.println("------------------连接异常------------------");
            e.printStackTrace();
            System.out.println("------------------连接异常------------------");
        }
        return con;
    }

    // 增删改
    public int update(String sql) {
        int re = 0;
        try {
            // 创建执行对象
            sta = con.createStatement();
            // 成功几条返回几, 失败返回0
            re = sta.executeUpdate(sql);
        } catch (SQLException e) {
            System.out.println("------------------操作异常------------------");
            e.printStackTrace();
            System.out.println("------------------操作异常------------------");
        }
        return re;
    }

    // 查询
    public ResultSet select(String sql) {
        try {
            // 创建执行对象
            sta = con.createStatement();
            res = sta.executeQuery(sql);
        } catch (SQLException e) {
            System.out.println("------------------查询异常------------------");
            e.printStackTrace();
            System.out.println("------------------查询异常------------------");
        }
        return res;
    }

    // 查看表信息(在只知道表名的情况下,获取数据)
    public void showTableMessage(String tableName) {
        try {
            String sql = "select * from " + tableName;
            sta = con.createStatement();
            res = sta.executeQuery(sql);
            // 结果集表源数据--表结构破解
            ResultSetMetaData meta = res.getMetaData();
            // 获得所有字段总数
            int count = meta.getColumnCount();
            // 遍历字段
            for (int i = 1; i <= count; i++) {
                // 获取字段名
                String columnName = meta.getColumnName(i);

                // 获取对应的字段类型
                int columnType = meta.getColumnType(i); // 数据库数据类型最底层是整型
                String columnTypeName = meta.getColumnTypeName(i);
                System.out.println(columnName+":"+columnTypeName);
            }
        } catch (SQLException e) {
            System.out.println("------------------查表信息异常------------------");
            e.printStackTrace();
            System.out.println("------------------查表信息异常------------------");
        }
    }

    // 关闭链接(web 阶段不建议用)
    public void closeAll() {
        try {
            if (res != null) {
                res.close();
            }
            if(sta != null) {
                sta.close();
            }
            if(con != null) {
                con.close();
            }
        }catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

import java.sql.Connection;
import java.sql.ResultSet;

public class test {
    public static void main(String[] args) {
        connectionMysql con = new connectionMysql();
        Connection connection = con.openMysql(); //打开数据库链接
        con.update("delete from stumess where sid=2"); //删除数据
        ResultSet resultSet =  con.select("select * from stumess");
        System.out.println(resultSet);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_51712954/article/details/127752154