我正在尝试使用PostgreSQL 9.1.3学习SQL.我想了解一些让我觉得不一致的行为.以机智:
这有效:
WITH innermost AS (SELECT 2)
SELECT * FROM innermost
UNION SELECT 3;
Run Code Online (Sandbox Code Playgroud)
我明白了:
?column?
----------
2
3
Run Code Online (Sandbox Code Playgroud)
这有效:
WITH outmost AS (
(WITH innermost AS (SELECT 2)
SELECT * FROM innermost)
)
SELECT * FROM outmost;
Run Code Online (Sandbox Code Playgroud)
结果:
?column?
----------
2
Run Code Online (Sandbox Code Playgroud)
这也有效:
WITH outmost AS (
SELECT 1
UNION (WITH innermost AS (SELECT 2)
SELECT * FROM innermost)
)
SELECT * FROM outmost;
Run Code Online (Sandbox Code Playgroud)
我明白了:
?column?
----------
1
2
Run Code Online (Sandbox Code Playgroud)
但是,这并不能正常工作:
WITH outmost AS (
SELECT 1
UNION …Run Code Online (Sandbox Code Playgroud) 我在看别人的源代码(Scala),我看到在IndexedSeq:+=类型的变量上调用运算符.我正在查看该类的scaladocs页面以找出该运算符的作用,但我没有看到它.我想它要么在继承层次结构之外的类中定义,要么scaladocs页面上的javascript隐藏在某个我无法看到它的地方.(实际上它既不是;见下面的答案.)IndexedSeq
我点击scaladocs页面上的每个按钮试图取消隐藏所有内容.我查看了网页的HTML代码.必须有一种方法可以从可以应用它的类的文档中查找运算符.不是吗?
(注意:我使用symbolhound查找了该运算符,所以我知道该运算符现在意味着什么.这个问题一般是关于scala文档,而不是那个特定的运算符.)
我对java很新,对maven来说很新.我可能会使用一些术语不完美.
当我开发我的项目时,我正在使用maven来构建,因为我需要的类不是核心java语言的一部分,我已经<dependency>为我添加了一个适当的部分pom.xml(通常是从mvnbrowser.com复制而不是我真的理解它很好),我已经能够使用我想要的类.效果很好.
现在我遇到了一个我想要使用的java类,它显然在maven工件中不可用.它com.android.sdklib.build.ApkBuilder是随android SDK一起发布的.我写了一个独立的java程序来让我的代码工作; 我使用javac而不是使用maven 编译它,这样可以正常工作.为此,我将包含我想要的类的jar文件sdklib.jar放入我的jre/lib/ext目录(/usr/local/jdk1.6.0/jre/lib/ext在FreeBSD机器上),我的import com.android.sdklib.build.ApkBuilder行编译得很好,我可以参考ApkBuilder并使用它没有任何问题.
现在,当我将我的工作代码复制到我的maven项目中并尝试构建时mvn project,我会package com.android.sdklib.build does not exist在导入行上cannot find symbol: class ApkBuilder出错,并在我引用的错误中出现错误ApkBuilder.
环顾网络,我在android-maven-plugin这里找到:http://code.google.com/p/maven-android-plugin/.它在maven-android-sdk-deployer这里引用我:https://github.com/mosabua/maven-android-sdk-deployer.这些导致一开始听起来很有希望,但据我所知,他们的目的是使用maven开发android应用程序,这不是我想要做的.我只是想让我的java程序操作android apk文件,但我的java程序本身不能在Android设备上运行.此外,Android SDK是用于Linux,而不是我正在使用的FreeBSD,所以我不能按照安装说明maven-android-sdk-deployer.我还发现了一个被调用的工件,maven-apkbuilder-plugin但这似乎也是为了创建android应用程序,我没有看到它的文档.所以我没有追求这些线索.
看起来最简单的事情就是让编译器在运行时查看我的jre/lib/ext文件夹中的sdklib.jar文件mvn package.但也许这不是要走的路.或者也许我可以对我做一个简单的改变pom.xml,这将导致编译器找到sdklib.jar.我查看了http://maven.apache.org/pom.html#Build_Settings上的pom文档,但没有看到这样做的方法.无论如何,我确信至少有一个解决方案; 我还不知道(还).
我有什么选择?ApkBuilder …
简而言之:我的应用程序使用Play web framework 2.5.1版.我想使用Deadbolt授权系统和Slick来访问我的数据库中的用户授权信息.我怎样才能做到这一点? Deadbolt是专门为Play而制作的,而且Play带有Slick集成的开箱即用功能,所以它应该是可能的,如果不是很容易的话.
根据Deadbolt文档中的"Integrating Deadbolt",我扩展了这个DeadboltHandler特性.它的抽象getSubject()方法似乎是进行数据库查询的地方(所以说文档但没有任何示例).该方法作为参数接收AuthenticatedRequest并返回Subject基本上经过身份验证的用户标识,以及角色和权限(授权).
我被卡住了,因为虽然Play附带了Slick集成,但文档仅描述了如何在Play控制器中使用它.(注意我想使用依赖注入来执行此操作,因为使用全局查找已弃用且容易出错)
我在我的控制器中成功使用Deadbolt来限制对某些资源的访问,但是对于Deadbolt来说,控制器似乎是错误的地方,正在对授权细节进行数据库查询(如果是,那么这DeadboltHandler将是无用的).控制器构造函数签名定义类似于(注意控制器访问存储Web内容的默认数据库而不是授权数据库):
class Application @Inject()(
dbConfigProvider: DatabaseConfigProvider,
playConfig: play.api.Configuration,
deadbolt: DeadboltActions
) extends Controller {
Run Code Online (Sandbox Code Playgroud)
这样可行.但是,类似地注释DeadboltHandler扩展名@Inject无法提供对数据库的Slick访问:
class AuthHandler @Inject()(@play.db.NamedDatabase("auth") dbConfigProvider: DatabaseConfigProvider)
extends DeadboltHandler {
Run Code Online (Sandbox Code Playgroud)
结果是
not enough arguments for constructor AuthHandler: …Run Code Online (Sandbox Code Playgroud) 我正在开发一个支持网络的Android应用程序,它使用SSL客户端证书来验证和保护与我的服务器的连接.
我有两个问题:(1)我应该使用自签名服务器证书还是商业证书?并且(2)我应该在用户安装的apk文件中包含服务器证书,还是应该让应用程序连接到我的服务器以通过网络获取服务器证书(为了使设备信任服务器证书)?
当我问我"应该"做什么时,我会问每个选择有什么好处和坏处?
现在我正在使用apk文件中包含的自签名证书.当用户第一次运行应用程序时,它会将包含的自签名证书读入信任存储区,以便设备连接到我的服务器而不会有任何投诉.我想如果我使用商业证书,那么我的问题#2可能没有实际意义,因为设备可能信任来自服务器的证书而没有任何问题.
一个可能相关的细节:这个应用程序没有通过Android市场分发.用户将从我的服务器下载应用程序,因此我可以包含我想要的任何服务器证书,如果需要,可以包括每个用户的不同服务器证书.
我对我的两个问题的每个可能答案的各种优点和缺点都有自己的想法,但我对其他人 - 希望有安全意识 - 对此事有所说明感兴趣.
提前致谢!
我目前正在使用sbt-native-packager为我的scala应用程序生成启动脚本.我正在使用packageArchetype.java_application.我在sbt中创建脚本:
sbt clean myproject/stage
Run Code Online (Sandbox Code Playgroud)
然后通过将created lib和bin目录复制到安装目录来"安装"应用程序.我不是将它分发给任何人,所以我不是在创建一个可执行的jar或tarball或类似的东西.我只是编译我的类,并将我的jar和所有库依赖项jar放在一个地方,以便启动脚本可以执行.
现在我想在我的应用程序中添加第二个主类,所以我想在target/universal/stage/bin运行时出现第二个启动脚本sbt stage.我希望它将是相同的脚本,但具有不同的名称并app_mainclass设置为不同的类.我该怎么做?
我正在使用sbt-native-packager插件为我的应用程序生成一个启动脚本,这非常方便,因为这个插件生成了包含所有库依赖项的正确类路径规范.我没有分发这个应用程序,因此我没有把整个东西打包成一个tarball.我只使用libsbt-native-packager生成的目录,其中包含我的项目所依赖的所有jar文件,包括第三方库以及包含我自己的类和资源文件的jar文件.
在我的项目src/main/resources目录中,我有一些文件,我希望能够编辑,而不必使用sbt-native-packager重新生成整个安装,例如配置文件.这很困难,因为这些文件在我的所有类的jar文件中都被压缩了.
问题:如何告诉sbt-native-packager不要将我的资源文件放入jar文件中,同时仍然生成具有正确类路径的启动脚本,以便我的应用程序找到并读取这些资源文件,因为它们现在是从jar文件中?如果这意味着将所有类文件保留在一个好的jar文件中,只要文件src/main/resources保留为我可以更改的文件,而无需重新调用sbt stage,只要启动脚本有效.
本Option类有一个名为方法fold()。文档说:
sealed abstract class Option[+A]
fold[B](ifEmpty: ? B)(f: (A) ? B): B
Run Code Online (Sandbox Code Playgroud)
如果scala.Option为非空,则返回将f应用于此scala.Option的值的结果。否则,计算表达式ifEmpty。
该文档继续:
这等效于scala.Option映射f getOrElse ifEmpty。
但这是真的吗?有人告诉我,在某些情况下,某些类型的值存在差异,但从来没有一个体面的解释。这两种构造在不同情况下的确切情况是什么?为什么?
如果我将一个文字表达式作为参数传递给函数,那么它不应该与首先计算相同的文字表达式相同,然后将变量绑定到从该评估返回的值,然后将变量名称作为相同的参数传递同样的功能?如果该文字表达式返回函数参数的错误类型,则跳过将值赋值给中间变量的步骤,该中间变量的类型Scala从表达式的返回值推断,不应该将该不兼容类型传递给之前的函数它引发了类型不匹配错误,应该吗?然而,这不是以下示例所示的内容吗?
在这里,我尝试获取类型的函数参数Array[Super]以接受值Array[Sub].在Scala repl中声明以下内容.注意函数的单个参数的类型:
class Super
class Sub extends Super
def wantsSuperArray(a: Array[Super]) { println(a.size) }
Run Code Online (Sandbox Code Playgroud)
然后构造一个实例 Sub
scala> val s = new Sub
s: Sub = Sub@2c9fa2fb
Run Code Online (Sandbox Code Playgroud)
创建一个Array[Sub]:
scala> val subArray = Array(s)
subArray: Array[Sub] = Array(Sub@2c9fa2fb)
Run Code Online (Sandbox Code Playgroud)
以下表示泛型Array在其元素类型中是不变的,并且a Array[Sub]不是Array[Super]偶数,尽管a Sub是Super:
scala> wantsSuperArray(subArray)
<console>:13: error: type mismatch;
found : Array[Sub]
required: Array[Super]
Note: Sub <: Super, but class Array is invariant in type T. …Run Code Online (Sandbox Code Playgroud) 我在CLI程序中使用Scala JLine.它工作正常,但每次重新启动程序时都会忘记我的历史记录.我看到一个叫做的类FileHistory,我看到这个ConsoleReader类有一个叫做setHistory()实例的方法FileHistory.我希望调用该方法会导致它创建或加载并保存包含我的历史记录的文件.但事实并非如此.
不幸的是,文档几乎不存在.如何在下次运行启用JLine的程序时记住我在上一次运行中键入的命令?
mirandes给出了正确的答案.感谢mirandes和som-snytt对他们的帮助(是的,有帮助的)反应.
根据THE Java Programming Language 4th ed.第15.7.1节"类型代币":
getClass接受编译器的特殊处理:如果在具有静态类型 T的引用上调用 getClass,则编译器将 getClass的返回类型视为 Class.这样可行:
String str = "Hello";
Class<? extends String> c2 = str.getClass(); // compiler magic
Run Code Online (Sandbox Code Playgroud)
类中方法的javadoc提供了getClassObject更多细节:
[实际结果类型
getClass()]是Class<? extends |X|>其中|X|是静态类型在其上的getClass称为表达的擦除.例如,此代码片段中不需要强制转换:Run Code Online (Sandbox Code Playgroud)Number n = 0; Class<? extends Number> c = n.getClass();
这是Java和getClass()类的方法Object.将注意力转向Scala,SLS 3.2.10读取,
存在类型的占位符语法
句法:
Run Code Online (Sandbox Code Playgroud)WildcardType ::= ‘_’ TypeBoundsScala支持存在类型的占位符语法.甲通配符类型的形式是_>:L <:U ...一个通配符类型是用于存在性量化型变量,其中存在量化是隐式的简写.
...设T = pc [targs,T,targs']是参数化类型,其中 …
使用 PostgreSQL 9.2,我定义了一个函数,它接受一个参数并返回一个多列表。我想将该函数应用于 CTE 行中的多个参数。我得到的结果是一列元组,而不是我想要的多列。以机智:
sandbox=# CREATE FUNCTION myfunc(arg int) RETURNS table(col1 int, col2 int) AS
sandbox-# 'SELECT arg+1, arg+2'
sandbox-# LANGUAGE SQL;
CREATE FUNCTION
sandbox=# select * from myfunc(1);
col1 | col2
------+------
2 | 3
(1 row)
sandbox=# WITH rows AS (
sandbox(# SELECT 1 AS arg UNION SELECT 2 AS arg
sandbox(# )
sandbox-# SELECT * FROM (SELECT myfunc(arg) FROM rows) x;
myfunc
--------
(2,3)
(3,4)
(2 rows)
Run Code Online (Sandbox Code Playgroud)
给定 CTE,以下两个SELECT子句作为具有单个类型列的表彼此评估相同record:
SELECT myfunc(arg) FROM …Run Code Online (Sandbox Code Playgroud) sql postgresql user-defined-functions common-table-expression
scala ×8
java ×2
postgresql ×2
sql ×2
android ×1
casting ×1
classpath ×1
covariance ×1
deadbolt-2 ×1
generics ×1
jar ×1
jline ×1
maven ×1
slick ×1
ssl ×1
type-bounds ×1
types ×1
union ×1