SQLSyntaxError: Reading queries from text file: derby
SQLSyntaxError: Reading queries from text file: derby
我认为从文本文件中读取 sql 查询会很好。
这是我所做的:
- 获取连接(似乎没问题)
- 已创建语句对象 (-do-)
- 将自动提交设置为 false (-do-)
- 从文本文件中将查询读入集合 (-do-)
- 问题:在语句中使用 execute(String)...
之后我回滚并关闭连接...
这是我的代码:现在放在一个 class
中
import java.sql.*;
import java.util.*;
import java.io.*;
class Test2{
private static void execute(Collection<String> queries,
Statement stmt) throws SQLException{
for(String query : queries){
query.trim();
stmt.execute(query);
}
}
private static Collection<String> getQueries(String s)
throws IOException{
InputStream is = new BufferedInputStream
(new FileInputStream(s));
int content = 0;
StringBuilder sb = new StringBuilder();
while((content = is.read()) != -1){
sb.append((char)content);
}
String s2 = sb.toString();
Collection<String> queries = Arrays.asList(s2.split(";"));
return queries;
}
private static Connection getConnection()
throws SQLException{
Connection conn = DriverManager
.getConnection("jdbc:derby:testDB",
"", "");
return conn;
}
private static void display(ResultSet set, int columnNos)
throws SQLException{
while(set.next()){
int i = 1;
while(i <= columnNos){
String s = set.getString(i);
System.out.println(s + " ");
i++;
}
}
}
public static void main(String args[]) throws Exception{
Connection conn = getConnection();
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
Collection<String> queries = getQueries("queries.txt");
System.out.println(queries);
try{
execute(queries, stmt);
}
catch(Exception e){
System.out.println(e);
conn.rollback();
}
conn.close();
}
}
我是不是忽略了什么?通常作为字符串传递的查询工作正常...
[Create table test(message varchar(20)),
Insert into test values('Hello World'),
Select * from test,
Drop table test,
]
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "<EOF>" at line 1, c
olumn 2.
您的日志显示查询列表包含一个空白字符串作为其最后一个元素。空白字符串不是有效的 SQL 查询。
只是一个建议:这种问题使用调试器很容易找到。学习使用它。它非常简单直观,可以为您节省很多时间。
此外,query.trim();
没有做任何有用的事情。需要换成query = query.trim();
.
我认为从文本文件中读取 sql 查询会很好。 这是我所做的:
- 获取连接(似乎没问题)
- 已创建语句对象 (-do-)
- 将自动提交设置为 false (-do-)
- 从文本文件中将查询读入集合 (-do-)
- 问题:在语句中使用 execute(String)...
之后我回滚并关闭连接...
这是我的代码:现在放在一个 class
中 import java.sql.*;
import java.util.*;
import java.io.*;
class Test2{
private static void execute(Collection<String> queries,
Statement stmt) throws SQLException{
for(String query : queries){
query.trim();
stmt.execute(query);
}
}
private static Collection<String> getQueries(String s)
throws IOException{
InputStream is = new BufferedInputStream
(new FileInputStream(s));
int content = 0;
StringBuilder sb = new StringBuilder();
while((content = is.read()) != -1){
sb.append((char)content);
}
String s2 = sb.toString();
Collection<String> queries = Arrays.asList(s2.split(";"));
return queries;
}
private static Connection getConnection()
throws SQLException{
Connection conn = DriverManager
.getConnection("jdbc:derby:testDB",
"", "");
return conn;
}
private static void display(ResultSet set, int columnNos)
throws SQLException{
while(set.next()){
int i = 1;
while(i <= columnNos){
String s = set.getString(i);
System.out.println(s + " ");
i++;
}
}
}
public static void main(String args[]) throws Exception{
Connection conn = getConnection();
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
Collection<String> queries = getQueries("queries.txt");
System.out.println(queries);
try{
execute(queries, stmt);
}
catch(Exception e){
System.out.println(e);
conn.rollback();
}
conn.close();
}
}
我是不是忽略了什么?通常作为字符串传递的查询工作正常...
[Create table test(message varchar(20)),
Insert into test values('Hello World'),
Select * from test,
Drop table test,
]
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "<EOF>" at line 1, c
olumn 2.
您的日志显示查询列表包含一个空白字符串作为其最后一个元素。空白字符串不是有效的 SQL 查询。
只是一个建议:这种问题使用调试器很容易找到。学习使用它。它非常简单直观,可以为您节省很多时间。
此外,query.trim();
没有做任何有用的事情。需要换成query = query.trim();
.