有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

 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.getFloat("XColumn")对应的列(XColumn)值。如何获取整个表的值

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


共 (6) 个答案

  1. # 1 楼答案

    ResultSet中,不能一次调用所有行值。你应该分开做

  2. # 2 楼答案

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

    ResultSetMetaData metaData = rs.getMetaData();
    

    使用按索引获取的列的实际值:

    metaData.getColumnName(i);
    rs.getString(i);
    
  3. # 4 楼答案

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package practice;
    import java.io.*;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    
    
    /**
     *
     * @author mahamud.ashik
     */
    public class Practice {
    
        /**
         * @param args the command line arguments
         */
        OracleConnectionHandler dbConne =new OracleConnectionHandler();
    
        public static void main(String[] args) throws IOException {
            // TODO code application logic here
           try {
    
               Statement st=OracleConnectionHandler.getConnection().createStatement();
               ResultSet rs=st.executeQuery("select col1,col2,col3 from tableName");
    
    
              // for print column name 
               ResultSetMetaData rsmd = rs.getMetaData();
    
    
          int numberOfColumns = rsmd.getColumnCount();
    
          for (int i = 1; i <= numberOfColumns; i++) {
            if (i > 1) System.out.print(",  ");
            String columnName = rsmd.getColumnName(i);
            System.out.print(columnName);
          }
          System.out.println("");
           // write in text file    
                FileWriter fw = new FileWriter("d://stockIn3.txt"); 
          BufferedWriter bw = new BufferedWriter(fw);
    
               while(rs.next()){
                   try {
                       String name=rs.getString("col1");
                       String account_no=rs.getString("col2");
                       String sp_id=rs.getString("col3");
    
                   bw.write(name);
                   bw.append(";");
                   bw.write(account_no);
                   bw.append(";");
                   bw.write(sp_id);
    
                   bw.newLine();
    
                   }catch (Exception e){
                       System.out.println("Exception"+e);
                   }
               }
               bw.close();st.close();
               }
    
           catch (Exception e){
              System.out.println(e);
           }
        }
    }
    
  4. # 5 楼答案

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

        ResultSet rs = ...;
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        while(rs.next()){
            StringBuilder row = new StringBuilder();
            for(int i = 0; i < columnCount; i++){
                row.append(rs.getObject(i));
            }
        }
    
  5. # 6 楼答案

    首先,使用语句是不明智的。 要防止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