Java 我在数据库中得到的是变量的名称,而不是变量的值

Java 我在数据库中得到的是变量的名称,而不是变量的值,java,mysql,jdbc,Java,Mysql,Jdbc,我想从文本文件的特定列中获取数据,并将其保存到数据库的特定列中。变量NumberOfLine保存在数据库中,但我希望该变量的值必须是某个数字(作为字符串),我不明白它为什么不起作用。你有什么建议吗 import java.io.*; import java.util.*; import java.sql.*; public class TxtFile { public static void main(String[] args) throws IOException {

我想从文本文件的特定列中获取数据,并将其保存到数据库的特定列中。变量
NumberOfLine
保存在数据库中,但我希望该变量的值必须是某个数字(作为字符串),我不明白它为什么不起作用。你有什么建议吗

import java.io.*;
import java.util.*;
import java.sql.*;
public class TxtFile {

    public static void main(String[] args) throws IOException {

        try{  
            Class.forName("com.mysql.jdbc.Driver");  
            Connection con=DriverManager.getConnection(  
            "jdbc:mysql://localhost:3306/schemaDB","acc:#####","pass:#####"); 

                System.out.print("Successful connection with MySQL!");
                BufferedReader br = new BufferedReader(new FileReader("C:\\lotto.txt"));

             String line;
                String NumberOfLine = "";
                String SecondNumber = "";
                while ((line = br.readLine()) != null) {
                    String[] splited = line.split("\\s");

                    //take value of  column 4 from txt file
                    NumberOfLine = splited[3];

                    //save the current number into the DB
                    Statement stmt=con.createStatement(); 
                    stmt.executeUpdate("INSERT INTO `kanat`(Number1) VALUE ('"+NumberOfLine+"')");
                }
                br.close();
                con.close(); 

                System.out.println("Finished! ");

            }catch(Exception e){
                System.out.println("No success! " + e);
                }  
            }  

}

插入的
语句格式不正确。关键字是
VALUES
而不是
VALUE

通过输出SQL文本并将其带到另一个客户端,可以很容易地对其进行调试

在那里,一条生产线做了太多的工作;而目前正在做的工作则因易受SQL注入的影响而中断

这里不需要使用字符串连接来动态准备SQL文本。而且不需要通过创建和重新创建sql和语句来反复搅动

  String sql = "INSERT INTO `kanat`(Number1) VALUES ( ? )";
  PreparedStatement ps = null;

  try {

     ps = con.prepareStatement(sql);

     while( ... ) {
        String numberOfLine = ...

        ps.setString(1, numberOfLine);
        ps.executeUpdate();

     }
  } catch (SQLException e ) {
      e.printStackTrace();
  } finally {
      if (ps != null) {
          ps.close();
      }
  }

跟进

如果目标是简单地将新行加载到表中,从空格分隔的.txt文件中读取一个“列”,我个人不会再写低效的Java代码,处理RBAR(一行接一行)

我只需要使用内置的MySQL
LOAD DATA
语句,在一个事务中处理整个文件

大概是这样的:

 LOAD DATA LOCAL INFILE "/tmp/myfile.txt" 
 INTO TABLE mytable
 FIELDS TERMINATED BY ' ' 
 LINES TERMINATED BY '\n'
 IGNORE 1 LINES
 ( @d1
 , @d2
 , @d3
 , @d4
 , @d5
 , @d5
 , @d6
 ) 
 SET mycol = TRIM(BOTH FROM @d4)
 ;

如果我需要加载一个异常大的文件,因为我不想让“Hugh Jass”事务破坏innodb系统表空间(我无法取回的空间),我要么拆分文件(OS
split
命令),或者男性使用percona toolkit
pt fifo split
动态地将文件拆分为管道。

您可以添加一个您正在阅读的文件的(假)样本吗?请检查:)您确定您的引用都是正确的(尽管在这段代码中它们看起来很好)?这里有一些略显棘手的引号,而您插入字符串“NumberOfLine”而不是变量这一事实使我认为引号中有一些错误。可能不相关,但请使用一个准备好的语句。@Patrahi
Number1
从txt文件的第一行(头)写入DB。但是应该有从以下行写入的实际值。至少我不能发现一个可以阻止它的错误。所以可能值实际上在数据库中。所以我想知道你到底是怎么检查的。工作台是否向您显示了表的完整内容?但是,创建SQL语句的字符串连接的整个业务刚刚中断。为什么我们要花时间调试使用了众所周知易受SQL注入攻击的模式的代码。帕特拉希:说“它不起作用”对所观察到的行为几乎是无用的描述。它是否抛出编译器错误?编译成功但引发执行错误?是否显示已成功运行,但结果意外?扔给我们一根骨头,伙计!“不起作用”传达的有用信息很少。请注意,此代码示例不处理kanat表的当前内容。。。之前有报道称,它包含许多行,行的Number1值为“NumberOfLine”。在删除这些行之前,它们仍将在表中。本例中的代码执行INSERT语句。(此答案中显示的代码未经编译或测试。显然,关于读取行和获取分配给numberOfLine的值的位被省略(由三个点表示…)当我将鼠标悬停在ps.executeUpdate()上时,代码的行为是相同的。);我可以看到我想保存在DB中的值,但当我打开DB时,它只保存了变量的名称。我现在发现,当我调试它时,它为1循环插入了1000行变量的名称!这怎么可能?@Patrahi:你从表中删除了这些行吗?如果这些行在表中,它们将被删除直到它们被删除或表被截断为止。(我想您可能正在查看以前的工作中的行,并认为它们是最近一次执行时插入的。)