淹死的鱼pp 2017-11-06 02:44 采纳率: 57.1%
浏览 1083
已采纳

插入的sql语句因为数值不对应报错,怎么解决?

有一条sql插入语句,问号数比实际数要多,因为实际数不确定,所以我吧问号数写到最大,但有个问题,再插入实际数时有为null的数值,用PreparedStatement就无法执行,请问怎么完整的插入数据并不会报错?
public static void logToDB(String[] split) {
Connection conn=null;
PreparedStatement state=null;
JDBCUtilProperties.getValue("db.properties");//这是一个工具类
String sql = "insert into job values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"
+ "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
try {
conn = JDBCUtilProperties.getConnection();
state= conn.prepareStatement(sql);
System.out.println("split=="+split.length);
for(int i =0;i< split.length;i++){
state.setString(i+1,split[i] );//这条语句因为数值的不对应老是报错
}
int rows = state.executeUpdate();
if(rows!=0){
System.out.println("插入成功");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
// 4. 释放资源
JDBCUtilProperties.releaseResource(conn, state, null);
}

}
  • 写回答

8条回答 默认 最新

  • zhc5885306 2017-11-06 03:12
    关注

    这是我的工具类

    package com.user.dao;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.sql.DataSource;
    
    /**
     * JDBC工具类
     * @author zkc
     *  @version 1.0 2017-09-21
     */
    public class BaseDAO {
        /**
         * 连接对象
         */
        Connection conn = null;
        /**
         * 执行对象
         */
        PreparedStatement stmt = null;
        /**
         * 读取对象
         */
        ResultSet rs = null;
    
        /**
         * 获取连接对象
         * @return Connection
         */
        public Connection getConn(){
            try {
    //          Class.forName("oracle.jdbc.driver.OracleDriver");
    //          conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","zkc","123");
    
                Context ctx = new InitialContext();
    
                DataSource ds = (DataSource) ctx.lookup("java:comp/env/zkc");
    
                conn = ds.getConnection();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
        /**
         * 增删改操作
         * @param sql
         * @param args
         * @return int
         */
        public int update(String sql,Object...args){
            int result = 0;
            try {
                conn = getConn();
                stmt = conn.prepareStatement(sql);
    
                for(int i=0;i<args.length;i++){
                    stmt.setObject(i+1, args[i]);
                }
    
                result = stmt.executeUpdate();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * 关闭对象
         */
        public void close(){
            try {
                if(rs!=null){
                    rs.close();
                }
                if(stmt!=null){
                    stmt.close();
                }
                if(conn!=null){
                    conn.close();
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }
    

    我这里的update方法就不用限定参数个数,传多少参数就有多少问号,下面是具体用的例子

    public boolean add(UserInfo user) {
            String sql = "insert into person values (?,?,?,?,?,?,?,?,?)";
            int result = update(sql,user.getAcc(),user.getPwd(),user.getName(),user.getSex(),user.getAge(),user.getIdcard(),user.getTel(),user.getAdd(),user.getEmail());
            boolean flag = true;
            if(result>0){
                System.out.println("添加成功");
                flag = true;
            }else{
                System.out.println("添加失败");
                flag = false;
            }
    
            close();
            return flag;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