我有一个存储过程"test",看起来像:
CREATE PROCEDURE test
@name varchar(32)
AS
DECLARE
@login_status TINYINT,
@syb_login varchar(20),
@syb_pass varchar(20)
...
..
BEGIN
SELECT @status = 0
SELECT @login as login,
@pass as pass,
@status as status
RETURN 0
END
Run Code Online (Sandbox Code Playgroud)
我需要将一个输入参数"myName"作为输入参数传递给此过程,然后返回登录,传递和状态作为输出(仅来自一个记录)参数.
在JDBC中,我试着像下面这样做:
String query = "{call test(?,?,?)}";
System.out.println(query);
CallableStatement proc = null;
ResultSet rs;
try {
proc = connection.prepareCall(query);
proc.setString(1, "myName");
proc.registerOutParameter(2, java.sql.Types.VARCHAR);
proc.registerOutParameter(3, java.sql.Types.VARCHAR);
proc.execute();
System.out.println(proc.getString(2));
Run Code Online (Sandbox Code Playgroud)
这总是给出例外:
java.sql.SQLException: JZ0SG: A CallableStatement did not return as many output parameters as the application had registered for it. …Run Code Online (Sandbox Code Playgroud) 我从hive表myTable中执行以下操作.
INSERT OVERWRITE LOCAL DIRECTORY'/ myDir/out'SELECT concat_ws('',NAME,PRODUCT,PRC,field1,field2,field3,field4,field5)FROM myTable;
因此,此命令在文件夹out /中生成2个文件000000_0和000001_0.
但是,我需要将内容作为单个文件.我该怎么办?
我正在使用Executor Service创建3个线程(扩展Runnable)并提交它们,从我的Main类执行三个任务.如下所示:
ExecutorService executor = Executors
.newFixedThreadPool(3);
A a= new A();
B b= new B();
C c= new C();
/**
* Submit/Execute the jobs
*/
executor.execute(a);
executor.execute(b);
executor.execute(c);
try {
latch.await();
} catch (InterruptedException e) {
//handle - show info
executor.shutdownNow();
}
Run Code Online (Sandbox Code Playgroud)
当线程中发生异常时,我抓住它并执行System.exit(-1).但是,如果发生任何异常,我需要返回主类并在那里执行一些语句.这该怎么做?没有FutureTask,我们可以从这些线程返回一些东西吗?
我正在逐行读取由固定长度记录组成的文本文件,并附加一些值,然后写入另一个文件.
像往常一样,我使用BufferedWriter,发现它需要大约20分钟来读取,附加值并写入另一个文件.
BufferedWriter br = new BufferedReader(new FileReader(infile));
if (br != null) {
for (String line; (line= br.readLine()) != null;) {
i= i+ 1;
line += " " + String.format("%09d", i) + "S";
try {
bw = new BufferedWriter(new FileWriter("out.txt",
true));
bw.write(line);
bw.newLine();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用过的代码.读取整个文件并附加值仅需7秒,但写入文件似乎很慢.我知道BufferedWriter的速度要慢得多.我没有增加缓冲区大小,因为我正在逐行阅读,出于同样的原因没有尝试nio.
建议我提高速度的方法?
当我执行:
@SqlQuery("select A.field1, A.field2, C.field3, C.field4, C.field5 from "
+ "table1 A, table2 B, table3 C WHERE A.field2 >= '1500' AND A.field2 < '9500' "
+ "AND A.field1 NOT IN (SELECT field1 FROM table4) AND A.field1 = B.field1 AND "
+ "(B.field3 = 'NAME' OR B.field3 ='STRT') order by A.field1 ASC")
Run Code Online (Sandbox Code Playgroud)
我不断收到以下错误:
problem parsing template 'c2VsZWN0IEEuVVBDX05VTSwgQS5NT0RVTEVfTlVNLCBDLkNIUl9OTSwgQy5DSFJfQ0QsIEMuVkwgZnJvbSBVUEMgQSwgVVBDX0NIUiBCLCBDSFJfVkwgQyBXSEVSRSBBLk1PRFVMRV9OVU0gPj0gJzEwMDAnIEFORCBBLk1PRFVMRV9OVU0gPCAnOTAwMCcgQU5EIEEuVVBDX05VTSBOT1QgSU4gKFNFTEVDVCBVUENfTlVNIEZST00gVVBDX0FDVFYpIEFORCBBLlVQQ19OVU0gPSBCLlVQQ19OVU0gIEFORCAoQi5DSFJfTk0gPSAnQlJBTkQnIE9SIEIuQ0hSX05NID0nVFlQRScpIEFORCBCLk1PRFVMRV9OVU0gPSBDLk1PRFVMRV9OVU0gIEFORCBCLkNIUl9OTSA9IEMuQ0hSX05NICBBTkQgQi5DSFJfQ0QgPSBDLkNIUl9DRCBvcmRlciBieSBBLlVQQ19OVU0gQVND'
line 1:373: expecting '>', found '<EOF>'
at org.antlr.stringtemplate.language.AngleBracketTemplateLexer.nextToken(AngleBracketTemplateLexer.java:149)
at antlr.TokenBuffer.fill(TokenBuffer.java:69)
at antlr.TokenBuffer.LA(TokenBuffer.java:80)
at antlr.LLkParser.LA(LLkParser.java:52)
at org.antlr.stringtemplate.language.TemplateParser.template(TemplateParser.java:103)
at org.antlr.stringtemplate.StringTemplate.breakTemplateIntoChunks(StringTemplate.java:850)
at org.antlr.stringtemplate.StringTemplate.setTemplate(StringTemplate.java:441)
at org.antlr.stringtemplate.StringTemplateGroup.defineTemplate(StringTemplateGroup.java:679)
at org.skife.jdbi.v2.sqlobject.stringtemplate.StringTemplate3StatementLocator.locate(StringTemplate3StatementLocator.java:260) …Run Code Online (Sandbox Code Playgroud)