我认为从文本文件中读取sql查询会很好。 这是我做的:
之后我回滚并关闭连接...
这是我的代码:暂时放在单个类
中 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();
}
}
我忽略了什么吗?通常作为String传递的查询工作正常......
[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.
答案 0 :(得分:0)
您的日志显示查询列表包含空字符串作为其最后一个元素。空字符串不是有效的SQL查询。
只是一个建议:这是使用调试器找到的那种微不足道的问题。学习使用它。它非常简单直观,可以为您节省生活中的日常生活。
此外,query.trim();
没有做任何有用的事情。它需要由query = query.trim();
替换。