SQL语法错误:从文本文件中读取查询:derby

时间:2015-01-25 13:37:07

标签: java mysql sql derby

我认为从文本文件中读取sql查询会很好。 这是我做的:

  1. 获取连接(似乎没问题)
  2. 创建的Statement对象(-do - )
  3. 将autocommit设置为false(-do - )
  4. 从文本文件(-do - )
  5. 中将查询读入集合
  6. 问题:在Statement ...中使用execute(String)
  7. 之后我回滚并关闭连接...

    这是我的代码:暂时放在单个类

        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.
    

1 个答案:

答案 0 :(得分:0)

您的日志显示查询列表包含空字符串作为其最后一个元素。空字符串不是有效的SQL查询。

只是一个建议:这是使用调试器找到的那种微不足道的问题。学习使用它。它非常简单直观,可以为您节省生活中的日常生活。

此外,query.trim();没有做任何有用的事情。它需要由query = query.trim();替换。