【发布时间】:2015-01-25 13:37:07
【问题描述】:
我认为从文本文件中读取 sql 查询会很好。 这是我所做的:
- 获取连接(看起来不错)
- 已创建语句对象 (-do-)
- 将自动提交设置为 false (-do-)
- 从文本文件中将查询读入集合 (-do-)
- 问题:在语句中使用 execute(String)...
之后我回滚并关闭连接...
这是我的代码:现在放在一个类中
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.
【问题讨论】:
-
我刚开始使用数据库......显示方法只是开箱即用,因为我对 api 了解不多......反正这里没有使用它