В приведенном выше коде есть ряд ошибок, например пробелы, в которых пробелы запрещены, но после
- воссоздание кода с удаленными ошибками
- создание некоторого базового кода для создания всех необходимых таблиц
- добавление некоторых методов для добавления данных в ссылочные таблицы и, конечно, исследование таблица
- добавление некоторых методов для сброса данных в таблицы
- logAll (последовательно извлекает все строки из каждой таблицы в курсор и сбрасывает курсор)
- logStudy (специфично для таблицы Study, используется logAll)
- переходит на использование удобного метода update вместо использования execSQL метода.
- удаление слишком запутанного предложения try / catch
Тестирование показывает, что код в принципе (с указанными выше изменениями / исправлениями) работает и не теряет данные.
Рабочий пример кода
ConstDB.java
Это было построено на основе вашего кода, но может отличаться: -
public class ConstDB {
public static final String TABLE_MEDICAL_STUDY_TYPE = "[TypeOfMedicalStudy]";
public static final String TABLE_MEDICAL_STUDY_TYPE_ID = "[IdTTypeOfMedicalStudy]";
public static final String TABLE_MEDICAL_STYUDY_TYPE_NAME = "[TypeName]";
public static final String TABLE_MEDICAL_STUDY_DOCTOR = "[Doctors]";
public static final String TABLE_MEDICAL_STUDY_DOCTOR_ID = "[IdDoctor]";
public static final String TABLE_MEDICAL_STUDY_DOCTOR_NAME = "[DoctorName]";
public static final String TABLE_MEDICAL_STUDY_STUDY_PLACE = "[MedicalStudyPlace]";
public static final String TABLE_MEDICAL_STUDY_STUDY_PLACE_ID = "[IdMedicalStudyPlace]";
public static final String TABLE_MEDICAL_STUDY_STUDY_PLACE_NAME = "[PlaceName]";
public static final String TABLE_MEDICAL_STUDY = "[Study]";
public static final String TABLE_MEDICAL_STUDY_DATE = "[fecha]";
public static final String TABLE_MEDICAL_STUDY_ID_DOCTOR = "[IdDoctor]";
public static final String TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY = "[IdTypeOfMedicalStudy]";
public static final String TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY = "[IdMedicalStudy]";
public static final String TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE = "[IdMedicalStudyPlace]";
//TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE
/*
CREATE TABLE [Study](
[IdMedicalStudy] INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL UNIQUE,
[Fecha] TEXT,
[IdDoctor] INTEGER NOT NULL REFERENCES [Doctors]([IdDoctor]) ON UPDATE CASCADE,
[IdTypeOfMedicalStudy] INTEGER NOT NULL REFERENCES [TypeOfMedicalStudy]([IdTTypeOfMedicalStudy]) ON UPDATE CASCADE,
[IdMedicalStudyPlace] INTEGER NOT NULL REFERENCES [MedicalStudyPlace]([IdMedicalStudyPlace]) ON UPDATE CASCADE);
*/
public static final String TABLE_MEDICAL_STUDY_CREATESQL = "CREATE TABLE IF NOT EXISTS " +
TABLE_MEDICAL_STUDY +
"(" +
TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY + " INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL UNIQUE," +
TABLE_MEDICAL_STUDY_DATE + " TEXT," +
TABLE_MEDICAL_STUDY_ID_DOCTOR + " INTEGER NOT NULL REFERENCES " +TABLE_MEDICAL_STUDY_DOCTOR +
"(" + TABLE_MEDICAL_STUDY_DOCTOR_ID + ") ON UPDATE CASCADE," +
TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY + " INTEGER NOT NULL REFERENCES " + TABLE_MEDICAL_STUDY_TYPE +
"(" + TABLE_MEDICAL_STUDY_TYPE_ID + ") ON UPDATE CASCADE," +
TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE + "INTEGER NOT NULL REFERENCES " + TABLE_MEDICAL_STUDY_STUDY_PLACE +
"(" + TABLE_MEDICAL_STUDY_STUDY_PLACE_ID + ") ON UPDATE CASCADE" +
")";
public static final String TABLE_MEDICAL_STUDY_TYPE_CREATESQL = "CREATE TABLE IF NOT EXISTS " +
TABLE_MEDICAL_STUDY_TYPE +
"(" +
TABLE_MEDICAL_STUDY_TYPE_ID + " INTEGER PRIMARY KEY," +
TABLE_MEDICAL_STYUDY_TYPE_NAME + " TEXT" +
")";
public static final String TABLE_MEDICAL_STUDY_DOCTOR_CREATESQL = "CREATE TABLE IF NOT EXISTS " +
TABLE_MEDICAL_STUDY_DOCTOR +
"(" +
TABLE_MEDICAL_STUDY_DOCTOR_ID + " INTEGER PRIMARY KEY," +
TABLE_MEDICAL_STUDY_DOCTOR_NAME + " TEXT" +
")";
public static final String TABLE_MEDICAL_STUDY_STUDY_PLACE_CREATESQL = "CREATE TABLE IF NOT EXISTS " +
TABLE_MEDICAL_STUDY_STUDY_PLACE + "(" +
TABLE_MEDICAL_STUDY_STUDY_PLACE_ID + " INTEGER PRIMARY KEY, " +
TABLE_MEDICAL_STUDY_STUDY_PLACE_NAME + " TEXT" +
")";
}
- Примечание. Соглашения об именах меня очень смущают.
DBHelper.java
Я не видел ссылок на класс, расширяющий SQLiteOpenHelper (обычно называемый Database Helper), так что это эквивалентно тому, что у вас есть.
public class DBHelper extends SQLiteOpenHelper {
SQLiteDatabase mDB;
Context mContext;
public static final String DBNAME = "ms";
public static final int DBVERSION = 1;
public DBHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
this.mContext = context;
mDB = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_MEDICAL_STUDY_DOCTOR_CREATESQL);
db.execSQL(TABLE_MEDICAL_STUDY_TYPE_CREATESQL);
db.execSQL(TABLE_MEDICAL_STUDY_STUDY_PLACE_CREATESQL);
db.execSQL(TABLE_MEDICAL_STUDY_CREATESQL);
}
@Override
public void onConfigure(SQLiteDatabase db) {
super.onConfigure(db);
db.setForeignKeyConstraintsEnabled(true);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
}
public long addStudyType(String studyTypeName) {
ContentValues cv = new ContentValues();
cv.put(TABLE_MEDICAL_STYUDY_TYPE_NAME,studyTypeName);
return mDB.insert(TABLE_MEDICAL_STUDY_TYPE,null,cv);
}
public long addDoctor(String doctorName) {
ContentValues cv = new ContentValues();
cv.put(TABLE_MEDICAL_STUDY_DOCTOR_NAME,doctorName);
return mDB.insert(TABLE_MEDICAL_STUDY_DOCTOR,null,cv);
}
public long addPlace(String placeName) {
ContentValues cv = new ContentValues();
cv.put(TABLE_MEDICAL_STUDY_STUDY_PLACE_NAME,placeName);
return mDB.insert(TABLE_MEDICAL_STUDY_STUDY_PLACE,null,cv);
}
public long addStudy(String date, long doctor, long type, long place) {
ContentValues cv = new ContentValues();
cv.put(TABLE_MEDICAL_STUDY_DATE,date);
cv.put(TABLE_MEDICAL_STUDY_ID_DOCTOR,doctor);
cv.put(TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY,type);
cv.put(TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE,place);
return mDB.insert(TABLE_MEDICAL_STUDY,null,cv);
}
public void updateRow (ContentValues contentValues) {
SQLiteDatabase db = this.getWritableDatabase();
String sql = "UPDATE " + ConstDB.TABLE_MEDICAL_STUDY + " SET "
+ ConstDB.TABLE_MEDICAL_STUDY_DATE + " = '"
+ contentValues.get(ConstDB.TABLE_MEDICAL_STUDY_DATE).toString().trim()
//<<<<<<<<<< COMMENTED OUT + "', " + ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY _PLACE + " = " //<<<<<<<<<< extra space
+ "', " + ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE + " = "
//<<<<<<<<<< COMMENTED OUT+ contentValues.get(ConstDB.ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY _PLACE) //<<<<<<<<<< extra space
+ contentValues.get(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE)
+ ", " + ConstDB.TABLE_MEDICAL_STUDY_ID_DOCTOR + " = "
+ contentValues.get(ConstDB.TABLE_MEDICAL_STUDY_ID_DOCTOR)
//<<<<<<<<<< COMMENTED OUT + ", " + ConstDB.TABLE_TABLE_ID_TYPE OF MEDICAL STUDY + " = "
+ ", " + ConstDB.TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY + " = "
//<<<<<<<<<< COMMENTED OUT+ contentValues.get(ConstDB.TABLE_ID_TYPE OF MEDICAL STUDY)
+ contentValues.get((ConstDB.TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY))
+ " WHERE " + ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY + " = "
+ contentValues.get(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY);
//<<<<<<<<<< try/catch block will not necessarily indicate row not update
//<<<<<<<<<< Betwer way is to use the update convenience methdo which returns the number of rows updated
/*
try {
db.execSQL(sql);
db.close();
Toast.makeText(mContext, "Row updated", Toast.LENGTH_SHORT).show();
db.close();
} catch (SQLException e) {
Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show();
db.close();
}
*/
ContentValues cv = new ContentValues();
cv.put(ConstDB.TABLE_MEDICAL_STUDY_DATE, contentValues.get(ConstDB.TABLE_MEDICAL_STUDY_DATE).toString().trim());
cv.put(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE, contentValues.getAsLong(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE));
cv.put(ConstDB.TABLE_MEDICAL_STUDY_ID_DOCTOR, contentValues.getAsLong(ConstDB.TABLE_MEDICAL_STUDY_ID_DOCTOR));
cv.put(TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY, contentValues.getAsLong(ConstDB.TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY));
String whereclause = ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY + "=?";
String[] whereargs = new String[]{String.valueOf(contentValues.getAsLong(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY))};
int rv = mDB.update(ConstDB.TABLE_MEDICAL_STUDY, cv, whereclause, whereargs);
if (rv < 1) {
Toast.makeText(mContext,"Row not updated.",Toast.LENGTH_SHORT);
} else {
Toast.makeText(mContext,"Updated " + String.valueOf(rv) + " rows",Toast.LENGTH_LONG);
}
}
public void logAll() {
Cursor c;
c = mDB.query(ConstDB.TABLE_MEDICAL_STUDY_TYPE,null,null,null,null,null,null);
DatabaseUtils.dumpCursor(c);
c = mDB.query(ConstDB.TABLE_MEDICAL_STUDY_DOCTOR,null,null,null,null,null,null);
DatabaseUtils.dumpCursor(c);
c= mDB.query(TABLE_MEDICAL_STUDY_STUDY_PLACE,null,null,null,null,null,null);
DatabaseUtils.dumpCursor(c);
logStudy();
}
public void logStudy() {
DatabaseUtils.dumpCursor(mDB.query(TABLE_MEDICAL_STUDY,null,null,null,null,null,null));
}
public ContentValues preapreCVForUpdate(long studyId, String studyDate, long doctorId, long type, long place) {
ContentValues rv = new ContentValues();
rv.put(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY,studyId);
rv.put(ConstDB.TABLE_MEDICAL_STUDY_DATE,studyDate);
rv.put(ConstDB.TABLE_MEDICAL_STUDY_ID_DOCTOR,doctorId);
rv.put(ConstDB.TABLE_TABLE_ID_TYPE_OF_MEDICAL_STUDY,type);
rv.put(ConstDB.TABLE_MEDICAL_STUDY_ID_MEDICAL_STUDY_PLACE,place);
return rv;
}
}
MainActivity.java
Это простое упражнение, которое использовалось для тестирования создания таблиц, заполнения их некоторыми данными тестирования и, наконец, обновления данных с помощью измененного / исправленного updateRow метода: -
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);
mDBHlpr.addDoctor("Mary");
mDBHlpr.addDoctor("Sue");
mDBHlpr.addDoctor("Fred");
mDBHlpr.addDoctor("Tom");
mDBHlpr.addStudyType("Skeletal");
mDBHlpr.addStudyType("Cardial");
mDBHlpr.addStudyType("Cranial");
mDBHlpr.addStudyType("Abdominal");
mDBHlpr.addPlace("Home");
mDBHlpr.addPlace("St. Barts");
mDBHlpr.addPlace("Paddington");
mDBHlpr.addPlace("London School of Medicine");
mDBHlpr.addStudy("2019-01-01 10:30",2,3,3);
mDBHlpr.addStudy("2019-01-02 12:45",1,1,1);
mDBHlpr.addStudy("2019-01-03 15:25",3,2,4);
mDBHlpr.logAll();
mDBHlpr.updateRow(mDBHlpr.preapreCVForUpdate(2,"2019-01-02 16:45",4,4,2));
mDBHlpr.logStudy();
}
}
Результаты
Что касается обновления, строка с идентификатором 2 добавляется как: -
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudy=2
2019-01-17 14:34:23.206 4595-4595/? I/System.out: fecha=2019-01-02 12:45
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdDoctor=1
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdTypeOfMedicalStudy=1
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudyPlace=1
После обновления становится: -
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdMedicalStudy=2
2019-01-17 14:34:23.211 4595-4595/? I/System.out: fecha=2019-01-02 16:45
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdDoctor=4
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdTypeOfMedicalStudy=4
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdMedicalStudyPlace=2
Который совпадает с
mDBHlpr.updateRow(mDBHlpr.preapreCVForUpdate(2,"2019-01-02 16:45",4,4,2));
Говоря, обновите строку исследования с идентификатором от 2 до
- иметь дату 2019-01-01
- сослаться на строку из таблицы Doctors, которая имеет идентификатор 4 (Том)
- сослаться на строку из таблиц типа с идентификатором 4 (брюшной полости)
- сослаться на строку из Места с идентификатором 2 (St. Barts)
Что, как видно, уже сделано.
Полный журнал был: -
2019-01-17 14:34:23.201 4595-4595/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@fe54ec2
2019-01-17 14:34:23.201 4595-4595/? I/System.out: 0 {
2019-01-17 14:34:23.201 4595-4595/? I/System.out: IdTTypeOfMedicalStudy=1
2019-01-17 14:34:23.201 4595-4595/? I/System.out: TypeName=Skeletal
2019-01-17 14:34:23.201 4595-4595/? I/System.out: }
2019-01-17 14:34:23.201 4595-4595/? I/System.out: 1 {
2019-01-17 14:34:23.201 4595-4595/? I/System.out: IdTTypeOfMedicalStudy=2
2019-01-17 14:34:23.201 4595-4595/? I/System.out: TypeName=Cardial
2019-01-17 14:34:23.201 4595-4595/? I/System.out: }
2019-01-17 14:34:23.201 4595-4595/? I/System.out: 2 {
2019-01-17 14:34:23.201 4595-4595/? I/System.out: IdTTypeOfMedicalStudy=3
2019-01-17 14:34:23.202 4595-4595/? I/System.out: TypeName=Cranial
2019-01-17 14:34:23.202 4595-4595/? I/System.out: }
2019-01-17 14:34:23.202 4595-4595/? I/System.out: 3 {
2019-01-17 14:34:23.202 4595-4595/? I/System.out: IdTTypeOfMedicalStudy=4
2019-01-17 14:34:23.202 4595-4595/? I/System.out: TypeName=Abdominal
2019-01-17 14:34:23.202 4595-4595/? I/System.out: }
2019-01-17 14:34:23.202 4595-4595/? I/System.out: <<<<<
2019-01-17 14:34:23.202 4595-4595/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@eadd4d3
2019-01-17 14:34:23.202 4595-4595/? I/System.out: 0 {
2019-01-17 14:34:23.202 4595-4595/? I/System.out: IdDoctor=1
2019-01-17 14:34:23.202 4595-4595/? I/System.out: DoctorName=Mary
2019-01-17 14:34:23.202 4595-4595/? I/System.out: }
2019-01-17 14:34:23.202 4595-4595/? I/System.out: 1 {
2019-01-17 14:34:23.203 4595-4595/? I/System.out: IdDoctor=2
2019-01-17 14:34:23.203 4595-4595/? I/System.out: DoctorName=Sue
2019-01-17 14:34:23.203 4595-4595/? I/System.out: }
2019-01-17 14:34:23.203 4595-4595/? I/System.out: 2 {
2019-01-17 14:34:23.203 4595-4595/? I/System.out: IdDoctor=3
2019-01-17 14:34:23.203 4595-4595/? I/System.out: DoctorName=Fred
2019-01-17 14:34:23.203 4595-4595/? I/System.out: }
2019-01-17 14:34:23.203 4595-4595/? I/System.out: 3 {
2019-01-17 14:34:23.203 4595-4595/? I/System.out: IdDoctor=4
2019-01-17 14:34:23.203 4595-4595/? I/System.out: DoctorName=Tom
2019-01-17 14:34:23.203 4595-4595/? I/System.out: }
2019-01-17 14:34:23.203 4595-4595/? I/System.out: <<<<<
2019-01-17 14:34:23.203 4595-4595/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@50e1810
2019-01-17 14:34:23.204 4595-4595/? I/System.out: 0 {
2019-01-17 14:34:23.204 4595-4595/? I/System.out: IdMedicalStudyPlace=1
2019-01-17 14:34:23.204 4595-4595/? I/System.out: PlaceName=Home
2019-01-17 14:34:23.204 4595-4595/? I/System.out: }
2019-01-17 14:34:23.204 4595-4595/? I/System.out: 1 {
2019-01-17 14:34:23.204 4595-4595/? I/System.out: IdMedicalStudyPlace=2
2019-01-17 14:34:23.204 4595-4595/? I/System.out: PlaceName=St. Barts
2019-01-17 14:34:23.204 4595-4595/? I/System.out: }
2019-01-17 14:34:23.205 4595-4595/? I/System.out: 2 {
2019-01-17 14:34:23.205 4595-4595/? I/System.out: IdMedicalStudyPlace=3
2019-01-17 14:34:23.205 4595-4595/? I/System.out: PlaceName=Paddington
2019-01-17 14:34:23.205 4595-4595/? I/System.out: }
2019-01-17 14:34:23.205 4595-4595/? I/System.out: 3 {
2019-01-17 14:34:23.205 4595-4595/? I/System.out: IdMedicalStudyPlace=4
2019-01-17 14:34:23.205 4595-4595/? I/System.out: PlaceName=London School of Medicine
2019-01-17 14:34:23.205 4595-4595/? I/System.out: }
2019-01-17 14:34:23.205 4595-4595/? I/System.out: <<<<<
2019-01-17 14:34:23.205 4595-4595/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@eb54f09
2019-01-17 14:34:23.205 4595-4595/? I/System.out: 0 {
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudy=1
2019-01-17 14:34:23.206 4595-4595/? I/System.out: fecha=2019-01-01 10:30
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdDoctor=2
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdTypeOfMedicalStudy=3
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudyPlace=3
2019-01-17 14:34:23.206 4595-4595/? I/System.out: }
2019-01-17 14:34:23.206 4595-4595/? I/System.out: 1 {
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudy=2
2019-01-17 14:34:23.206 4595-4595/? I/System.out: fecha=2019-01-02 12:45
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdDoctor=1
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdTypeOfMedicalStudy=1
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudyPlace=1
2019-01-17 14:34:23.206 4595-4595/? I/System.out: }
2019-01-17 14:34:23.206 4595-4595/? I/System.out: 2 {
2019-01-17 14:34:23.206 4595-4595/? I/System.out: IdMedicalStudy=3
2019-01-17 14:34:23.207 4595-4595/? I/System.out: fecha=2019-01-03 15:25
2019-01-17 14:34:23.207 4595-4595/? I/System.out: IdDoctor=3
2019-01-17 14:34:23.207 4595-4595/? I/System.out: IdTypeOfMedicalStudy=2
2019-01-17 14:34:23.207 4595-4595/? I/System.out: IdMedicalStudyPlace=4
2019-01-17 14:34:23.207 4595-4595/? I/System.out: }
2019-01-17 14:34:23.207 4595-4595/? I/System.out: <<<<<
2019-01-17 14:34:23.211 4595-4595/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@adad2c5
2019-01-17 14:34:23.211 4595-4595/? I/System.out: 0 {
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdMedicalStudy=1
2019-01-17 14:34:23.211 4595-4595/? I/System.out: fecha=2019-01-01 10:30
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdDoctor=2
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdTypeOfMedicalStudy=3
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdMedicalStudyPlace=3
2019-01-17 14:34:23.211 4595-4595/? I/System.out: }
2019-01-17 14:34:23.211 4595-4595/? I/System.out: 1 {
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdMedicalStudy=2
2019-01-17 14:34:23.211 4595-4595/? I/System.out: fecha=2019-01-02 16:45
2019-01-17 14:34:23.211 4595-4595/? I/System.out: IdDoctor=4
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdTypeOfMedicalStudy=4
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdMedicalStudyPlace=2
2019-01-17 14:34:23.212 4595-4595/? I/System.out: }
2019-01-17 14:34:23.212 4595-4595/? I/System.out: 2 {
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdMedicalStudy=3
2019-01-17 14:34:23.212 4595-4595/? I/System.out: fecha=2019-01-03 15:25
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdDoctor=3
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdTypeOfMedicalStudy=2
2019-01-17 14:34:23.212 4595-4595/? I/System.out: IdMedicalStudyPlace=4
2019-01-17 14:34:23.212 4595-4595/? I/System.out: }
2019-01-17 14:34:23.212 4595-4595/? I/System.out: <<<<<