Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件中读取内容以形成java中的sql语句_Java_Mysql_Sql - Fatal编程技术网

从文件中读取内容以形成java中的sql语句

从文件中读取内容以形成java中的sql语句,java,mysql,sql,Java,Mysql,Sql,我有一个文件,其内容如下: employee firstname lastname dob address ... department departmentname numberofemployees departmenthead ... . . . 在这里,每行的第一个字是表名,后跟一定数量的字段。我想读的是每行的第一个单词,如果说第一个单词是employee,那么读这个单词后面的字段直到行的末尾,并根据这些字段形成sqlselect语句。我正在使用下面的代码来读取行中的内容,并查看第一个

我有一个文件,其内容如下:

employee firstname lastname dob address ...
department departmentname numberofemployees departmenthead ...
.
.
.
在这里,每行的第一个字是表名,后跟一定数量的字段。我想读的是每行的第一个单词,如果说第一个单词是
employee
,那么读这个单词后面的字段直到行的末尾,并根据这些字段形成sql
select
语句。我正在使用下面的代码来读取行中的内容,并查看第一个单词是否是特定的匹配项,但我无法继续获取所需的字段并形成
select
语句。我想对任意表名执行此操作

StringBuilder sql = new StringBuilder();
    sql.append("select ");

    File file = new File("abc.txt");
    Scanner scanner = new Scanner(file);
    StringTokenizer st = null;
    while(scanner.hasNextLine())

        String lines = scanner.nextLine();
        if(lines.startsWith("employees"))
           //get the following fields till line ends
           //functionality here which I am unable to get

注意:我想以最好的方式实现上述目标,而不仅仅是使用
扫描仪
。如果有更好的方法,请提供给我。

我将首先回答您如何在不使用扫描仪的情况下有效地读取文件。 可以使用BufferedReader.readLine()函数逐行读取文件。在此之后,您可以标记字符串,因为每个单词都由空格分隔。您可以使用生成的字符串数组来构造sql

BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
String[] splited = line.split("\\s+");
//use splited to construct your sql.   
}  
br.close();
第二个问题就是如何构造sql语句。现在每个单词都在一个字符串数组中,您可以很容易地使用stringBuilder.append()构造一个sql字符串

StringBuilder b=新StringBuilder(“选择”);
字符串tablename=splited[0];
for(int count=1;count
因为您已经阅读了语句的整行内容

String lines = scanner.nextLine();
您只需在空格上拆分此行即可获得每个单词:

String[] tokens = lines.split("\\s+");
然后,您可以通过简单的

tokens[0]
tokens[1]
...
现在,这显然取决于线条的结构。有固定结构吗?它是动态的吗?如果结构是固定的,您可以使用您知道的索引简单地访问数组元素。如果它是一个动态结构,您必须在数组上循环,并可能进行更多检查


其他事项:您应该将变量行重命名为simply line,因为它不包含多行。

可能吗?@Seelenvirtuose您可以提供如何在上述任务中使用String.split的示例吗?
String[]tokens=lines.split(“\s”)
@Seelenvirtuose我的意思是,如果第一个单词与搜索词匹配并形成sql语句,如何读取以下字段直到第一个单词后的行尾select@Seelenvirtuose如果这是一个简单的问题,我很抱歉。我不熟悉这一点,因此当我对(int count=1;count进行
时,我对它没有太多的了解,然后在最后一个字段名之后,我会得到
,也像
从表中选择abc,def一样。如何删除最后一个字段名后的
?请查看StringBuilder的Java文档。您可以找到类似StringBuilder.delete()或deleteCharAt()的方法。使用这些方法删除尾随的“&”字符
tokens[0]
tokens[1]
...