Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 字符串的字符(0)未返回预期值_Java_String_Sqlite - Fatal编程技术网

Java 字符串的字符(0)未返回预期值

Java 字符串的字符(0)未返回预期值,java,string,sqlite,Java,String,Sqlite,我有一个程序,正在读取文本文件并将某些细节插入SQLite数据库。文本文件中的每一行都以V、D、a、N、T、I或O开头。例如,一行 一、 Sam,Jones,123,1,Liz Jones,334-555-1234,INS123,INS123,INS公司,史密斯,断臂,2019年1月1日,2019年1月3日 我遇到的问题是在我的main方法中读取文本文件的第一行,结果是else语句打印行。我将第一个字符存储在char c中,调试时,我可以看到第一个“I”被存储为“c=\uFEF”。接下来的每一行

我有一个程序,正在读取文本文件并将某些细节插入SQLite数据库。文本文件中的每一行都以V、D、a、N、T、I或O开头。例如,一行

一、 Sam,Jones,123,1,Liz Jones,334-555-1234,INS123,INS123,INS公司,史密斯,断臂,2019年1月1日,2019年1月3日

我遇到的问题是在我的main方法中读取文本文件的第一行,结果是else语句打印行。我将第一个字符存储在char c中,调试时,我可以看到第一个“I”被存储为“c=\uFEF”。接下来的每一行都按设计工作,我不知道为什么

我尝试先初始化变量,然后设置其值,我尝试使用Scanner而不是
BufferedReader
。我尝试在文件开头插入一个空行

import java.sql.*;
import java.io.*;

