zoukankan      html  css  js  c++  java
  • PreparedStatement的参数问题(已解决)

    对于一个数据库,我在对数据进行删除操作的时候出现了问题

    确切的说是PreparedStatement的问题

    初步代码是这样的结构:

            String sql = new String("DELETE FROM flight WHERE ? = ? ");
            int res;
            PreparedStatement pstmt = connect.prepareStatement(sql);
            pstmt.setString(1, "flightNo");    
            pstmt.setString(2, flight.getFlightNo());    

    我起初想把WHERE语句中写成很多 ? = ?的结构,这样可以传入很多自定义参数,不过都是不识别的。

    然后进行了错误排查,发现错误出现在等号前的?中,把等号前的问好改成flightNo,手敲进去就好了

    初步猜测是插入参数默认是等号前不能作为参数,因为sql语句中这里表示column

    是colunm = 值的对应关系,所以只能是手打进去。

    所以sql语句的参数不可以是column项的。

    具体代码如下:此为更改后的版本

    @Override
        public int delete(Flight flight) throws SQLException {
            // TODO Auto-generated method stub
            Connection connect = DBUtil.getConnection();
            String sql = new String("DELETE FROM flight WHERE flightNo = ? ");
            int res;
            PreparedStatement pstmt = connect.prepareStatement(sql);
            pstmt.setString(1, flight.getFlightNo());
            System.out.println(sql);
            res = pstmt.executeUpdate();
            return res;
        }

     ~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~

    确定这个sql语句是只接受参数的,字段名是不可以作为问好传参的。

    新的解决办法为StringBuffer作为sql的储存体,每次传入判断语句就append进去或者中间插入

    最后再来执行。

    提升运行速度的另一要素是封装预编译的方法,连接->预编译->运行

    以及close的方法,涉及到线程的时候不能在增删改查方法体的try语句块中关闭

    涉及到线程的语句会再次补充

  • 相关阅读:
    AjaxPro对象参数传递
    SQLServer “无法对数据库'XX' 执行删除,因为它正用于复制”的解决方法
    sql server 查询某个表被哪些存储过程调用
    存储过程简单实例
    清理sqlserver 2012 日志文件
    从客户端(XXX)中检测到有潜在危险的Request.Form 值
    sqlserver无法在数据库上放置锁
    C#趋势图(highcharts插件)
    TFS 报错解决方案:tf400324
    checkbox勾选事件,JQ设置css,下拉框JQ选中
  • 原文地址:https://www.cnblogs.com/exigeslover/p/12024830.html
Copyright © 2011-2022 走看看