使用java将表的整个数据从sql server获取到txt文件

使用java将表的整个数据从sql server获取到txt文件,java,sql-server,text-files,Java,Sql Server,Text Files,我想把表的全部数据放到文本文件中,我使用了如下代码 String url = "jdbc:sqlserver://localhost:1433;databaseName=DBTEST;user=Data;password=123;"; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e1) {

我想把表的全部数据放到文本文件中,我使用了如下代码

 String url = "jdbc:sqlserver://localhost:1433;databaseName=DBTEST;user=Data;password=123;";
      try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
try {
      Connection con = DriverManager.getConnection(url);
      Statement select = con.createStatement();
      ResultSet result = select.executeQuery
                          ("select * from testTable");         

      System.out.println("Got results:");
      System.out.println(result);
      FileWriter fw = new FileWriter("I:/File/InputFile.txt"); 
      BufferedWriter bw = new BufferedWriter(fw);
      while(result.next()) 
      {  
          try{
                  bw.write(String.valueOf(result.getFloat("XColumn")));; // \n is for to write in a new Line .  
                  bw.newLine();
          }  
          catch (Exception e) {  
              System.out.println("Errrrr......... writing to a file..... :P"+e);  
          }            
      }  
      bw.close();
      select.close();
      con.close();
    }
    catch( Exception e ) {
      e.printStackTrace();
    }
在这里,我只得到指定的result.getFloatXColumn对应的columnXColumn值。如何获取整个表的值


注意:我的表格格式为testTableXColumn、YColumn、ZColumn。我希望所有列的值都在txt文件中。

一个选项是只检索每一列,因为您知道它的名称

如果您不知道它的名称,因为稍后有人可能会添加更多列,您可以检索ResultSetMetaData


该元数据将提供结果集中查询返回的列的数量、名称和类型。

一个选项是只检索每个列,因为您知道它的名称

如果您不知道它的名称,因为稍后有人可能会添加更多列,您可以检索ResultSetMetaData


该元数据将在ResultSet中提供查询返回的列的数量、名称和类型。

首先,它的not wise to use语句。 要防止sql注入,请转到preparedStatement

PreparedStatement pt= con.prepareStatement("select * from testTable");
resultSet rs=pt.executeQuery();
while(rs.next())
{
 try{
                  bw.write(String.valueOf(result.getFloat("XColumn")));; // \n is for to write in a new Line .  
                  bw.newLine();
          }  
          catch (Exception e) {  
              System.out.println("Errrrr......... writing to a file..... :P"+e);  
          }   
}

如果不知道列名,则使用ResultSetMetaData

首先使用语句是不明智的。 要防止sql注入,请转到preparedStatement

PreparedStatement pt= con.prepareStatement("select * from testTable");
resultSet rs=pt.executeQuery();
while(rs.next())
{
 try{
                  bw.write(String.valueOf(result.getFloat("XColumn")));; // \n is for to write in a new Line .  
                  bw.newLine();
          }  
          catch (Exception e) {  
              System.out.println("Errrrr......... writing to a file..... :P"+e);  
          }   
}

如果不知道列名,则在ResultSet中使用ResultSetMetaData,不能一次调用所有行值。您应该单独执行此操作。

在ResultSet中,您不能一次调用所有行值。您应该单独执行此操作。

您可以使用ResultSetMetaData按编号提取所有列:


您可以使用ResultSetMetaData按编号提取所有列:


合并ResultSet中的metadate信息以获取列名

ResultSetMetaData metaData = rs.getMetaData();
使用按索引获取的列的实际值:

metaData.getColumnName(i);
rs.getString(i);

合并ResultSet中的metadate信息以获取列名

ResultSetMetaData metaData = rs.getMetaData();
使用按索引获取的列的实际值:

metaData.getColumnName(i);
rs.getString(i);

要获取整个表,您必须明确提到每一列。您需要使用需要从表中提取的每一列的列名。您的意思是这样的:从TestTable中选择XColumn、YColumn、ZColumn来获取整个表,您必须明确地提到每一列。您需要为需要从表中提取的每一列使用列名。您的意思是从testTableResultSetMetaData中选择XColumn、YColumn、ZColumn只提供列信息,而不提供行值。@masudcsecute这是我在文章中解释的,根据该数据,您可以执行正确的rs.getXXXX.ResultSetMetaData只提供列信息,而不提供行值。@MasudCSECUET这是我在文章中解释的,根据该数据,您可以执行正确的rs.getXXXX。如果没有用于生成语句的用户输入,则不存在SqlInjection风险。用户无法更改testTable中的select*。@SJuan76每次语句进入服务器时,服务器都会检查语法,然后执行,但在preparedstatement中,如果至少有类似类型进入服务器,服务器不会检查语法。如果没有用于生成语句的用户输入,没有注入SQL的风险。用户无法更改testTable中的select*。@SJuan76每次语句转到服务器时,服务器都会检查语法,然后执行,但在preparedstatement中,如果至少有类似类型的语句转到服务器,服务器不会检查语法。请使用StringBuilder,切勿在循环中连接。@Boristeider,顺便说一句,我不是StringBuilder,但是是的,我总是忘记使用那个类。使用StringBuilder,永远不要在循环中连接。@Boristeider,顺便说一句,我不是StringBuilder,但是是的,我总是忘记使用那个类。使用Oracle数据库连接。使用Oracle数据库连接。