JDBC基本知识

JDBC对数据库操作的六个基本步骤:
    //1.注册数据库驱动
            
    //2.获取数据库连接

    //3.获取传输器对象

    //4.利用传输器传输SQL到数据库执行,获取结果集对象
        
    //5.遍历结果集,获取结果数据

    //6.关闭资源(这里低层是将连接还回数据源中)

 

Statement和PreparedStatement都可以作为执行sql语句的传输器。它们存在父子关系;PreparedStatement是Statement 父级。
在使用Statement传输器时容易被用户输入sql关键字后导致后台sql被破坏,即sql注入攻击。安全性并不高。


PreparedStatement优点:
            (1)可以防止sql注入攻击, 采用预编译机制, 先将sql语句的主干发送数据库, 数据库编译后就确定了sql语句的语意, 如果后面参数中再包含sql关键字或者是特殊字符, 也只会当作普通的字符来处理!!!
            (2)通过方法来设置参数, 省去了拼接sql语句的麻烦.
            (3)能够尽最大可能来提高效率. PreparedStatement发送的sql语句编译后就被数据库缓存下来了, 再次执行时, 如果和缓存中的匹配就会使用缓存中的语句, 不再编译, 直接执行. statement发送的sql语句是先拼接好再发送给数据库, 由于参数不同整条sql语句也就不同, 所以每次都需要编译.

Statement对数据库的增删查改:

增加数据:

复制代码
 1 public static void add(Connection conn,Statement stat,ResultSet rs){
 2         try {
 3             //注册mysql驱动
 4             Class.forName("com.mysql.jdbc.Driver");
 5             //建立连接
 6             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","admin");
 7             //创建传输器
 8             stat = conn.createStatement();
 9             //操作数据
10             int rows = stat.executeUpdate("insert into account values(null,'张三',88888888)");
11             System.out.println("添加了"+rows+"条");
12         } catch (Exception e) {
13             e.printStackTrace();
14         }finally{
15             JDBCutils.closeResou(conn, stat,rs);
16         }
17     }
复制代码

查看数据:

复制代码
 1 public static void check(Connection conn,Statement stat,ResultSet rs){
 2         
 3         try {
 4             //注册mysql驱动
 5             Class.forName("com.mysql.jdbc.Driver");
 6             //建立连接
 7             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","admin");
 8             //创建传输器
 9             stat = conn.createStatement();
10             //操作数据
11             rs = stat.executeQuery("select name 名字 from account where money = 500;");
12             while(rs.next()){
13                 System.out.println(rs.getString("名字"));
14             }
15             
16         } catch (SQLException e) {
17             e.printStackTrace();
18         }finally{
19             JDBCutils.closeResou(conn, stat, rs);
20         }
21         
22     }
复制代码

PreparedStatement对数据的增删查改:

增加数据:

复制代码
public static void add(Connection conn,PreparedStatement ps){
        //注册驱动
        try {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin");
            
            String sql = "insert into account values(null,?,?) ";
            
            ps = conn.prepareStatement(sql);
            
            ps.setString(1, "李达康");
            
            ps.setDouble(2, 1000);
            
            int rows = ps.executeUpdate();
            
            System.out.println("添加了:"+rows);
            
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            JDBCutils.closeResou(conn, ps, null);
        }
    }
复制代码

删除数据:

复制代码
public static void del(Connection conn,PreparedStatement ps){
        
        try {
            Connection conn = null;
            
            PreparedStatement ps = null;
            
            ResultSet rs = null;
            
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin");
            
            String sql="delete from account where id=?";
            
            ps = conn.prepareStatement(sql);
            
            ps.setInt(1, 10);
            
            int rows = ps.executeUpdate();
            
            System.out.println("删除了"+rows);
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            JDBCutils.closeResou(conn, ps, null);
        }
        
    }
复制代码

查数据:

复制代码
public static void check(Connection conn,PreparedStatement ps,ResultSet rs){
        try {
            Connection conn = null;
            
            PreparedStatement ps = null;
            
            ResultSet rs = null;
            
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin");
            
            String sql="select id from account where name=?";
            
            ps = conn.prepareStatement(sql);
            
            ps.setString(1,"童旭平");
            
            rs = ps.executeQuery();
            
            while(rs.next()){
                
                System.out.println(rs.getInt("id"));
                
            }
            
        } catch (Exception e) {
            e.printStackTrace();
            
        }finally{
            JDBCutils.closeResou(conn, ps, rs);
        }
    }
    
复制代码

 

posted @   大大大圣  阅读(264)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示