zoukankan      html  css  js  c++  java
  • JAVA JDBC 数据库操作

    使用JDBC进行增删改查

    
    
    import java.sql.*;
    public class JdbcDemo {
        private final static String SQLURL="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC";
        private final static String SQLUSER="root";
        private final static String SQLPAS="root";
    
        ResultSet select() throws SQLException {
            try(Connection connection= getConnection()){
                try(PreparedStatement ps=connection.prepareStatement("select * from table_name  where field=?")){
                    ps.setObject(1,"查新条件");
                    try(ResultSet rs= ps.executeQuery()){
                        return rs;
                    }
                }
            }
        }
        //修改记录,返回受影响行数
        int update() throws SQLException {
            try(Connection connection= getConnection()) {
                try (PreparedStatement ps = connection.prepareStatement("update table_name  set field=? where field=?")) {
                    ps.setObject(1, "条件值");
                    ps.setObject(2, "修改新值");
                    return ps.executeUpdate();
                }
            }
        }
        //添加一条记录,返回自增ID
        int insert() throws SQLException {
            try(Connection connection= getConnection()){
                try(PreparedStatement ps=connection.prepareStatement("insert into table_name (field,field2) values(?,?)",Statement.RETURN_GENERATED_KEYS)){
                    ps.setObject(1,"字段1值");
                    ps.setObject(2,"字段2值");
                    return ps.executeUpdate();
                }
            }
        }
        //删除记录,返回受影响行数
        int delete() throws SQLException {
            try(Connection connection= getConnection()) {
                try (PreparedStatement ps = connection.prepareStatement("delete table_name  where field=?")) {
                    ps.setObject(1, "条件值");
                    return ps.executeUpdate();
                }
            }
        }
       static Connection getConnection() throws SQLException {
         return   DriverManager.getConnection(SQLURL,SQLUSER,SQLPAS);
        }
    }

     事务:

    数据库事务具有CAID特性:

    Atomicity:原子性

    Consistency:一致性

    Isolation:隔离性

    Durability:持久性

      脏读(Dirty Read) 非重复读(Non repeatable Read) 幻读(Phantom Read)
    Read Uncommitted Y Y Y
    Read Committed   Y Y
    Repeatable Read     Y
    Serializable      

    脏读(Dirty Read):

    事务A进行数据的更新,还没有提交之前,事务B进行了查询,读到的数据是事务A没有提交的数据,如果此时事务A进行回滚,那么事务B得到的数据就是脏的。

    非重复读(Non repeatable Read):

    事务B中有两次查询,第一次查询是在事务A提交之前查询,第二次查询是在事务A提交之后查询,两次查询结果不一致。

    幻读(Phantom Read): 

    事务B中前两条查询都没有查到ID为99的数据,但是在update之后查到了ID为99的数据。

     使用事务执行代码

    import java.sql.*;
    
    public class JdbcDemo {
        private final static String SQLURL="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC";
        private final static String SQLUSER="root";
        private final static String SQLPAS="root";
        //事务提交
        void transaction() throws SQLException {
            try(Connection connection= getConnection()) {
                connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
                connection.setAutoCommit(false);//关闭自动提交
                try {
                    PreparedStatement ps = connection.prepareStatement("delete table_name  where field=?");
                    ps.setObject(1, "条件值1");
                    ps.executeUpdate();
                    ps = connection.prepareStatement("delete table_name  where field=?");
                    ps.setObject(1, "条件值2");
                    ps.executeUpdate();
                    connection.commit();//提交事务
                }catch (Exception ex){
                    connection.rollback();
                }
                connection.setAutoCommit(true);//开启自动提交
            }
        }
       static Connection getConnection() throws SQLException {
         return   DriverManager.getConnection(SQLURL,SQLUSER,SQLPAS);
        }
    }

     使用连接池

    首先需要在pox.xml中添加第三方引用

    <dependency>
      <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.3</version> </dependency>
    import com.zaxxer.hikari.HikariConfig;
    import com.zaxxer.hikari.HikariDataSource;
    
    import javax.sql.DataSource;
    import java.sql.*;
    
    public class JdbcDemo {
        private final static String SQLURL="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=UTC";
        private final static String SQLUSER="root";
        private final static String SQLPAS="root";
    
    
    
    
    
        ResultSet select() throws SQLException {
            try(Connection connection= createDataSource().getConnection()){
                try(PreparedStatement ps=connection.prepareStatement("select * from table_name  where field=?")){
                    ps.setObject(1,"查新条件");
                    try(ResultSet rs= ps.executeQuery()){
                        return rs;
                    }
                }
            }
        }
       static DataSource createDataSource(){
            HikariConfig hikariConfig= new HikariConfig();
            hikariConfig.setJdbcUrl(SQLURL);
            hikariConfig.setUsername(SQLUSER);
            hikariConfig.setPassword(SQLPAS);
            hikariConfig.setConnectionTimeout(1000);//设置数据库连接超时时间
            hikariConfig.setIdleTimeout(6000);//设置空闲时间
            hikariConfig.setMaximumPoolSize(10);//设置最大连接数
            return  new HikariDataSource(hikariConfig);
        }
    
    }
  • 相关阅读:
    全网最详细的Windows系统里PLSQL Developer 64bit安装之后的一些配置(图文详解)
    全网最详细的Windows系统里PLSQL Developer 32bit的下载与安装过程(图文详解)
    全网最详细的Windows系统里PLSQL Developer 64bit的下载与安装过程(图文详解)
    全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)
    全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来定时任务apscheduler库(图文详解)
    全网最全的Windows下Python2 / Python3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)
    全网最详细的用pip安装****模块报错:Could not find a version that satisfies the requirement ****(from version:) No matching distribution found for ****的解决办法(图文详解)
    全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)
    全网最详细的U盘被损坏导致一般性的软件无法修复的解决办法(必须可以)(图文详解)
    [转]Windows10中Virtualbox没办法选择和安装64位的Linux系统
  • 原文地址:https://www.cnblogs.com/mrma/p/12837020.html
Copyright © 2011-2022 走看看