我有这种简单的查询,它返回给定id的非空整数字段:
SELECT field1 FROM table WHERE id = 123 LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
问题是如果找不到id,则结果集为空.我需要查询始终返回一个值,即使没有结果.
我有这个东西工作,但我不喜欢它,因为它运行2次相同的子查询:
SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);
Run Code Online (Sandbox Code Playgroud)
如果行存在,则返回field1,否则返回0.是否可以改进?
谢谢!
编辑以下一些注释和答案:是的,它必须在单个查询语句中,我不能使用计数技巧,因为我只需要返回1个值(仅供参考我使用Java/Spring方法运行查询SimpleJdbcTemplate.queryForLong() ).
我使用的是Android Studio 2.1.3.当我运行Android应用程序时,我选择了AVD,在哪里可以通过命令行选项,如-http-proxy?我甚至没有在运行配置中找到方法.
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("America/New_York"));
try {
System.out.println(df.format(cal.getTime()));
System.out.println(df.parse(df.format(cal.getTime())));
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
2011-09-24 14:10:51 -0400
9月24日星期六20:10:51 CEST 2011
为什么当我解析格式()得到的日期时,它不尊重时区?
我有一个Lambda函数,每次执行时都需要从S3读取一个文件.
该文件非常小,大约200字节,S3桶位于美国标准区域,Lambda函数位于us-east-1区域(因此相同的区域).读取文件需要10到15秒,为什么这么慢?
谢谢.
编辑:一些代码
long start = System.nanoTime();
AmazonS3Client s3Client = new AmazonS3Client();
S3Object propertyFile = null;
try {
propertyFile = s3Client.getObject(S3_BUCKET_NAME, S3_PROPERTY_FILE);
} catch (Exception e) {...}
try (InputStream in = propertyFile.getObjectContent()) {
PROPERTIES.load(in);
} catch (Exception e) {...}
LOGGER.debug("S3 access " + (System.nanoTime() - start));
Run Code Online (Sandbox Code Playgroud)
编辑#2:布鲁克斯的建议之后我做了
AmazonS3Client s3Client = new AmazonS3Client(new InstanceProfileCredentialsProvider());
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
Unable to load credentials from Amazon EC2 metadata service
Run Code Online (Sandbox Code Playgroud)
编辑#3:
分配给Lambda函数的内存为256MB,当我分配1024MB时,需要3-4秒,这仍然太慢(从我的计算机本地测试时需要大约1-2秒).
我意识到我需要为AWS Lambda函数分配比所需内存更多的内存,否则我得到:
{
"errorMessage": "Metaspace",
"errorType": "java.lang.OutOfMemoryError"
}
Run Code Online (Sandbox Code Playgroud)
例如,我有一个分配了128MB的Lambda函数,它会随着该错误一直崩溃,而在控制台中它会显示"最大内存使用56 MB".
然后我分配256MB,它不再崩溃,但它总是给我一个75到85MB之间的"最大内存使用".
怎么会?谢谢.
在我的Spring Boot应用程序中,application.properties我有这个定义:
someProp=${SOME_ENV_VARIABLE}
Run Code Online (Sandbox Code Playgroud)
但这是一个仅在某些环境中设置的可选值,我这样使用它
@Value("${someProp:#{null}}")
private String someProp;
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,当env时我得到了这个错误.var不存在
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
我期待Spring只是设置一个空值,如果没有找到任何PropertySource.
如何使它可选?
这个查询在MySQL 5.1.57中给出了一个错误,但在5.1.53中工作:
DELETE f
FROM table1 AS f
JOIN table2 AS dsy
JOIN table3 AS ds
JOIN table4 AS dp
JOIN table5 AS dg
WHERE
dsy.f1 = f.f1
AND ds.f2 = f.f2
AND dp.f3 = f.f3
AND dg.f4 = f.f4
AND dsy.school_year = 2011
AND ds.id = 29620
AND dp.id = 14120
AND dg.grade_level = 5;
Run Code Online (Sandbox Code Playgroud)
错误是:MULTI DELETE中的未知表'f'
谢谢!
编辑:实际上这个查询工作,事情是我使用模式名称来声明我的表像schema.table1(我删除它在这里发布一个更清晰的查询),其模式名称,它打破...
我能够部署一个与 Weld 配合良好的 RESTEasy 应用程序(这意味着我的 CDI 可以工作),但我在集成测试中遇到了一些问题。我收到此错误:
org.jboss.weld.exceptions.DeploymentException:
WELD-001408: Unsatisfied dependencies for type SomeService with qualifiers @Default
Run Code Online (Sandbox Code Playgroud)
测试时:
@RunWith(WeldJUnit4Runner.class)
public class SomeServiceIT {
@Inject
private SomeService service;
@Test
public void test() {
System.out.println(service);
}
}
Run Code Online (Sandbox Code Playgroud)
我日志中的最后一条消息是
DEBUG::WELD-000100: Weld initialized. Validating beans
Run Code Online (Sandbox Code Playgroud)
src/test/resources/META-INF/beans.xml 的内容:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我尝试了该cdi-unit库并且它可以工作,但我需要使用我自己的库WeldJUnit4Runner,目前是:
public class WeldJUnit4Runner extends BlockJUnit4ClassRunner {
private final Weld weld;
private final WeldContainer container;
public WeldJUnit4Runner(Class<?> klass) throws InitializationError {
super(klass);
this.weld = new …Run Code Online (Sandbox Code Playgroud) 我有一个关于这一列的表:
last_modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
看起来我无法插入带有自定义时间戳的行,我收到此错误:
日期时间值不正确:第11行第'last_modified'列的'1145868501'
我试图用来自另一个表的数据填充此表,其他表只有一个创建时间字段,这是一个DATETIME所以我使用UNIX_TIMESTAMP(creation_time)来填充时间戳.
我认为带有"DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"的timestamp列阻止我插入自己的东西,对吗?如果是,官方文件在哪里,以及最佳解决方案是什么?首先创建一个简单的时间戳,然后在插入数据后更改表格?
谢谢!
编辑:因为人们建议我不要使用UNIX_TIMESTAMP,我不得不说我不想在开头使用它,但是我遇到了这样的错误:日期时间值不正确:'2010-03-28 02:15 :51'列'last_modified'所以我认为我必须插入一个"真正的"时间戳...
我有一个可能很大(> 4GB)的日志文件,所以我正在考虑“动态压缩它”,这意味着我想直接在 gzip 文件的末尾插入文本(我想创建自己的文件附加程序用于登录)。是否可以将内容附加到现有的 gzip 文件中?看起来唯一的方法是用 GZIPInputStream 打开现有的,读取它并用 GZIPOutputStream 将数据写入一个新文件中,然后在新文件的末尾附加新的东西,然后我想删除旧的 gzip 并重命名旧名称的新名称...
我错了吗?更好的想法?
谢谢!