美文网首页
JDBC Statement,PreparedStatement

JDBC Statement,PreparedStatement

作者: 羽寂 | 来源:发表于2018-08-12 22:36 被阅读0次

    Statement系列接口用于将用户创建的sql语句提交到数据库执行,除了执行存储过程外,一些接口方法还接收参数。

    如何选择使用哪种类型Statement?

    • Statement对于固定的sql语句很有用,Statement不能接收参数。

    • PreparedStatement适用于需要多次进行调用的sql语句和多个参数的情况,PreparedStatement可以接收参数。使用PreparedStatement好处多多。比如:防SQL攻击、提高代码的可读性、可维护性、提高效率!

    • CallableStatement用于访问数据库的存储过程,CallableStatement也可以接收参数。存储过程的优点:执行效率很快(因为在数据库服务端执行的)。缺点:移植性差(不同数据库的存储过程是不可移植的)。

    Statement的使用

    1.创建Statement对象

    Statement stmt=conn.creatStatement();

    2.Statement常用方法

    • boolean execute(String sql) 返回boolean类型,在执行sql语句后,如果ResultSet检索到,则返回true,否则返回false。
    • int executeUpdate(String sql) 返回int类型,方法用于执行sql语句,将返回sql语句影响的行数。
    • ResultSet executeQuery(String sql) 执行sql语句,将返回结果集。用ResultSet实例化 result去接收返回集。

    3.关闭

    stmt.close(); 关闭并释放资源。

    PreparedStatement的使用

    1.使用PreparedStatement插入数据实例

     ...//连接数据库
    String sql="insert into userInfo(username.password,gender,age) value(?,?,?,?)";
     //可以传入参数
    PreparedStatement ps=conn.prepareStatement(String sql);
    //调用setXXX系列方法给问号赋值,下标从1开始,代表第一个问号
    ps.setString(1,"name");
    ps.setInt(2,123456);
    ps.setString(3,"男");
    ps.setInt(4,25);
    //执行插入
    ps.executeUpdate();
    ps.close();
    conn.close();
    
    

    2.常用方法:
    根据一般的使用习惯

    • boolean execute();在进行数据库或表的创建删除操作时使用。(不传入参数)
    • ResultSet executeQuery(); 数据查询时使用。(不传入参数)
    • int executeUpdate(); 数据的插入删除、修改时使用。(不传入参数)

    比如要查询信息得到结果集可以这样写: ResultSet rs=ps.executeQuery(); (这里不传入参数)

    2.关闭

    ps.close(); 关闭并释放资源。

    CallableStatement的使用

    1.创建一个CallableStatement

    1.1 存储过程存在的三种参数:IN OUT INOUT

    • IN 创建SQL语句时其参数值是未知的。 使用setXXX()方法将值绑定到IN参数。
    • OUT 由SQL语句返回的参数值。可以使用getXXX()方法从OUT参数中检索值。
    • INOUT 提供输入和输出值的参数。使用setXXX()方法绑定变量并使用getXXX()方法检索值。

    1.2 如果存储过程只是IN

    String sql="{call getEmpName (?, ?)}";
    //conn.prepareCall() 与conn.preparedStatement()功能一样
    CallableStatement cstmt=conn.prepareCall(sql);
    cstmt.setString(1,"aaa");
    cstmt.setInt(2,123);
    //发送参数,所有调用存储过程的sql语句都是使用executeQuery方法执行。
    ResultSet rs=cstmt.executeQuery();
    

    1.3 如果存储过程是INOUT

     //第一个?是输入参数,第二个?是输出参数
     String sql = "CALL pro_test2(?,?)";
     CallableStatement cstmt=conn.preparecall(sql);
     //设置输入参数
     cstmt=setInt(1,5);
     //设置输出参数,用registerOutParameter绑定
     cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);
     //执行
     cstmt.executeQuery();
     //根据?位置取得数据getXXX()方法只用于存储过程
     String rs=cstmt.getString(2);
    

    1.4 关闭CallableStatement

    cstmt.close();

    相关文章

      网友评论

          本文标题:JDBC Statement,PreparedStatement

          本文链接:https://www.haomeiwen.com/subject/ysmebftx.html