Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 SQL中MySQL和SQLite的差异_Java_Mysql_Sqlite_Jdbc - Fatal编程技术网

Java SQL中MySQL和SQLite的差异

Java SQL中MySQL和SQLite的差异,java,mysql,sqlite,jdbc,Java,Mysql,Sqlite,Jdbc,我正在编写一个java应用程序,它同时使用SQLite和MySQL以及JDBC 这些数据库的SQL有什么不同吗?我可以对SQLite和MySQL使用相同的查询吗?或者是否有任何特定于数据库的东西,在另一个数据库上不起作用 由于我只使用了MySQL,所以我对SQLite知之甚少如果你坚持下去,你会没事的 MySQL和SQLite都缺少一些SQL92特性(例如,完全外部连接)。 MySQL既有右连接,也有左连接,SQLite只有左连接。SQLite不支持外键约束,MySQL和MyISAM表也不支持。

我正在编写一个java应用程序,它同时使用SQLiteMySQL以及JDBC

这些数据库的SQL有什么不同吗?我可以对SQLiteMySQL使用相同的查询吗?或者是否有任何特定于数据库的东西,在另一个数据库上不起作用

由于我只使用了MySQL,所以我对SQLite

知之甚少如果你坚持下去,你会没事的

MySQL和SQLite都缺少一些SQL92特性(例如,完全外部连接)。 MySQL既有右连接,也有左连接,SQLite只有左连接。SQLite不支持外键约束,MySQL和MyISAM表也不支持。
SQLite当然没有GRANT/REVOKE,因为权限系统是基于底层操作系统的文件权限的。

一个很大的区别在于。SQLite允许您在任何列中放置任何类型的数据。但是,如果可能的话,它会将数据强制转换为声明的列类型。

我正在做类似的事情。除了我提到的一些差异之外,还有一些差异:

  • 在带有Xerial JDBC驱动程序的SQLite3的较新版本中,外键确实是受支持的。SQLite支持内联外键约束定义:
    CREATE TABLE Blah(异化整数引用OtherTable(id))

    MySQL(使用InnoDB)将接受相同的语法,但实际上不会强制执行约束,除非您使用一个单独的外键子句来显式命名外键表和键列:
    创建表Blah(异化整数,外键异化引用OtherTable(id))

  • SQLite JDBC驱动程序的旧版本不支持语句;修正了较新的静电驱动程序

  • 自动递增键的语法不同;SQLite:(id整数主键ASC,…);MySQL:(id整数主键自动递增,…)

  • SQLite接受n向逗号分隔联接:
    从A、B、C上选择*(A.x=B.y,B.y=C.z);

    MySQL没有;以下两方面的工作:
    从A.x=B.y上的内部连接B中选择*在B.y=C.z上选择内部连接C

  • 关于类型差异,SQLite的JDBC驱动程序的一个相关问题是,同一列可以通过ResultSet.getObject(.)生成不同的类型;例如,一个整数或一个长整数取决于所包含数字的大小

  • SQLite中的自动递增键必须声明为整型;在MySQL中,任何数字整数类型都有效


SQLite从3.6.19版开始就支持外键约束,请参阅。您能否验证正在使用的SQLite jdbc驱动程序的哪个版本似乎支持返回生成的密钥?至少在3.6.20.1之前,我尝试过许多不同的版本,但都没有成功