Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 缓冲读取器只读取文本文件的第一行?_Java_Text Files_Bufferedreader - Fatal编程技术网

Java 缓冲读取器只读取文本文件的第一行?

Java 缓冲读取器只读取文本文件的第一行?,java,text-files,bufferedreader,Java,Text Files,Bufferedreader,在这里,我尝试使用缓冲读取器读取文本文件并在数据库中创建表,但缓冲读取器只读取文本文件中的名字。我可以知道我的密码有什么问题吗。。。它在MySQL中运行良好,但在SQL Server中只读取名字 文本文件: 全部代码: import com.mysql.jdbc.Connection; import com.mysql.jdbc.DatabaseMetaData; import com.mysql.jdbc.Statement; import java.io.*; import java.awt

在这里,我尝试使用缓冲读取器读取文本文件并在数据库中创建表,但缓冲读取器只读取文本文件中的名字。我可以知道我的密码有什么问题吗。。。它在MySQL中运行良好,但在SQL Server中只读取名字

文本文件:

全部代码:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.DatabaseMetaData;
import com.mysql.jdbc.Statement;
import java.io.*;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.*;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class Stackq extends AbstractTableModel {

Vector<String> data;
Vector columns;

public Stackq() {






    String line;
    data = new Vector<String>();
    columns = new Vector();
    int count = 0;


    try {
        FileInputStream fis = new FileInputStream("D:/joy/text/registration.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        StringTokenizer st1 = new StringTokenizer(br.readLine(), "\t");
        while (st1.hasMoreTokens()) {
            columns.addElement(st1.nextToken());
            count++;
        }
        while ((line = br.readLine()) != null) {
            StringTokenizer st2 = new StringTokenizer(line, "\t");
            for (int i = 0; i < count; i++) {
                if (st2.hasMoreTokens()) {
                    data.addElement(st2.nextToken());
                } else {
                    data.addElement("");
                }
            }
        }
        br.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
 }

public void setValueAt(Object value, int row, int col) {
    data.setElementAt((String) value, col);
    fireTableCellUpdated(row, col);
}

public boolean isCellEditable(int row, int col) {
    //if (4 == col){

    return true;
}
//else {
// return false;
// }
//}

//public void insertData(Object[] values){
// data.add(new Vector());
//for(int i =0; i<values.length; i++){
//((Vector) data.get(data.size()-1)).add(values[i]);
//}
//fireTableDataChanged();
// }
public void removeRow(int row) {
    data.removeElementAt(row);
    fireTableDataChanged();
}

public int getRowCount() {
    return data.size() / getColumnCount();
}

public int getColumnCount() {
    return columns.size();
}

public Object getValueAt(int rowIndex, int columnIndex) {
    return (String) data.elementAt((rowIndex * getColumnCount())
            + columnIndex);
}

public String getColumnName(int i) {
    return (String) columns.get(i);
}

public static void main(String args[]) {


    Stackq model = new Stackq();

    JTable table = new JTable();

    table.setModel(model);
    JScrollPane scrollpane = new JScrollPane(table);
    JPanel panel = new JPanel();
    panel.add(scrollpane);
    JFrame frame = new JFrame();
    frame.add(panel, "Center");
    frame.pack();
    frame.setVisible(true);

    StringBuffer sbTableData = new StringBuffer();
    for (int row = 0; row < table.getRowCount(); row++) {
        for (int column = 0; column < table.getColumnCount(); column++) {
            sbTableData.append(table.getValueAt(row, column)).append("\t");
        }
        sbTableData.append("\n");

    }
    System.out.println(sbTableData);

    try {

    PrintWriter f = new PrintWriter(new BufferedWriter(new FileWriter("D:/joy/text/registration6.txt", true)));

        //f.println(sbTableData+"\t"+"n");

        f.close();


    } catch (IOException e) {
        e.printStackTrace();
    }
    String readstr1 = null;

    int row = table.getRowCount();

    int column = table.getColumnCount();

    for (int j = 0; j < row; j++) {

        for (int i = 0; i < column; i++) {

  //System.out.println(table.getValueAt(j, i));
            readstr1 = (String) table.getValueAt(j, i);
 //System.out.println(readstr);

        }

    }

    try {
        // FILE READ AND TABLE CREATE
        String tname = "example11199";
        String dbname = "DB";
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        java.sql.Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;user=SOFTWARE\joy;databaseName=DB;integratedSecurity=true;");
        java.sql.Statement stmt = conn.createStatement();
        // stmt=conn.createStatement();
     //System.out.println("connect");
     //System.out.println(readstr1);
        FileInputStream fstr = new FileInputStream("D:/joy/text/registration6.txt");
        // Get the object of DataInputStream
        DataInputStream inn = new DataInputStream(fstr);
        BufferedReader brr = new BufferedReader(new InputStreamReader(inn));

        String readstr;
        java.sql.DatabaseMetaData dmd = conn.getMetaData();
        while ((readstr = brr.readLine()) != null) //DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData();
        //while(readstr!=null)
        {
            ResultSet rs = dmd.getTables(null, "DB", "example11199", null);
            //set not null column
            if (String.valueOf(readstr).contains("NO")) {
                readstr = readstr.replaceAll("NO", "not null");
            } else if (String.valueOf(readstr).contains("YES")) {
                readstr = readstr.replaceAll("YES", "");
            }
            if (String.valueOf(readstr).contains("PRIMARY")) {
                readstr = readstr.replaceFirst("PRIMARY", "primary key");
            }
            System.out.println("replace string " + readstr);

            int k = 1;
            if (!rs.next()) {
                stmt.executeUpdate("CREATE TABLE " + tname + "(" + readstr + ")");

            } else {
                //System.out.println(readstr);
                stmt.executeUpdate("ALTER TABLE " + tname + " ADD(" + readstr + ")");
                System.out.println("altered");

            }

        }
        brr.close();
        inn.close();
    } catch (Exception e) {
    }

    }
    }
import com.mysql.jdbc.Connection;
导入com.mysql.jdbc.DatabaseMetaData;
导入com.mysql.jdbc.Statement;
导入java.io.*;
导入java.awt.*;
导入java.util.*;
导入javax.swing.*;
导入java.awt.event.*;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.swing.table.*;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
公共类Stackq扩展了AbstractTableModel{
矢量数据;
向量列;
公营机构{
弦线;
数据=新向量();
列=新向量();
整数计数=0;
试一试{
FileInputStream fis=新的FileInputStream(“D:/joy/text/registration.txt”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(fis));
StringTokenizer st1=新的StringTokenizer(br.readLine(),“\t”);
while(st1.hasMoreTokens()){
columns.addElement(st1.nextToken());
计数++;
}
而((line=br.readLine())!=null){
StringTokenizer st2=新的StringTokenizer(行“\t”);
for(int i=0;i//对于(inti=0;i您正在重新创建一行读取的表。我假设这只工作一次,因此它只读取第一行

您似乎有一大堆文本在传递和更改表,因此在尝试创建表之前只读取文件行。我怀疑您希望在尝试更改/创建表之前读取整个文件

顺便说一句,到处都是格式可能会使检查代码变得更加困难。我建议您在IDE中使用格式设置程序,您应该能够看到代码将如何循环

 while ((readstr = brr.readLine()) != null) //DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData();
    //while(readstr!=null)
    {
        ResultSet rs = dmd.getTables(null, "DB", "example11199", null);
        //set not null column
        if (String.valueOf(readstr).contains("NO")) {
            readstr = readstr.replaceAll("NO", "not null");
        } else if (String.valueOf(readstr).contains("YES")) {
            readstr = readstr.replaceAll("YES", "");
        }else if (String.valueOf(readstr).contains("PRIMARY")) {
            readstr = readstr.replaceFirst("PRIMARY", "primary key");
        }
        System.out.println("replace string " + readstr);

尝试修复最后一条if语句,再次检查它,它会工作。

在我看到可怕的代码格式后停止阅读…修复它,我将尝试了解发生了什么…看起来像是你在记事本上写的!!@tim你在使用什么IDE?@jlordo嗨,对不起,我已经编辑了代码,正在使用NetBeans@Peter劳瑞,我已经搬走了d它并这样做:FileInputStream fstr=newFileInputStream(“d:/joy/text/registration6.txt”);BufferedReader brr=new BufferedReader(new InputStreamReader(fstr));再次阅读前两段。如果你不理解,你可以随时问我一个关于我答案的问题。我认为你让它变得比需要的更复杂。它非常简单。你所有读取文件的代码都应该首先出现,在这部分代码中不应该有使用数据库的代码。只有这样,你才应该d您尝试访问数据库,在代码的这一部分中,您不应该尝试读取文件。例如,您将所有正在读取的代码放在所有数据库代码之前。我将确保您没有引发忽略的异常。我建议您在try/catch块的末尾显示捕获的异常。我还将您正在提交更改并正确关闭数据库资源。我认为您必须自己编写有效的SQL代码,因为这与Java无关。您可以搜索有效的SQL示例。最后,我必须单独创建表,正如您所说,我将尝试一下,并让您知道代码工作,我非常感谢你们的帮助和指导…期待着在未来与你们聊天