JDBC---PreparedStatement用法详解

一 简介:

JDBC的最基本的使用过程

  1. 加载驱动类:Class.forName()      
  2. 获取数据库连接:DriverManager.getConnection()
  3. 创建SQL语句执行句柄:Connection.createStatement()
  4.  执行SQL语句:Statement.executeUpdate()
  5.  释放数据库连接资源:finally,Connection.close()
应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement.原因如下。

1. 代码的可读性和可维护性:

​​stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();


2. 尽最大可能提高性能.

整个DB中,只要预编译的语句语法和缓存中匹配,而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配

二、PreparedStatement用法:

一个preparedstatement是从java.sql.connection对象和所提供的sql字符串得到的,sql字符串中包含问号(?),这些问号标明变量的位置,然后提供变量的值,最后执行语句,例如:
stringsql = "select * from people p where p.id = ? and p.name = ?";
preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,name);
resultset rs = ps.executequery();
 private static void preparedStatement() {
        // 总结一下JDBC的最基本的使用过程
        // 1、加载驱动类:Class.forName()
        // 2、获取数据库连接:DriverManager.getConnection()
        // 3、创建SQL语句执行句柄:Connection.createStatement()
        // 4、执行SQL语句:Statement.executeUpdate()
        // 5、释放数据库连接资源:finally,Connection.close()

        // 定义数据库连接对象
        // 引用JDBC相关的所有接口或者是抽象类的时候,必须是引用java.sql包下的
        // java.sql包下的,才代表了java提供的JDBC接口,只是一套规范
        // 至于具体的实现,则由数据库驱动来提供,切记不要引用诸如com.mysql.jdbc包的类
        Connection conn=null;
        //定义SQL语句执行句柄:PrepareStatement对象
        //PreparedStatement对象,其实就是底层会基于Connection数据库连接
        //可以让我们方便的针对数据库中的表,执行增删改查的SQL语句
        //比如和insert update delete和select语句
        PreparedStatement ps=null;
        try {
            // 第一步,加载数据库的驱动,我们都是面向java.sql包下的接口在编程,所以
            // 要想让JDBC代码能够真正操作数据库,那么就必须第一步先加载进来你要操作的数据库的驱动类
            // 使用Class.forName()方式来加载数据库的驱动类
            // Class.forName()是Java提供的一种基于反射的方式,直接根据类的全限定名(包+类)
            // 从类所在的磁盘文件(.class文件)中加载类对应的内容,并创建对应的Class对象
            Class.forName("com.mysql.jdbc.Driver");
            // 获取数据库的连接
            // 使用DriverManager.getConnection()方法获取针对数据库的连接
            // 需要给方法传入三个参数,包括url、user、password
            // 其中url就是有特定格式的数据库连接串,包括“主协议:子协议://主机名:端口号//数据库”
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/spark_project?characterEncoding=utf8",
                    "root",
                    "root"
            );
            // 基于数据库连接Connection对象,创建SQL语句执行句柄,Statement对象
            // prepareStatement对象,就是用来基于底层的Connection代表的数据库连接
            // 允许我们通过java程序,通过prepareStatement对象,向MySQL数据库发送SQL语句
            // 从而实现通过发送的SQL语句来执行增删改查等逻辑
            // 第一个,SQL语句中,值所在的地方,都用问好代表
            String sql = "insert into user(name,age) values(?,?)";
            ps = conn.prepareStatement(sql);
            // 第二个,必须调用PreparedStatement的setX()系列方法,对指定的占位符设置实际的值
            ps.setString(1,"李四");
            ps.setInt(2,26);
            // Statement.executeUpdate()方法,就可以用来执行insert、update、delete语句
            // 返回类型是个int值,也就是SQL语句影响的行数
            // 第三个,执行SQL语句时,直接使用executeUpdate()即可,不用传入任何参数
            int rtn = ps.executeUpdate();

            System.out.println("SQL语句影响了【" + rtn + "】行。");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                // 最后一定要记得在finally代码块中,尽快在执行完SQL语句之后,就释放数据库连接
                if (ps != null){
                    ps.close();
                }
                if (conn !=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值