Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HyperSQL-上的意外令牌_Java_Database_Hsqldb - Fatal编程技术网

Java HyperSQL-上的意外令牌

Java HyperSQL-上的意外令牌,java,database,hsqldb,Java,Database,Hsqldb,我正试图以以下方式在Java应用程序中使用HyperSQL: import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class Main { static Connection conn; static Statement stat; public static void main(String[] args) { t

我正试图以以下方式在Java应用程序中使用HyperSQL:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Main {

    static Connection conn;
    static Statement stat;

    public static void main(String[] args) {

        try {
            Class.forName("org.hsqldb.jdbc.JDBCDriver" );
        } catch (Exception ex) {
            System.out.println("An error occurred while loading HSQLDB JDBC driver: " + ex.getMessage());
            return;
        }

        try {

            conn = DriverManager.getConnection(
                    "jdbc:hsqldb:file:helper_db;sql.syntax_mys=true");

            stat = conn.createStatement();

            stat.executeUpdate(
                "CREATE TABLE IF NOT EXISTS some_table " +
                     "(" +
                        "foo TEXT PRIMARY KEY, " +
                        "bar TEXT" +
                    ");"
            );

            stat.executeUpdate(
                "INSERT INTO some_table VALUES" +
                        "('foo', 'bar') " +
                        "ON DUPLICATE KEY UPDATE some_table = VALUES" +
                        "('foo', 'bar');"
            );

        } catch (Exception ex) {

            System.out.println("An error occurred: " + ex.getMessage());
            return;

        }

    }
}
此代码提供以下输出:

An error occurred: unexpected token: ON

我做错了什么?如何解决此问题?

HSQLDB不支持重复的
语法(手册中明确说明了该语法)

假设values子句中至少有一列是唯一键,则需要使用MERGE:

MERGE INTO some_table ut
USING (
  VALUES
    ('foo', 'bar')
) AS md (foo_column, bar_column) ON (ut.foo_column = md.foo_column)
WHEN MATCHED THEN UPDATE
     SET ut.bar_column = md.bar_column
WHEN NOT MATCHED THEN
  INSERT (foo_column, bar_column)
  VALUES (md.foo_column, md.bar_column);

请查看手册了解更多详细信息:

HSQL的更新版本现在支持MySQL的
重复密钥更新功能


请参阅:

@a_horse_,没有名字,但我使用的是MySQL语法(sql.syntax_mys=true),它支持复制。还是它没有完全实现MySQL语法?我需要用什么?我只需要做smth之类的替换,为什么你认为HSQLDB支持MySQL语法?这是一个不同的DBMS,因此有不同的语法(在手册中有记录)@a_horse_和_no_名称我认为sql.syntax_mys=true做它,不?你读过关于它做什么的描述了吗@一匹没有名字的马对不起,谢谢