24/04/08总结

JDBCAPI:

DriverManeger:

getConnection(String url, String user, String password):建立数据库的连接
registerDriver(Driver driver):    使用DriverManager方法1.注册给定的驱动程序(Class.forName里就有个静态代码块是registerDriver)

Connection:

Connection(数据库连接对象)作用: //1.获取执行 SQL 的对象,2.管理事务
1.获取执行 SQL 的对象
普通执行SQL对象
Statement createStatement()
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement (sql)
执行存储过程的对象
CallableStatement prepareCall (sql)
主要使用上面两个(createStatement,prepareStatement)
2.事务管理
MySQL 事务管理
开启事务:BEGIN;/START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务
JDBC 事务管理:Connection接口中定义了3个对应的方法
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollback()
事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。
当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;
要么数据库管理系统将放弃所作的所有修改,整个事务**回滚(rollback)**到最初状态。

 Statement:

Statement作用:
1.执行SQL语句
int executeUpdate(sql):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值: ResultSet 结果集对象
DDL:对表和库的增删改查操作
DML:对数据的增删改操作
DQL:对数据的查询操作

ResultSet:

ResultSet(结果集对象)作用:
1.封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回 ResultSet 对象
获取查询结果
boolean next():(1)将光标从当前位置向前移动一行(2)判断当前行是否为有效行
返回值:
true:有效行,当前行有数据
false:无效行,当前行没有数据
XXX getXxx(参数):获取数据
XXX:数据类型;如:int getInt(参数);String getString(参数)
参数:
int:列的编号,从1开始
String:列的名称
ResultSet
使用步骤:
1.游标向下移动一行,并判断该行否有数据:next()
获取数据:getXxx(参数)
循环判断游标是否是最后一行末尾
while(rs.next()){
获取数据
rs.getXxx(参数);
}
 

PreparedStatement:

PreparedStatement作用:
1.预编译SQL语句并执行:预防SQL注入问题
SQL注入
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
防sql注入:
1.获取 PreparedStatement 对象
SQL语句中的参数值,使用?占位符替代
String sql="select * from user where username = ? and password = ?".
/通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sgl);
2.设置参数值
PreparedStatement对象:setXxx(参数1,参数2):给?赋值
Xxx:数据类型;如 setInt (参数1,参数2)
参数:
参数1:?的位置编号,从1开始
参数2:?的值
3.执行SQL
executeUpdate();||executeQuery();:不需要再传递sql       (就是查询)

增删改查: 

增:
编写 SQL语句
insert into suers(brand_name, company_name, ordered, description, status) values(?,?,?,?,?);    //里面的就是你数据库里的东西
2
是否需要参数? 需要: 除了id之外的所有数据
3.
返回结果如何封装? boolean
修:
update tb brand set brand name =?, company name= ?, ordered=? description = ?, where id=? (然后后面和增一样)
删:
delete from tb brand where id = ?

实例:

改:
 
package Database_connection_pool;

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

public class Demo1 {
    // 注册驱动
    static final String url ="jdbc:mysql://localhost:3306/chat";
    //url语法:"jdbc:mysql://ip地址(域名:就是localhost):端口号/数据库名称?参数键值对1&参数键值对2...
   //细节:如果连接的是本机mysqI服务器,并且mysql服务默认端口是3306,则ur可以简写为:jdbc:mysql://数据库名称?参数键值对(还是按标准写吧现在)
    static final String user= "root";
    static final String password = "123456";
    static Connection conn = null;
    // 获取数据库连接
    public static void getConnection() {
        try {
            // 注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 获取连接
            conn = DriverManager.getConnection(url, user, password);      //在上面
            //定义sql
            String sql = "update suers set money = 2000  where id = 1";              //update后面填的是表名
            //获取执行sql的对象  Statement
            Statement stmt =conn.createStatement();
            //执行sql
            int count = stmt.executeUpdate(sql);//执行是有返回值的,返回值是行数
            //处理结果(简单搞一下就输出个行数)
            System.out.println(count);
            //释放资源
            stmt.close();
            conn.close();

        } catch (ClassNotFoundException e) {
            System.out.println("找不到MySQL驱动程序类!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("获取数据库连接时出现错误!");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        getConnection();
    }
}
增删:
 
package Database_connection_pool;

import java.sql.*;

public class Demo6 {
    static final String url ="jdbc:mysql://localhost:3306/chat";
    static final String user= "root";
    static final String password = "123456";
    static Connection conn = null;

    public static void getConnection() {
        try {
            String username="小王";
            int money =1234;
            String passwords="1dada";
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            //增
            String sql = "insert into suers(username,money,passwords)values(?,?,?);";
            //注意!!!!!!!这里面的参数必须和数据库里的名字一模一样才行,不然找不到
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,username);        //1 2 3对应的问号
            pstmt.setInt(2,money);
            pstmt.setString(3,passwords);
            pstmt.executeUpdate();      //执行添加

            //删
            int id=2;
            String sql2 ="delete from suers where id =?";
            PreparedStatement pstmt2 = conn.prepareStatement(sql2);
            pstmt2.setInt(1,id);
            pstmt2.executeUpdate();

        } catch (ClassNotFoundException e) {
            System.out.println("找不到MySQL驱动程序类!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("获取数据库连接时出现错误!");
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
        getConnection();
    }
}
查:
 
package Database_connection_pool;

import java.sql.*;

public class Demo4 {
                //ResultSet小结
                //DQL
    static final String url ="jdbc:mysql://localhost:3306/chat";
    static final String user= "root";
    static final String password = "123456";
    static Connection conn = null;

    public static void getConnection() {
        try {
            //1.注册
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection(url, user, password);
            //3.定义sql
            String sql = "select * from suers";       //DQL
            //4.获取statement对象
            Statement stmt = conn.createStatement();
            //5.执行sql
            ResultSet rs = stmt.executeQuery(sql);

            //6.处理结果,遍历rs中的所有数据
            //6.1光标向下移动一行,并且判断当前行是否有数据
            while(rs.next()){
                //6.2 获取数据  getXxx()
                int id = rs.getInt(1);          //这时参数填的是列的编号(从1开始,也可以填名字(用双引号括起来))
                String name = rs.getString(2);
                int money = rs.getInt(3);
                System.out.print(id);
                System.out.print(' '+name);
                System.out.println(" "+money);
                System.out.println("--------------");
            }
            //7.释放资源
            rs.close();
            conn.close();
            stmt.close();
        } catch (ClassNotFoundException e) {
            System.out.println("找不到MySQL驱动程序类!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("获取数据库连接时出现错误!");
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        getConnection();
    }
}

相关推荐

  1. 【工作周志】240108-240114

    2024-04-08 07:14:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 07:14:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 07:14:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 07:14:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 07:14:02       18 阅读

热门阅读

  1. LeetCode 474. 一和零

    2024-04-08 07:14:02       11 阅读
  2. MySQL的列子查询

    2024-04-08 07:14:02       15 阅读
  3. Flink CDC

    Flink CDC

    2024-04-08 07:14:02      12 阅读
  4. 【LintCode】448 · 二叉查找树的中序后继

    2024-04-08 07:14:02       14 阅读
  5. 代码随想录 day24 回溯算法

    2024-04-08 07:14:02       10 阅读
  6. MXNet安装

    2024-04-08 07:14:02       14 阅读
  7. RIP协议

    2024-04-08 07:14:02       13 阅读
  8. redis和ElasticSearch和MongoDB应用场景,如何选择

    2024-04-08 07:14:02       11 阅读