Я считаю, что у вас есть ряд вопросов.
- Вы не разделяете значения правильно, я полагаю, вы хотите
String[] str = line.split("\\|")
, чтобы разделить данные в |
- Вы используете неверные разделители между значениями в SQL. Каждое значение должно быть отделено от другого значения запятой.
- Вы опускаете закрывающую скобку.
Тем не менее
Вы можете упростить ситуацию с помощью удобного метода SQLiteDatabase insert , который создаст SQL от вашего имени.
Рассмотрим следующий рабочий пример (хотя бы для вставки рассматриваемой строки): -
Помощник по базам данных (особенно метод addUser ): -
public class DBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "mydb";
public static final int DBVERSION = 1;
public static final String TABLENAME = "tbl_user";
public static final String USER_COL_EMPLOYEENUM = "employee_num";
public static final String USER_COL_USERNAME = "username";
public static final String USER_COL_PASSWORD = "password";
public static final String USER_COL_FIRSTNAME = "firstname";
public static final String USER_COL_LASTNAME = "lastname";
public static final String USER_COL_ADDRESS = "address";
public static final String USER_COL_CONTACT = "contact";
public static final String USER_COL_VAN = "van";
public static final String USER_COL_SALESMANCODE = "salesman_code";
public static final String USER_COL_STATIONCODE = "station_code";
public static final String USER_COL_MACHINEID = "machine_id";
SQLiteDatabase mDB;
public DBHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
mDB = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
String user_crt = "CREATE TABLE If NOT EXISTS " + TABLENAME + "(" +
USER_COL_EMPLOYEENUM + " TEXT PRIMARY KEY," +
USER_COL_USERNAME + " TEXT UNIQUE," +
USER_COL_PASSWORD + " TEXT," +
USER_COL_FIRSTNAME + " TEXT," +
USER_COL_LASTNAME + " TEXT," +
USER_COL_ADDRESS + " TEXT," +
USER_COL_CONTACT + " TEXT," +
USER_COL_VAN + " TEXT," +
USER_COL_SALESMANCODE + " TEXT, " +
USER_COL_STATIONCODE + " TEXT," +
USER_COL_MACHINEID + " TEXT" +
")";
db.execSQL(user_crt);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
}
public long addUser(String employeeNumber,
String userName,
String password,
String firstname,
String lastname,
String address,
String contact,
String van,
String salesmanCode,
String stationCode,
String machineId) {
ContentValues cv = new ContentValues();
cv.put(USER_COL_EMPLOYEENUM,employeeNumber);
cv.put(USER_COL_USERNAME,userName);
cv.put(USER_COL_PASSWORD,password);
cv.put(USER_COL_FIRSTNAME,firstname);
cv.put(USER_COL_LASTNAME,lastname);
cv.put(USER_COL_ADDRESS,address);
cv.put(USER_COL_CONTACT,contact);
cv.put(USER_COL_VAN,van);
cv.put(USER_COL_SALESMANCODE,salesmanCode);
cv.put(USER_COL_STATIONCODE,stationCode);
cv.put(USER_COL_MACHINEID,machineId);
return mDB.insert(TABLENAME,null,cv);
}
public void logAll() {
Cursor csr = mDB.query(TABLENAME,null,null,null,null,null,null);
while (csr.moveToNext()) {
StringBuilder sb = new StringBuilder(" Row ").append(String.valueOf(csr.getPosition()));
for (int i =0; i < csr.getColumnCount(); i++) {
sb.append("\n\tColumn ").append(csr.getColumnName(i)).append(" has a value of ").append(csr.getString(i));
}
Log.d("TABLEINFO",sb.toString());
}
csr.close();
}
}
Это используется в упражнении по типу: -
public class MainActivity extends AppCompatActivity {
DBHelper mDBHlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBHlpr = new DBHelper(this);
String currentline = "EMP0003|sample|S@mple|SATO|TEST|destination|00008888|ST0001|EMP0003|East Location|0000001XABC";
String[] values = currentline.split("\\|"); //<<<<<<<<<< SPLT at each |
// Only use if there are the 11 columns
if (values.length == 11) {
mDBHlpr.addUser(
values[0],
values[1],
values[2],
values[3],
values[4],
values[5],
values[6],
values[7],
values[8],
values[9],
values[10]
);
}
mDBHlpr.logAll(); //<<<<<<<<<< Write the data in the table to the log
}
}
При запуске это приведет к (который будет выглядеть как результат, который вы хотите): -
11-06 08:34:29.022 1574-1574/? D/TABLEINFO: Row 0
Column employee_num has a value of EMP0003
Column username has a value of sample
Column password has a value of S@mple
Column firstname has a value of SATO
Column lastname has a value of TEST
Column address has a value of destination
Column contact has a value of 00008888
Column van has a value of ST0001
Column salesman_code has a value of EMP0003
Column station_code has a value of East Location
Column machine_id has a value of 0000001XABC
Как вы можете видеть, нет необходимости играть в сборку SQL, он создан для вас.
- P.S. Я предположил, что номер сотрудника должен быть уникальным, и поэтому он стал ПЕРВИЧНЫМ КЛЮЧОМ (это остановит добавление дубликатов).
Вы могли бы адаптировать вышеупомянутое с помощью (после включения метода addUser или эквивалентного в зависимости от имен столбцов () настоятельно рекомендуется использовать константы для имен столбцов, а не жесткое кодирование их )): -
while ((line = buffer.readLine()) !=null ) {
String[] values = line.split("\\|"); //<<<<<<<<<< SPLIT at each |
// Only use if there are the 11 columns
if (values.length == 11) {
mydb.addUser(
values[0],
values[1],
values[2],
values[3],
values[4],
values[5],
values[6],
values[7],
values[8],
values[9],
values[10]
);
}
}