public class InsertData {
    private  static Connection connect(){
        String url = "jdbc:sqlite:C://sqlite/Hospital.db";
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url);
            conn.createStatement().executeUpdate("PRAGMA foreign_keys = ON;");
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return conn;
    }

    public static void main(String[] args) throws IOException {
        connect();
        String patientFile = "Person.txt";
        String treatmentFile = "treatment.txt";
        String additionalDoctorsFile = "additional_doctors.txt";
        try {
            BufferedReader br = new BufferedReader(new FileReader(patientFile));
            String line;
            while((line = br.readLine()) != null) {
                char c;
                c = line.charAt(0);
                if ( c == 'V') {
                    System.out.println("Inserting Volunteer to DB:\n" + line + "\n");
                    insertVolunteer(line);
                }

                else if (c == 'I') {
                    System.out.println("Inserting Inpatients to DB:\n" + line + "\n");
                    insertPatient(line);
                    insertAdmittedPatient(line);
                }

                else if (c == 'O') {
                    System.out.println("Inserting Outpatients to DB:\n" + line + "\n");
                    insertPatient(line);
                }

                else if (c == 'D') {
                    System.out.println("Inserting Doctor to DB:\n" + line + "\n");
                    insertDoctor(line);
                }

                else if (c == 'A') {
                    System.out.println("Inserting Administrator to DB:\n" + line + "\n");
                    insertAdministrator(line);
                }

                else if (c == 'N') {
                    System.out.println("Inserting Nurse to DB:\n" + line + "\n");
                    insertNurse(line);
                }

                else if (c == 'T') {
                    System.out.println("Inserting Technician to DB:\n" + line + "\n");
                    insertTechnician(line);
                }

                else {
                    System.out.println("Person input entered incorrectly formatted: " + line + "\n" +
                            "Record not being written to DB!\n");
                }

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        finally {
            BufferedReader br = new BufferedReader(new FileReader(treatmentFile));
            String line;
            while((line = br.readLine()) != null) {
                String[] str = line.trim().split(",");
                String sql = "INSERT INTO Treatment(patientLastname, doctorLastname, treatmentType, treatmentName, timestamp) VALUES (?,?,?,?,?);";
                try (Connection conn = connect()) {
                    PreparedStatement ps = conn.prepareStatement(sql);
                    ps.setString(1,str[0]);
                    ps.setString(2, str[1]);
                    char t = str[2].trim().charAt(0);
                    if (t == 'M') {
                        ps.setString(3, "Medication");
                    }
                    else if (t == 'P') {
                        ps.setString(3, "Procedure");
                    }
                    else {
                        ps.setString(3, "N/A");
                        System.out.println("Treatment is neither a Procedure or Medication, unable to write to DB");
                    }
                    ps.setString(4, str[3]);
                    ps.setString(5, str[4]);
                    ps.executeUpdate();
                    ps.close();
                    System.out.println("Inserting Treatments to DB:\n" + line + "\n");
                }

                catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            BufferedReader br2 = new BufferedReader(new FileReader(additionalDoctorsFile));
            String line2;
            while((line2 = br2.readLine()) != null) {
                String[] str2 = line2.trim().split(",");
                String sql = "INSERT INTO AdditionalDoctors(firstname, lastname) VALUES (?,?);";
                try (Connection conn = connect()) {
                    PreparedStatement ps = conn.prepareStatement(sql);
                    ps.setString(1,str2[0]);
                    ps.setString(2, str2[1]);
                    ps.executeUpdate();
                    ps.close();
                    System.out.println("Inserting Additional Doctors to DB:\n" + line2 + "\n");
                }

                catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("All data inserted!");
    }

    public static void insertAdmittedPatient (String lineIn) {
        String admittedPatient = lineIn;
        String[] str = admittedPatient.trim().split(",");
        String sql = "INSERT INTO AdmittedPatient(patientid, firstname, lastname, doctorLastname, admissionDate, dischargeDate) VALUES (?,?,?,?,?,?);";
        try (Connection conn = connect()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,str[4]);
            ps.setString(2, str[1]);
            ps.setString(3, str[2]);
            ps.setString(4, str[10]);
            ps.setString(5, str[12]);
            ps.setString(6, str[13]);
            ps.executeUpdate();
            ps.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }

}
    public static void insertPatient (String lineIn) {
        String inPatient = lineIn;
        if (inPatient.charAt(0) == 'I') {
            String[] str = inPatient.trim().split(",");
            int arr = str.length;
            String sql = "INSERT INTO Patient(patientid, firstname, lastname, roomNumber, insurance, insuranceNumber, " +
                    "emergencyContact, emergencyPhone, diagnosis, treatment, admitDate, dischargeDate) VALUES (?,?,?,?,?,?,?,?,?,?,?,?);";

            try (Connection conn = connect()) {
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1,str[4]);
                ps.setString(2, str[1]);
                ps.setString(3, str[2]);
                int room = Integer.parseInt(str[5]);
                if ((room >= 1) && (room <= 20)) {
                    ps.setString(4, str[5]);
                }
                else {
                    System.out.println("Invalid room number.  Must be between 1-20\n" +
                            "Inserting 'Invalid' to DB");
                    ps.setString(4, "Invalid");
                }
                ps.setString(5,str[9]);
                ps.setString(6, str[8]);
                ps.setString(7,str[6]);
                ps.setString(8, str[7]);
                ps.setString(9, str[11]);
                ps.setString(10, "inpatient");
                ps.setString(11, str[12]);
                ps.setString(12, str[13]);
                ps.executeUpdate();
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        else {
            String[] str = inPatient.trim().split(",");
            String sql = "INSERT INTO Patient(patientid, firstname, lastname, roomNumber, insurance, insuranceNumber, " +
                    "emergencyContact, emergencyPhone, diagnosis, treatment, admitDate, dischargeDate) VALUES (?,?,?,?,?,?,?,?,?,?,?,?);";

            try (Connection conn = connect()) {
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1,str[4]);
                ps.setString(2, str[1]);
                ps.setString(3, str[2]);
                ps.setString(4, "N/A");
                ps.setString(5,"N/A");
                ps.setString(6, "N/A");
                ps.setString(7,"N/A");
                ps.setString(8, "N/A");
                ps.setString(9, "N/A");
                ps.setString(10, "outpatient");
                ps.setString(11, "n/a");
                ps.setString(12, "n/a");
                ps.executeUpdate();
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void insertVolunteer(String lineIn) {
        String volunteer = lineIn;
        String[] str = volunteer.trim().split(",");
        String sql = "INSERT INTO Volunteer(firstname, lastname) VALUES (?,?);";

        try (Connection conn = connect()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, str[1]);
            ps.setString(2, str[2]);
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void insertDoctor(String lineIn) {
        String doctor = lineIn;
        String[] str = doctor.trim().split(",");
        String sql = "INSERT INTO Doctor(firstname, lastname, consultantPriveleges, admittingPriveleges) VALUES (?,?,?,?);";

        try (Connection conn = connect()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, str[1]);
            ps.setString(2, str[2]);
            if (str[3].charAt(0) == 'A') {
                ps.setString(3, "False");
                ps.setString(4, "True");
            }
            else {
                ps.setString(3, "True");
                ps.setString(4, "False");
            }
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void insertAdministrator(String lineIn) {
        String admin = lineIn;
        String[] str = admin.trim().split(",");
        String sql = "INSERT INTO Administrator(firstname, lastname) VALUES (?,?);";

        try (Connection conn = connect()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, str[1]);
            ps.setString(2, str[2]);
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void insertNurse(String lineIn) {
        String admin = lineIn;
        String[] str = admin.trim().split(",");
        String sql = "INSERT INTO Nurse(firstname, lastname) VALUES (?,?);";

        try (Connection conn = connect()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, str[1]);
            ps.setString(2, str[2]);
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void insertTechnician(String lineIn) {
        String admin = lineIn;
        String[] str = admin.trim().split(",");
        String sql = "INSERT INTO Technician(firstname, lastname) VALUES (?,?);";

        try (Connection conn = connect()) {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, str[1]);
            ps.setString(2, str[2]);
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
您可以使用ApacheIO静默地使用BOM标记

Buffered Reader br = new BufferedReader(
    new InputStreamReader(
        new BOMInputStream(
            new FileInputStream(patientFile)))) ;

创建了一个新的文本文件并复制了数据

可能的副本您确定没有在文件开头看到吗?对于UCS-2文件(通常用于Windows),它将是
FEFF
。您可以处理bom表,或者使用文本编辑器更容易/更快地保存而不保存bom表。bom(字节顺序标记)您是否尝试过使用UTF8进行解码,比如@NirupIyer-我刚刚尝试过使用UTF-8,结果相同。
Buffered Reader br = new BufferedReader(
    new InputStreamReader(
        new BOMInputStream(
            new FileInputStream(patientFile)))) ;