首页 > 数据库 >MySQL 数据库-JDBC

MySQL 数据库-JDBC

时间:2024-05-27 21:23:48浏览次数:22  
标签:事务 JDBC String 数据库 sql st SQL MySQL password

1.事务

事务(Transaction):要么都成功,要么都失败
事务原则:ACID原则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))

  • 原子性:要么都成功,要么都失败
  • 一致性:事务前后的数据完整性要保证一致(如,转账操作后,两个人的总额不变)
  • 持久性:事务一旦提交不可逆,被持久化到了数据库中(事务没提交,恢复到原状态;事务提交了,持久化到数据库的)
  • 隔离性:针对多个用户同时操作,主要排除其他事务对本次事务的影响

脏读:指一个事务读取了另外一个事务未提交的数据
幻读:指在一个事务内读到了别的事务插入的数据,导致前后读取不一致

2.数据库备份

导出:

  • mysqldump -hlocalhost -uroot -pxxx database_name table_name1 table_name2 > path/new.sql
  • mysqldump -hlocalhost -uroot -pxxx database_name > path/new.sql

导入:

  • source path/source.sql(登录情况下)
  • mysql -u用户名 -p密码 库名 < 备份文件

3.JDBC

步骤:

  1. 加载驱动
  2. 连接数据库 DriverManager
  3. 获得执行SQL的对象 Statement
  4. 获得返回的结果集
  5. 释放连接
JDBC 连接代码
import java.sql.*;

public class JdbcFirstDemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.加载驱动
        Class.forName("com.mysql.jdbc.Driver"); // 固定写法,加载驱动
        // 2.用户信息和 url
        String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf-8&useSSL=true";
        String username = "root";
        String password = "root";
        // 3,连接成功,数据库对象
        Connection connection = DriverManager.getConnection(url, username, password);
        // 4.执行SQL的对象
        Statement statement = connection.createStatement();
        // 5.执行SQL的对象,去执行 SQL,可能存在结果,查看返回结果
        String sql = "select * from users";
        ResultSet resultSet = statement.executeQuery(sql);//返回的结果,结果集中封装了所有结果
        while (resultSet.next()){
            System.out.println("id=" + resultSet.getObject("id"));
            System.out.println("name=" + resultSet.getObject("name"));
            System.out.println("age=" + resultSet.getObject("age"));
            System.out.println("=======================");
        }
        // 6.释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

执行SQL对象

statement.executeQuery(sql);// 查询操作
statement.execute(sql);// 执行任何SQL
statement.executeUpdate(sql);//更新、插入、删除都用这个,返回一个受影响的行数

一般将数据库的连接配置都放在 .properties 文件中

4.SQL注入问题

4.1.SQL 代码问题

问题代码:String sql = "select * from users where `NAME`='"+username+"' AND `password` ='"+password+"'";

相当于:username 赋值为 'or 1=1 --+
本质:会将值拼接到SQL语句中

4.2.PreparedStatement 对象

通过预编译防御SQL注入
本质:把传递进来的参数当作字符

防止SQL注入
import java.sql.Connection;
import java.sql.PreparedStatement;

public class SQLInjection {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;
        try{
            conn = JdbcUtils.getConnection();

            // 使用 ? 占位符代替参数
            String sql = "insert into users(id,name,password) values(?,?,?)";
            st = conn.prepareStatement(sql);// 预编译SQL,先写SQL,然后不执行
            // 手动给参数赋值
            st.setInt(1,1);// id
            st.setString(2,"xiaoming");// name
            st.setString(3,"123456");// password
            // 执行
            int i = st.executeUpdate();
            if (i > 0) System.out.println("插入成功!");
        } catch (Exception e){
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn, st, null);
        }
    }
}

标签:事务,JDBC,String,数据库,sql,st,SQL,MySQL,password
From: https://www.cnblogs.com/luoluostudy/p/18216542

相关文章

  • 无法连接阿里云服务器本地mysql问题
    1.登录服务器,进入本地mysql数据库,修改root账号访问权限为:%,表示所有IP都可以连接usemysql;updateusersethost="%"whereuser="root";//刷新权限FLUSHPRIVILEGES; 2. 查看是否修改成功:selectuser,host,pluginfrommysql.user; 3.修改 bind-address......
  • ubuntu安装mysql
    ubuntu安装mysql更新软件包列表sudoaptupdate安装mysql服务器sudoaptinstallmsyql-server启动并检查mysql服务sudosystemctlstartmysqlsudosystemctlstatusmysql无密码登录mysqlsudomysql-uroot给root创建密码如果是mysql5.0版本,使用alteruser'root'......
  • Oracle数据库跟踪SQL
    教大家如何玩转跟踪(toownersession、othersession)Oracle数据库的跟踪和分析方法Oracle数据库跟踪SQL的几种方法Oradebug工具使用https://blog.csdn.net/qq_43670385/article/details/132908317一、跟踪自己的会话或者是别人的会话1、跟踪自己的会话很简单Alterses......
  • 升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框
    升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(一)  升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(一) 1.登录与申请试用界......
  • 数据库触发器
    数据库触发器(DatabaseTrigger)是与表相关联的一种特殊类型的存储过程,它会自动在特定的数据库操作(如INSERT、UPDATE或DELETE)发生之前或之后执行。触发器常用于保证数据的完整性、实施复杂的业务规则、自动更新表间的关系、记录数据变更的历史等。###触发器的主要类型:-**BEFORE......
  • MySQL函数查询目录树问题记录
    DELIMITER//CREATEFUNCTION`getChildXzqhList`(rootIdBIGINT)RETURNSVARCHAR(4000)BEGINSETSESSIONgroup_concat_max_len=1000000;--设置为1MB设置GROUP_CONCAT函数输出的最大长度大小,太小的话整体会被截掉RETURN(WITH......
  • MySQL--备份恢复
    目录一、备份恢复的工作职责1.备份的时间周期2.备份的方式3.恢复方案4.检查备份5.定期恢复演练6.故障恢复策略7.迁移升级二、逻辑备份工具--mysqldump1.介绍2.使用场景3.mysqldump命令的参数介绍1)全备:2)单库或多库备份:--常用3)备份某个库下的单表或多表:--不常用4......
  • centos 7 安装mysql5.7
    1.在线安装,有时安装失败,可能是自动选择镜像时问题sudoyumlocalinstallhttps://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpmsudoyuminstallmysql-community-servermysql-community-client启动mysql:sudosystemctlstartmysqld停止mysql:sudo......
  • SQL SERVER 查数据库中锁的情况
    SELECTL.request_session_idASSessionID,DB_NAME(L.resource_database_id)ASDatabaseName,O.NameASLockedObjectName,P.object_idASObjectID,L.resource_typeASResourceType,L.request_modeASLockType,ST.textASSqlStatemen......
  • 管理数据库
    少数对象(如角色、数据库和表空间名称)在集群级别定义并存储在pg_global表空间中。集群内部有多个数据库,它们彼此隔离但可以访问集群级对象。每个数据库内部有多个架构,其中包含表和函数等对象。因此,完整的层次结构是:集群、数据库、架构、表(或其他类型的对象,例如函数)。数据库使用CRE......