derby数据库插入异常The number of values assigned is not the same as the number of specified or implied colu

在整合derby数据库的时候,想要插入一条语句结果报错:

The number of values assigned is not the same as the number of specified or implied columns.

异常栈如下:

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2020.3.2\lib\idea_rt.jar=54199:D:\Program Files\JetBrains\IntelliJ IDEA 2020.3.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\IdeaProject\spring_redis\target\classes;D:\Maven\org\springframework\boot\spring-boot-starter\2.7.1\spring-boot-starter-2.7.1.jar;D:\Maven\org\springframework\boot\spring-boot\2.7.1\spring-boot-2.7.1.jar;D:\Maven\org\springframework\spring-context\5.3.21\spring-context-5.3.21.jar;D:\Maven\org\springframework\spring-aop\5.3.21\spring-aop-5.3.21.jar;D:\Maven\org\springframework\spring-beans\5.3.21\spring-beans-5.3.21.jar;D:\Maven\org\springframework\spring-expression\5.3.21\spring-expression-5.3.21.jar;D:\Maven\org\springframework\boot\spring-boot-autoconfigure\2.7.1\spring-boot-autoconfigure-2.7.1.jar;D:\Maven\org\springframework\boot\spring-boot-starter-logging\2.7.1\spring-boot-starter-logging-2.7.1.jar;D:\Maven\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;D:\Maven\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;D:\Maven\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\Maven\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\Maven\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\Maven\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\Maven\org\springframework\spring-core\5.3.21\spring-core-5.3.21.jar;D:\Maven\org\springframework\spring-jcl\5.3.21\spring-jcl-5.3.21.jar;D:\Maven\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\Maven\com\auth0\java-jwt\3.10.3\java-jwt-3.10.3.jar;D:\Maven\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;D:\Maven\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;D:\Maven\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;D:\Maven\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\Maven\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Maven\org\apache\derby\derby\10.14.1.0\derby-10.14.1.0.jar" com.chen.util.DerbyTest
[FAIL_FILE]
已存在表
Exception in thread "main" java.sql.SQLSyntaxErrorException: The number of values assigned is not the same as the number of specified or implied columns.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(Unknown Source)
	at com.chen.util.DerbyTest.main(DerbyTest.java:35)
Caused by: ERROR 42802: The number of values assigned is not the same as the number of specified or implied columns.
	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
	at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown Source)
	at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
	at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
	... 4 more

Process finished with exit code 1

代码段如下:

package com.chen.util;

import java.sql.*;
import java.util.HashSet;

public class DerbyTest {
    /**
     * 以嵌入式(本地)连接方式连接数据库
     */
    private static final String JDBC_URL = "jdbc:derby:derbyDB;create=true";
    private static final String DRIVER_CLASS = "org.apache.derby.jdbc.EmbeddedDriver";
    private static final String USER = "root";
    private static final String PASSWORD = "root";

    public static void main(String[] args) throws Exception {
        //与数据库建立连接
        Class.forName(DRIVER_CLASS);
        Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
        Statement statement = conn.createStatement();
        String table = "FAIL_FILE";
        DatabaseMetaData metaData = conn.getMetaData();
        ResultSet res = metaData.getTables(null, null, null, new String[]{"TABLE"});
        HashSet<String> hashSet = new HashSet<>();
        while (res.next()){
            hashSet.add(res.getString("TABLE_NAME"));
        }
        System.out.println(hashSet);
        if(hashSet.contains(table)){
            System.out.println("已存在表");
        }else{
            //创建表
            statement.execute("CREATE TABLE FAIL_FILE (id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)primary key,FILE_PATH VARCHAR(255) DEFAULT NULL ,IS_DEL INT NOT NULL DEFAULT 0, UPDATE_TIME VARCHAR(30) DEFAULT NULL)");
            //插入数据
        }
        statement.executeUpdate("INSERT INTO FAIL_FILE VALUES( 'data/file/123545.txt',0, '123456') ");



        //查询数据
        ResultSet resultSet = statement.executeQuery("select * from FAIL_FILE");
        while (resultSet.next()) {
            System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("FILE_PATH") + ", " + resultSet.getString("IS_DEL"));
        }
        //关闭连接
        statement.close();
        conn.close();
    }
}

需要把insert语句指定字段名修改为:

statement.executeUpdate("INSERT INTO FAIL_FILE (FILE_PATH,IS_DEL,UPDATE_TIME)VALUES( 'data/file/123545.txt',0, '123456') ");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要选择一个嵌入式数据库,例如H2,HSQL或Derby,需要考虑以下几点: 1. 功能和性能:首先要评估所需的功能和性能需求。嵌入式数据库不同于传统的客户端-服务器数据库,通常被用于单用户或小规模应用中。因此,需要根据具体情况选择适合的数据库。H2、HSQL和Derby都是面向嵌入式应用的数据库,提供了高度的灵活性和出色的性能。 2. 适应性和易用性:考虑数据库的适用性和易用性对于开发人员来说也是非常重要的。需要考虑的因素包括开发工具、文档和社区支持等。H2、HSQL和Derby在这方面都有很好的表现,提供了易于使用和广泛的文档和社区支持。 3. 数据一致性和可靠性:对于数据库来说,数据一致性和可靠性是至关重要的。嵌入式数据库需要能够保证数据的一致性和可靠性,在应用程序崩溃或断电等异常情况下能够正确处理数据。H2、HSQL和Derby都提供了事务支持和数据持久化功能,可以保证数据的完整性和可靠性。 4. 可扩展性和兼容性:考虑到未来可能的需求变化,数据库的可扩展性和兼容性也是需要考虑的因素。可以评估数据库的扩展性和兼容性,看是否能够轻松地支持未来的需求变化。H2、HSQL和Derby都提供了良好的兼容性和扩展性,可以满足大多数嵌入式应用的需求。 总之,要选择一个合适的嵌入式数据库,需要综合考虑功能性能、适应性易用性、数据一致性可靠性以及可扩展性兼容性等因素。根据具体的需求和情况,可以选择H2、HSQL或Derby中的一个作为嵌入式数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值