淹死的鱼pp 2017-11-05 18: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-05 19: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 爱快路由器端口更改错误导致无法访问
  • ¥20 安装catkin时遇到了如下问题请问该如何解决呢
  • ¥15 VAE模型如何输出结果
  • ¥15 编译python程序为pyd文件报错:{"source code string cannot contain null bytes"
  • ¥20 关于#r语言#的问题:广义加行模型拟合曲线后如何求拐点
  • ¥15 fluent设置了自动保存后,会有几个时间点不保存
  • ¥20 激光照射到四象线探测器,通过液晶屏显示X、Y值
  • ¥50 数据库开发问题求解答
  • ¥15 安装anaconda时报错
  • ¥15 小程序有个导出到插件方式,我是在分包下引入的插件,这个export的路径对吗,我看官方文档上写的是相对路径
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部