ope*_*sas 2 mysql h2 playframework playframework-2.0
我正在开发模式下使用内存数据库中的H2,但我希望它能像mysql数据库一样尽可能地运行(参见http://www.h2database.com/html/features.html#compatibility)
这是我在application.conf文件中的配置:
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play;MODE=MYSQL;DB_CLOSE_DELAY=-1"
Run Code Online (Sandbox Code Playgroud)
测试它我只是运行"播放"并从播放控制台发出"h2-browser"并在url jdbc字段中输入"jdbc:h2:mem:play; MODE = MYSQL; DB_CLOSE_DELAY = -1"
以下语句在mysql中正常工作:
CREATE TABLE `tmp` (
`name` varchar(50) NOT NULL
);
insert into tmp (name) values ('slash: \\, simple quotes \', double quotes \" -');
select * from tmp;
Run Code Online (Sandbox Code Playgroud)
但是在h2控制台中我得到一个错误,我可以逃脱的唯一字符就是单引号,只需在它前面添加另一个单引号.(也尝试输入'SET MODE MySQL;')
有没有办法让h2在play的框架h2-browser中表现得像mysql?还是只是h2的限制?
您提供的链接http://www.h2database.com/html/features.html#compatibility记录了H2支持的确切兼容性功能.未支持未记录的内容.在这种情况下,似乎问题是在字符串文字中转义的'反斜杠':
'slash: \\, simple quotes \', double quotes \" -'
Run Code Online (Sandbox Code Playgroud)
反斜杠不是ANSI SQL的转义字符; 要逃避单引号,您需要使用两个单引号.问题是这可能不适用于MySQL,因为单个反斜杠仍然是转义字符:
'slash: \, simple quotes '', double quotes " -'
Run Code Online (Sandbox Code Playgroud)
对于这个问题,解决方案是使用ANSI模式进行MySQL,另一种解决方案是始终对String文字使用绑定变量(JDBC中的PreparedStatement).
| 归档时间: |
|
| 查看次数: |
3393 次 |
| 最近记录: |