Java 字符串的字符(0)未返回预期值
我有一个程序,正在读取文本文件并将某些细节插入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而不是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”。接下来的每一行
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)))) ;