Advertisement
Guest User

Untitled

a guest
May 7th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.45 KB | None | 0 0
  1. import java.io.InputStreamReader;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.util.ArrayList;
  9. import java.util.LinkedList;
  10. import java.util.List;
  11. import java.util.Scanner;
  12. import java.io.BufferedReader;
  13. import java.io.FileReader;
  14.  
  15. public class Diagnostico {
  16.  
  17. private class Codigo {
  18.  
  19. private String vocabulario;
  20. private String codigo;
  21. public Codigo(String codigo,String vocabulario) {
  22. this.vocabulario = vocabulario;
  23. this.codigo = codigo;
  24. }
  25. public String getVocabulario() {
  26. return vocabulario;
  27. }
  28. public String getCodigo() {
  29. return codigo;
  30. }
  31. }//class codigo
  32.  
  33. private class Sintoma {
  34. private String codigoSintoma;
  35. private String semanticaTipo;
  36. private String sintoma;
  37. public Sintoma(String sintoma,String codigoSintoma,String semanticaTipo) {
  38. this.codigoSintoma = codigoSintoma;
  39. this.semanticaTipo = semanticaTipo;
  40. this.sintoma = sintoma;
  41. }
  42. public String getCodigoSintoma() {
  43. return codigoSintoma;
  44. }
  45. public String getSemanticaTipo() {
  46. return semanticaTipo;
  47. }
  48. public String getSintoma() {
  49. return sintoma;
  50. }
  51. }//class sintoma
  52.  
  53. private class Enfermedad {
  54. private LinkedList<Codigo> codigo;
  55. private LinkedList<Sintoma> sintoma;
  56. private String nombre;
  57.  
  58. public Enfermedad (String nombre,LinkedList<Codigo> codigo,LinkedList<Sintoma>sintoma) {
  59. this.nombre= nombre;
  60. this.codigo = codigo;
  61. this.sintoma = sintoma;
  62. }
  63. public String getNombre() {
  64. return nombre;
  65. }
  66. public LinkedList<Codigo> getCodigo() {
  67. return codigo ;
  68. }
  69. public LinkedList<Sintoma> getSintoma() {
  70. return sintoma;
  71. }
  72. }//class enfermedad
  73.  
  74. private String url;
  75. private String driver;
  76. private String nombreBD;
  77. private String contraseña;
  78. private String nombreUsuario;
  79. private Connection conectado= null;
  80. private final String DATAFILE = "data/disease_data.data";
  81.  
  82. public void showMenu() {
  83.  
  84. int option = -1;
  85. do {
  86. System.out.println("Bienvenido a sistema de diagnóstico\n");
  87. System.out.println("Selecciona una opción:\n");
  88. System.out.println("\t1. Creación de base de datos y carga de datos.");
  89. System.out.println("\t2. Realizar diagnóstico.");
  90. System.out.println("\t3. Listar síntomas de una enfermedad.");
  91. System.out.println("\t4. Listar enfermedades y sus códigos asociados.");
  92. System.out.println("\t5. Listar síntomas existentes en la BD y su tipo semántico.");
  93. System.out.println("\t6. Mostrar estadísticas de la base de datos.");
  94. System.out.println("\t7. Salir.");
  95. try {
  96. option = readInt();
  97. switch (option) {
  98. case 1:
  99. crearBD();
  100. break;
  101. case 2:
  102. realizarDiagnostico();
  103. break;
  104. case 3:
  105. listarSintomasEnfermedad();
  106. break;
  107. case 4:
  108. listarEnfermedadesYCodigosAsociados();
  109. break;
  110. case 5:
  111. listarSintomasYTiposSemanticos();
  112. break;
  113. case 6:
  114. mostrarEstadisticasBD();
  115. break;
  116. case 7:
  117. exit();
  118. break;
  119. }
  120. } catch (Exception e) {
  121. System.err.println("Opción introducida no válida!");
  122. }
  123. } while (option != 7);
  124. exit();
  125. }
  126.  
  127. private void exit() {
  128. if (conectado != null){
  129. try{
  130. if(!conectado.isClosed())
  131. conectado.close();
  132. }
  133. catch (Exception e){
  134. System.out.println("No se pudo desconectar de la base de datos");
  135. }
  136. }
  137. System.out.println("Saliendo.. ¡hasta otra!");
  138. System.exit(0);
  139. }
  140.  
  141. private void conectar() {
  142. this.url= "jdbc:mysql://localhost:3306/";
  143. this.nombreUsuario= "bddx";
  144. this.driver= "com.mysql.jdbc.Driver";
  145. this.contraseña="bddx_pwd";
  146. this.nombreBD= "diagnostico";
  147. try {
  148. conectado = DriverManager.getConnection(url, nombreUsuario, contraseña);
  149. if(!conectado.isClosed()){
  150. System.out.println("Se ha conectado correctamente a la base de datos.");
  151. }
  152. } catch (SQLException e) {
  153. // TODO Auto-generated catch block
  154. e.printStackTrace();
  155. }
  156. }
  157.  
  158. public boolean existeDB() {
  159. boolean exist = false;
  160. try{
  161. Statement st = conectado.createStatement();
  162. String sql = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '" + this.nombreBD + "'";
  163. ResultSet rs = st.executeQuery(sql);
  164. if (rs.next()) {
  165. exist = true;
  166. }
  167. }catch (SQLException ex) {
  168. exist = false;
  169. } return exist;
  170. }
  171.  
  172. private void crearBD() {
  173. try {
  174. if (conectado == null || conectado.isClosed())
  175. this.conectar();
  176. }
  177. catch (Exception e) {
  178. System.out.println(e);
  179. }
  180. try{
  181. if(existeDB()==false){
  182. Statement stmt = conectado.createStatement();
  183. System.out.println("Creando diagnostico...");
  184. String qs= "CREATE DATABASE diagnostico";
  185. stmt.executeUpdate(qs);
  186. conectado.setCatalog(nombreBD);
  187. System.out.println("La base de datos diagnostico ha sido creada.");
  188. Statement stmt1= conectado.createStatement();
  189. stmt1.executeUpdate("CREATE TABLE source (source_id INT UNIQUE AUTO_INCREMENT, "
  190. + "name VARCHAR(255) UNIQUE, "
  191. + "PRIMARY KEY (source_id))");
  192.  
  193. Statement stmt2= conectado.createStatement();
  194. stmt2.executeUpdate("CREATE TABLE code (code VARCHAR(255), "
  195. + "source_id INT, "
  196. + "PRIMARY KEY (code), "
  197. + "FOREIGN KEY (source_id) REFERENCES source (source_id))");
  198.  
  199. Statement stmt3= conectado.createStatement();
  200. stmt3.executeUpdate("CREATE TABLE disease (disease_id INT AUTO_INCREMENT, "
  201. + "name VARCHAR(255) UNIQUE, "
  202. + "PRIMARY KEY (disease_id))");
  203.  
  204. Statement stmt4= conectado.createStatement();
  205. stmt4.executeUpdate( "CREATE TABLE disease_has_code (disease_id INT, "
  206. + "code VARCHAR(255),"
  207. + "source_id INT, "
  208. + "FOREIGN KEY (disease_id) REFERENCES disease (disease_id), "
  209. + "FOREIGN KEY (code) REFERENCES code (code), "
  210. + "FOREIGN KEY (source_id) REFERENCES code (source_id))");
  211.  
  212. Statement stmt5= conectado.createStatement();
  213. stmt5.executeUpdate("CREATE TABLE semantic_type (semantic_type_id INT AUTO_INCREMENT, "
  214. + "cui VARCHAR(45) UNIQUE,"
  215. + "PRIMARY KEY (semantic_type_id))");
  216.  
  217. Statement stmt6= conectado.createStatement();
  218. stmt6.executeUpdate("CREATE TABLE symptom (cui VARCHAR(25) , "
  219. + "name VARCHAR(255) UNIQUE, "
  220. + "semantic_type_id INT,"
  221. + "PRIMARY KEY (cui),"
  222. + "FOREIGN KEY (semantic_type_id) REFERENCES semantic_type (semantic_type_id))");
  223.  
  224. Statement stmt7= conectado.createStatement();
  225. stmt7.executeUpdate("CREATE TABLE disease_symptom (disease_id INT, "
  226. + "cui VARCHAR(25), "
  227. + "FOREIGN KEY (disease_id) REFERENCES disease (disease_id), "
  228. + "FOREIGN KEY (cui) REFERENCES symptom (cui))");
  229.  
  230. LinkedList<Enfermedad> enf= extraer();
  231. conectado.setAutoCommit(false);
  232. for(Enfermedad enfermito: enf){
  233.  
  234. String sqlSou= "INSERT INTO source (name) VALUES (?) ON DUPLICATE KEY UPDATE name=VALUES(name)"; // deberíamos cambiar los insert ignore into por esto que por lo visto da menos problemas
  235. PreparedStatement pSSource= conectado.prepareStatement(sqlSou);
  236. int souSize=enfermito.getCodigo().size();
  237. for(int i=0; i<souSize; i++){
  238. pSSource.setString(1,enfermito.getCodigo().get(i).getVocabulario());
  239. pSSource.executeUpdate();
  240. }
  241.  
  242. ResultSet souKey = pSSource.executeQuery("SELECT * FROM source");
  243. String [] vocab = new String [souSize];
  244. int a= 0;
  245. while(souKey.next()){
  246. vocab[a]= souKey.getString(2);
  247. a++;
  248. }
  249. souKey.beforeFirst();
  250.  
  251. String sqlCod= "INSERT IGNORE INTO code (code, source_id) VALUES (?,?)";
  252. PreparedStatement pSCode= conectado.prepareStatement(sqlCod);
  253. for(int i=0; i<souSize; i++){
  254. pSCode.setString(1,enfermito.getCodigo().get(i).getCodigo());
  255. String vocaAsociado = enfermito.getCodigo().get(i).getVocabulario();
  256. for(int j=0; j<vocab.length;j++){
  257. if(vocaAsociado.equals(vocab[j])) // estaría bien poner un condicional antes de vocaAsociado !=null, si da tiempo lo ponemos
  258. pSCode.setInt(2,j+1);
  259. }
  260. pSCode.executeUpdate();
  261. }
  262.  
  263. ResultSet codeKey = pSCode.executeQuery("SELECT * FROM code");
  264.  
  265. String sqlDis= "INSERT IGNORE INTO disease (name) VALUES (?)";
  266. PreparedStatement pSDis= conectado.prepareStatement(sqlDis);
  267. pSDis.setString(1,enfermito.getNombre());
  268. pSDis.executeUpdate();
  269.  
  270. ResultSet disKey = pSDis.executeQuery("SELECT * FROM disease");
  271. String [] dises = new String [souSize];
  272. int b= 0;
  273. while(disKey.next()){
  274. dises[b]= disKey.getString(2);
  275. b++;
  276. }
  277. disKey.beforeFirst();
  278.  
  279. String sqlDisHas= "INSERT IGNORE INTO disease_has_code (disease_id, code,source_id) VALUES (?,?,?)";
  280. PreparedStatement pSDisHas= conectado.prepareStatement(sqlDisHas);
  281.  
  282. for(int i=0; i<dises.length;i++){
  283. String enfermedadAIntroducir = enfermito.getNombre();
  284. if(enfermedadAIntroducir.equals(dises[i]))
  285. pSDisHas.setInt(1,i+1);
  286. }
  287. while(codeKey.next()){
  288. pSDisHas.setString(2,codeKey.getString(1));
  289. pSDisHas.setInt(3,codeKey.getInt(2));
  290. pSDisHas.executeUpdate();
  291. }
  292. codeKey.beforeFirst();
  293.  
  294. String sqlSem= "INSERT IGNORE INTO semantic_type(cui) VALUES (?)";
  295. int sintSize = enfermito.getSintoma().size();
  296. PreparedStatement pSSem= conectado.prepareStatement(sqlSem);
  297. for(int i=0; i<sintSize; i++){
  298. pSSem.setString(1, enfermito.getSintoma().get(i).getSemanticaTipo());
  299. pSSem.executeUpdate();
  300. }
  301. ResultSet semKey = pSSem.executeQuery("SELECT * FROM semantic_type"); // hasta aquí tengo comprobado que funciona perfecto
  302.  
  303. String sqlSym= "INSERT IGNORE INTO symptom (cui,name,semantic_type_id) VALUES (?,?,?)";
  304. PreparedStatement pSSym= conectado.prepareStatement(sqlSym);
  305. for(int i=1; i<sintSize; i++){
  306. pSSym.setString(1, enfermito.getSintoma().get(i).getCodigoSintoma());
  307. pSSym.setString(2, enfermito.getSintoma().get(i).getSintoma());
  308. pSSym.setInt(3,semKey.getInt(1));
  309. pSSym.executeUpdate();
  310. }
  311. ResultSet symKey= pSSym.executeQuery("SELECT cui FROM symptom");
  312. symKey.next();
  313.  
  314. String sqlDisSym= "INSERT IGNORE INTO disease_symptom (disease_id, cui) VALUES (?,?)";
  315. PreparedStatement pSDisSym= conectado.prepareStatement(sqlDisSym);
  316. while(symKey.next()){
  317. pSDisSym.setInt(1, disKey.getInt(1));
  318. pSDisSym.setString(2, symKey.getString(1));
  319. }
  320. souKey.close();
  321. codeKey.close();
  322. disKey.close();
  323. semKey.close();
  324. symKey.close();
  325. pSSource.close();
  326. pSCode.close();
  327. pSDis.close();
  328. pSDisHas.close();
  329. pSSym.close();
  330. pSSem.close();
  331. pSDisSym.close();
  332. }//fin insertar
  333. System.out.println("Los datos han sido introducidos correctamente.");
  334. //Ahora procedemos a cerrar los Statement
  335. stmt1.close();
  336. stmt2.close();
  337. stmt3.close();
  338. stmt4.close();
  339. stmt5.close();
  340. stmt6.close();
  341. stmt7.close();
  342. }else{
  343. Scanner scanner = new Scanner(System.in);
  344. System.out.println("Le informamos de la existencia de diagnostico, ¿Quieres borrar la base de datos? S/N");
  345. String condicion = scanner.nextLine();
  346. if(condicion.equals("S")){
  347. Statement stmt = conectado.createStatement();
  348. System.out.println("Borrando diagnostico...");
  349. String qs= "DROP DATABASE diagnostico";
  350. stmt.executeUpdate(qs);
  351. System.out.println("Borrado completado.");
  352. System.out.println("Creando la base de datos de nuevo.");
  353. stmt.close();
  354. this.crearBD();
  355. }
  356. }//fin existeBD
  357. }//fin try
  358. catch (Exception e) {
  359. try {
  360. Statement stmt = conectado.createStatement();
  361. System.out.println("Error al insertar. Borrando diagnostico...");
  362. String qs= "DROP DATABASE diagnostico";
  363. stmt.executeUpdate(qs);
  364. conectado.rollback();
  365. } catch (SQLException e1) {
  366. System.out.println(e);
  367. }
  368. e.printStackTrace();
  369. //System.out.println(e);
  370. }//fin catch
  371. finally{
  372. try {
  373. conectado.setAutoCommit(true);
  374. } catch (SQLException e) {
  375. System.out.println(e);
  376. }
  377. }//fin finally
  378. }//fin crearBD
  379.  
  380. //Creación de la base de datos en base al esquema E-R y carga de los datos del fichero
  381. //.data (ambos proporcionados). [3 puntos]: Dado el fichero de datos (ver sección 6 para
  382. //más información), se debe cargar su contenido usando código Java, procesarlo y en base
  383. //a la estructura del E-R y los datos contenidos, insertar la información en la base de
  384. //datos. Debe tenerse en cuenta el diagrama E-R para entender como son los datos y
  385. //como deben por lo tanto almacenarse. Obligatoriamente, debe ejecutarse la creación y
  386. //carga de todos los datos como si fuera una única transacción, de tal forma que cualquier
  387. //fallo intermedio de lugar a deshacer por completo los cambios anteriores.
  388.  
  389. private void realizarDiagnostico() {
  390. // implementar
  391. }
  392.  
  393. private void listarSintomasEnfermedad() {
  394. // implementar
  395. }
  396.  
  397. private void listarEnfermedadesYCodigosAsociados() {
  398. // implementar
  399. }
  400.  
  401. private void listarSintomasYTiposSemanticos() {
  402. // implementar
  403. }
  404.  
  405. private void mostrarEstadisticasBD() {
  406. // implementar
  407. }
  408.  
  409. private LinkedList<Enfermedad> extraer() throws Exception{
  410. LinkedList<Enfermedad> enfermito= new LinkedList<Enfermedad>();
  411. LinkedList<String> lista = readData();
  412. for(String enfermedades: lista){
  413. String [] cadena= enfermedades.split("="); // separamos enfermedad[0] y sintomas[1]
  414. String [] cadEnf = cadena[0].split(":"); // separamos enfermedad[0] de codigo y vocabulario[1]
  415. String nomEnf= cadEnf[0];
  416. String [] cadCodigos= cadEnf[1].split(";"); //separamos los codigos
  417. LinkedList<Codigo> lisCod = new LinkedList<Codigo>();
  418. for(int i=0;i<cadCodigos.length; i++){
  419. String [] codigo= cadCodigos[i].split("@"); // separamos codigo[0] y vocabulario[1]
  420. String cod= codigo[0]; //di si a los comentarios!
  421. String voc= codigo[1];
  422. Codigo cd= new Codigo (cod,voc); //creamos un nuevo codigo ( codigo, vocabulario)
  423. lisCod.add(cd);
  424. }
  425. String [] cadSint= cadena[1].split(";"); //separamos los sintomas
  426. LinkedList<Sintoma> lisSint = new LinkedList<Sintoma>();
  427. for(int i=0; i<cadSint.length; i++){
  428. String [] sintomas= cadSint[i].split(":"); //separamos sintoma, codigoSintoma y vocabularioSint
  429. String sint=sintomas[0];
  430. String codSint= sintomas[1];
  431. String vocSint= sintomas[2];
  432. Sintoma st= new Sintoma (sint, codSint, vocSint); // creamos nuevo Sintoma(sintoma, codigoSintoma, vocabulario)
  433. lisSint.add(st);
  434. }
  435. Enfermedad lisEnf = new Enfermedad(nomEnf,lisCod,lisSint);
  436. enfermito.add(lisEnf);
  437. }
  438. return enfermito;
  439. }
  440.  
  441.  
  442. /**
  443. * Método para leer números enteros de teclado.
  444. *
  445. * @return Devuelve el número leído.
  446. * @throws Exception
  447. * Puede lanzar excepción.
  448. */
  449. private int readInt() throws Exception {
  450. try {
  451. System.out.print("> ");
  452. return Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
  453. } catch (Exception e) {
  454. throw new Exception("Not number");
  455. }
  456. }
  457.  
  458. /**
  459. * Método para leer cadenas de teclado.
  460. *
  461. * @return Devuelve la cadena leída.
  462. * @throws Exception
  463. * Puede lanzar excepción.
  464. */
  465. private String readString() throws Exception {
  466. try {
  467. System.out.print("> ");
  468. return new BufferedReader(new InputStreamReader(System.in)).readLine();
  469. } catch (Exception e) {
  470. throw new Exception("Error reading line");
  471. }
  472. }
  473.  
  474. /**
  475. * Método para leer el fichero que contiene los datos.
  476. *
  477. * @return Devuelve una lista de String con el contenido.
  478. * @throws Exception
  479. * Puede lanzar excepción.
  480. */
  481. private LinkedList<String> readData() throws Exception {
  482. LinkedList<String> data = new LinkedList<String>();
  483. BufferedReader bL = new BufferedReader(new FileReader(DATAFILE));
  484. while (bL.ready()) {
  485. data.add(bL.readLine());
  486. }
  487. bL.close();
  488. return data;
  489. }
  490.  
  491. public static void main(String args[]) {
  492. new Diagnostico().showMenu();
  493.  
  494. }
  495. }
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505. // private void exit() {
  506. // if (conectado != null){
  507. // try{
  508. // if(!conectado.isClosed())
  509. // conectado.close();
  510. // }
  511. // catch (Exception e){
  512. // System.out.println("No se pudo desconectar de la base de datos");
  513. // }
  514. // }
  515. // System.out.println("Saliendo.. ¡hasta otra!");
  516. // System.exit(0);
  517. // }
  518. //
  519. // private void conectar() throws Exception {
  520. // String drv ="com.mysql.jdbc.Driver";
  521. // Class.forName(drv).newInstance();
  522. //
  523. // String serverAddress = "localhost:3306";
  524. // String user = "bddx";
  525. // String pwd = "bddx_pwd";
  526. // String url = "jdbc:mysql://" + serverAddress + "/";
  527. // conectado = DriverManager.getConnection(url, user, pwd);
  528. // if (!conectado.isClosed()){
  529. // System.out.println("¡Conectado a la base de datos!");
  530. // }
  531. // }
  532. //
  533. // private void crearBD() {
  534. // try {
  535. // if (conectado == null || conectado.isClosed())
  536. // this.conectar();
  537. // }
  538. // catch (Exception e) {
  539. // System.out.println(e);
  540. // }
  541. // try{ if(existeDB()==false){
  542. // Statement stmt = conectado.createStatement();
  543. // System.out.println("Creando diagnostico...");
  544. // String qs= "CREATE DATABASE diagnostico";
  545. // stmt.executeUpdate(qs);
  546. // conectado.setCatalog(nombreBD);
  547. // System.out.println("La base de datos diagnostico ha sido creada.");
  548. // Statement stmt1= conectado.createStatement();
  549. // stmt1.executeUpdate("CREATE TABLE source (source_id INT UNIQUE AUTO_INCREMENT, name VARCHAR(255))");
  550. //
  551. // Statement stmt2= conectado.createStatement();
  552. // stmt2.executeUpdate("CREATE TABLE code (source_id INT, code VARCHAR(255) UNIQUE, FOREIGN KEY (source_id)"
  553. // + " REFERENCES source (source_id))");
  554. //
  555. // Statement stmt3= conectado.createStatement();
  556. // stmt3.executeUpdate("CREATE TABLE disease (disease_id INT UNIQUE AUTO_INCREMENT, name VARCHAR(255))");
  557. //
  558. // Statement stmt4= conectado.createStatement();
  559. // stmt4.executeUpdate("CREATE TABLE disease_has_code (source_id INT, code VARCHAR(255),disease_id INT, FOREIGN KEY (disease_id)"
  560. // + " REFERENCES disease (disease_id), FOREIGN KEY (code) REFERENCES code (code), FOREIGN KEY (source_id) "
  561. // + "REFERENCES code (source_id))");
  562. //
  563. // Statement stmt6= conectado.createStatement();
  564. // stmt6.executeUpdate("CREATE TABLE semantic_type (semantic_type_id INT UNIQUE AUTO_INCREMENT, cui VARCHAR(45))");
  565. //
  566. // Statement stmt5= conectado.createStatement();
  567. // stmt5.executeUpdate("CREATE TABLE symptom (cui VARCHAR(25) UNIQUE, name VARCHAR(255), semantic_type_id INT,"
  568. // + " FOREIGN KEY (semantic_type_id) REFERENCES semantic_type (semantic_type_id))");
  569. //
  570. // Statement stmt7= conectado.createStatement();
  571. // stmt7.executeUpdate("CREATE TABLE disease_symptom (disease_id INT, cui VARCHAR(25), FOREIGN KEY (disease_id) REFERENCES disease (disease_id),"
  572. // + " FOREIGN KEY (cui) REFERENCES symptom (cui))");
  573. //
  574. // LinkedList<Enfermedad> enf= extraer();
  575. // conectado.setAutoCommit(false);
  576. // for(Enfermedad enfermito: enf){
  577. //
  578. // String sqlSou= "INSERT INTO source (name) VALUES (?)";
  579. // PreparedStatement pSSource= conectado.prepareStatement(sqlSou, Statement.RETURN_GENERATED_KEYS);
  580. // int souSize=enfermito.getCodigo().size();
  581. // for(int i=0; i<souSize; i++){
  582. // pSSource.setString(1,enfermito.getCodigo().get(i).getVocabulario());
  583. // pSSource.executeUpdate();
  584. // }
  585. // ResultSet souKey = pSSource.getGeneratedKeys();
  586. // souKey.next();
  587. //
  588. // String sqlCod= "INSERT INTO code (source_id, code) VALUES (?,?)";
  589. // PreparedStatement pSCode= conectado.prepareStatement(sqlCod);
  590. // for(int i=1; i<souSize; i++){
  591. // pSCode.setInt(1,souKey.getInt(1));
  592. // pSCode.setString(2,enfermito.getCodigo().get(i).getCodigo());
  593. // pSCode.executeUpdate();
  594. // }
  595. // ResultSet codeKey = pSCode.executeQuery("SELECT code FROM code WHERE code");
  596. // codeKey.next();
  597. //
  598. // String sqlDis= "INSERT INTO disease (name) VALUES (?)";
  599. // PreparedStatement pSDis= conectado.prepareStatement(sqlDis, Statement.RETURN_GENERATED_KEYS);
  600. // pSDis.setString(1,enfermito.getNombre());
  601. // pSDis.executeUpdate();
  602. // ResultSet disKey = pSDis.getGeneratedKeys();
  603. // disKey.next();
  604. //
  605. // String sqlDisHas= "INSERT INTO disease_has_code (source_id, code,disease_id) VALUES (?,?,?)";
  606. // PreparedStatement pSDisHas= conectado.prepareStatement(sqlDisHas);
  607. //
  608. // while(codeKey.next()){
  609. // pSDisHas.setInt(1,souKey.getInt(1));
  610. // pSDisHas.setString(2,codeKey.getString(1));
  611. // pSDisHas.setInt(3,disKey.getInt(1));
  612. // pSDisHas.executeUpdate();
  613. // }
  614. //
  615. // String sqlSem= "INSERT INTO semantic_type(cui) VALUES (?)";
  616. // PreparedStatement pSSem= conectado.prepareStatement(sqlSem, Statement.RETURN_GENERATED_KEYS);
  617. // for(int i=1; i<souSize; i++){
  618. // pSSem.setString(1, enfermito.getSintoma().get(i).getSemanticaTipo());
  619. // pSSem.executeUpdate();
  620. // }
  621. // ResultSet semKey = pSSem.getGeneratedKeys();
  622. // semKey.next();
  623. //
  624. // String sqlSym= "INSERT INTO symptom (cui,name,semantic_type_id) VALUES (?,?,?)";
  625. // PreparedStatement pSSym= conectado.prepareStatement(sqlSym);
  626. // int sintSize=enfermito.getSintoma().size();
  627. // for(int i=1; i<sintSize; i++){
  628. // pSSym.setString(1, enfermito.getSintoma().get(i).getCodigoSintoma());
  629. // pSSym.setString(2, enfermito.getSintoma().get(i).getSintoma());
  630. // pSSym.setInt(3,semKey.getInt(1));
  631. // pSSym.executeUpdate();
  632. // }
  633. // ResultSet symKey= pSSym.executeQuery("SELECT cui FROM symptom");
  634. // symKey.next();
  635. //
  636. // String sqlDisSym= "INSERT INTO disease_symptom (disease_id, cui) VALUES (?,?)";
  637. // PreparedStatement pSDisSym= conectado.prepareStatement(sqlDisSym);
  638. // while(symKey.next()){
  639. // pSDisSym.setInt(1, disKey.getInt(1));
  640. // pSDisSym.setString(2, symKey.getString(1));
  641. // }
  642. // souKey.close();
  643. // codeKey.close();
  644. // disKey.close();
  645. // semKey.close();
  646. // symKey.close();
  647. // pSSource.close();
  648. // pSCode.close();
  649. // pSDis.close();
  650. // pSDisHas.close();
  651. // pSSym.close();
  652. // pSSem.close();
  653. // pSDisSym.close();
  654. // }//fin insertar
  655. // System.out.println("Los datos han sido introducidos correctamente.");
  656. // //Ahora procedemos a cerrar los Statement
  657. // stmt1.close();
  658. // stmt2.close();
  659. // stmt3.close();
  660. // stmt4.close();
  661. // stmt5.close();
  662. // stmt6.close();
  663. // stmt7.close();
  664. // }else{
  665. // Scanner scanner = new Scanner(System.in);
  666. // System.out.println("Le informamos de la existencia de diagnostico, ¿Quieres borrar la base de datos? S/N");
  667. // String condicion = scanner.nextLine();
  668. // if(condicion.equals("S")){
  669. // Statement stmt = conectado.createStatement();
  670. // System.out.println("Borrando diagnostico...");
  671. // String qs= "DROP DATABASE diagnostico";
  672. // stmt.executeUpdate(qs);
  673. // System.out.println("Borrado completado.");
  674. // System.out.println("Creando la base de datos de nuevo.");
  675. // stmt.close();
  676. // this.crearBD();
  677. // }
  678. // }//fin existeBD
  679. // }//fin try
  680. // catch (Exception e) {
  681. // try {
  682. // Statement stmt = conectado.createStatement();
  683. // System.out.println("Error al insertar. Borrando diagnostico...");
  684. // String qs= "DROP DATABASE diagnostico";
  685. // stmt.executeUpdate(qs);
  686. // conectado.rollback();
  687. // } catch (SQLException e1) {
  688. // System.out.println(e);
  689. // }
  690. // e.printStackTrace();
  691. // //System.out.println(e);
  692. // }//fin catch
  693. // finally{
  694. // try {
  695. // conectado.setAutoCommit(true);
  696. // } catch (SQLException e) {
  697. // System.out.println(e);
  698. // }
  699. // }//fin finally
  700. // }
  701. // // try{
  702. // // if(conn == null || conn.isClosed()){
  703. // // this.conectar();
  704. // // }
  705. // // }
  706. // // catch(Exception e) {
  707. // // System.out.println(e);
  708. // // }
  709. // // try{
  710. // // if(!existeDB()){
  711. // // Statement stmt = conn.createStatement();
  712. // // System.out.println("Creando diagnostico...");
  713. // // String qs= "CREATE DATABASE diagnostico";
  714. // // stmt.executeUpdate(qs);
  715. // // conn.setCatalog(nombreBD);
  716. // // System.out.println("La base de datos diagnostico ha sido creada.");
  717. // // Statement stmt1= conn.createStatement();
  718. // // stmt1.executeUpdate("CREATE TABLE source (source_id INT UNIQUE AUTO_INCREMENT, name VARCHAR(255))");
  719. // // Statement stmt2= conn.createStatement();
  720. // // stmt2.executeUpdate("CREATE TABLE code (source_id INT, code VARCHAR(255), PRIMARY KEY (code), FOREIGN KEY (source_id)"
  721. // // + " REFERENCES source (source_id))");
  722. // // Statement stmt3= conn.createStatement();
  723. // // stmt3.executeUpdate("CREATE TABLE disease (disease_id INT UNIQUE AUTO_INCREMENT, name VARCHAR(255))");
  724. // // Statement stmt4= conn.createStatement();
  725. // // stmt4.executeUpdate("CREATE TABLE disease_has_code (source_id INT, code VARCHAR(255),disease_id INT, FOREIGN KEY (disease_id)"
  726. // // + " REFERENCES disease (disease_id), FOREIGN KEY (code) REFERENCES code (code), FOREIGN KEY (source_id) "
  727. // // + "REFERENCES code (source_id))");
  728. // // Statement stmt6= conn.createStatement();
  729. // // stmt6.executeUpdate("CREATE TABLE semantic_type (semantic_type_id INT UNIQUE AUTO_INCREMENT, cui VARCHAR(45))");
  730. // // Statement stmt5= conn.createStatement();
  731. // // stmt5.executeUpdate("CREATE TABLE symptom (cui VARCHAR(25), name VARCHAR(255), semantic_type_id INT, PRIMARY KEY (cui),"
  732. // // + " FOREIGN KEY (semantic_type_id) REFERENCES semantic_type (semantic_type_id))");
  733. // // Statement stmt7= conn.createStatement();
  734. // // stmt7.executeUpdate("CREATE TABLE disease_symptom (disease_id INT, cui VARCHAR(25), FOREIGN KEY (disease_id) REFERENCES disease (disease_id),"
  735. // // + " FOREIGN KEY (cui) REFERENCES symptom (cui))");
  736. // // LinkedList<String> lista = readData();
  737. // // for(String enfermedades: lista){
  738. // // String arreglado = enfermedades.replaceAll("'", "''"); //cambiamos los apostrofes por doble apostrofe para que no haya problemas al insertar
  739. // // String [] cadena= arreglado.split("="); // separamos enfermedad[0] y sintomas[1]
  740. // // String [] cadEnf = cadena[0].split(":"); // separamos enfermedad[0] de codigo y vocabulario[1]
  741. // // String nomEnf= cadEnf[0];
  742. // // String [] cadCodigos= cadEnf[1].split(";"); //separamos los codigos
  743. // // LinkedList<Codigo> lisCod = new LinkedList<>();
  744. // // for(int i=0;i<cadCodigos.length; i++){
  745. // // String [] codigo= cadCodigos[i].split("@"); // separamos codigo[0] y vocabulario[1]
  746. // // String cod= codigo[0]; //di si a los comentarios!
  747. // // String voc= codigo[1];
  748. // // Codigo cd= new Codigo (cod,voc); //creamos un nuevo codigo ( codigo, vocabulario)
  749. // // lisCod.add(cd);
  750. // // }
  751. // // String [] cadSint= cadena[1].split(";"); //separamos los sintomas
  752. // // LinkedList<Sintoma> lisSint = new LinkedList<>();
  753. // // for(int i=0; i<cadSint.length; i++){
  754. // // String [] sintomas= cadSint[i].split(":"); //separamos sintoma, codigoSintoma y vocabularioSint
  755. // // String sint=sintomas[0];
  756. // // String codSint= sintomas[1];
  757. // // String vocSint= sintomas[2];
  758. // // Sintoma st= new Sintoma (sint, codSint, vocSint); // creamos nuevo Sintoma(sintoma, codigoSintoma, vocabulario)
  759. // // lisSint.add(st);
  760. // // }
  761. // // Enfermedad enfermito = new Enfermedad(nomEnf,lisCod,lisSint);
  762. // // conn.setAutoCommit(false);
  763. // // //insercion datos Tabla SOURCE
  764. // // String sqlSou= "INSERT INTO source (name) VALUES ('"+enfermito.getCodigo().element().getVocabulario()+"')";
  765. // // stmt1.executeUpdate(sqlSou,Statement.RETURN_GENERATED_KEYS);
  766. // // ResultSet souKey = stmt1.getGeneratedKeys();
  767. // // souKey.next();
  768. // // //insercion datos Tabla CODE
  769. // // stmt2.executeUpdate("INSERT INTO code (source_id, code) VALUES ('"+souKey.getInt(1)+"','"+enfermito.getCodigo().element().getCodigo()+"')");
  770. // // ResultSet codeKey = stmt2.executeQuery("SELECT code FROM code");
  771. // // codeKey.next();
  772. // // //insercion datos Tabla DISEASE
  773. // // System.out.println(enfermito.getNombre().toString());
  774. // // // String prueba = enfermito.getNombre().replaceAll("'","''");
  775. // // String sqlDis= "INSERT INTO disease (name) VALUES ('"+enfermito.getNombre()+"')"; //esta es la que provoca el error y ni idea de porque
  776. // // stmt3.executeUpdate(sqlDis, Statement.RETURN_GENERATED_KEYS);
  777. // // ResultSet disKey = stmt3.getGeneratedKeys();
  778. // // disKey.next();
  779. // // //insercion datos Tabla DISEASE_HAS_CODE
  780. // // stmt4.executeUpdate("INSERT INTO disease_has_code (source_id, code,disease_id) VALUES ('"+souKey.getInt(1)+"','"+codeKey.getString(1)+""
  781. // // + "','"+disKey.getInt(1)+"')");
  782. // // //insercion datos Tabla semantic_type
  783. // // String sqlSem= "INSERT INTO semantic_type(cui) VALUES ('"+enfermito.getSintoma().element().getSemanticaTipo()+"')";
  784. // // stmt6.executeUpdate(sqlSem, Statement.RETURN_GENERATED_KEYS);
  785. // // ResultSet semKey = stmt6.getGeneratedKeys();
  786. // // semKey.next();
  787. // // //insercion datos Tabla symptom
  788. // // stmt5.executeUpdate("INSERT INTO symptom (cui,name,semantic_type_id) VALUES ('"+enfermito.getSintoma().element().getCodigoSintoma()+"',"
  789. // // + "'"+enfermito.getSintoma().element().getSintoma()+"','"+semKey.getInt(1)+"')");
  790. // // ResultSet sympKey = stmt2.executeQuery("SELECT cui FROM symptom");
  791. // // sympKey.next();
  792. // // //insercion datos Tabla disease_symptom
  793. // // stmt7.executeUpdate("INSERT INTO disease_symptom (disease_id, cui) VALUES ('"+disKey.getInt(1)+"','"+sympKey.getString(1)+"')");
  794. // // souKey.close();
  795. // // codeKey.close();
  796. // // disKey.close();
  797. // // semKey.close();
  798. // // sympKey.close();
  799. // // }//fin insertar
  800. // // //Ahora procedemos a cerrar los Statement
  801. // // stmt1.close();
  802. // // stmt2.close();
  803. // // stmt3.close();
  804. // // stmt4.close();
  805. // // stmt5.close();
  806. // // stmt6.close();
  807. // // stmt7.close();
  808. // // }
  809. // // else{
  810. // // Scanner scanner = new Scanner(System.in);
  811. // // System.out.println("Le informamos de la existencia de diagnostico, ¿desea borrarla?");
  812. // // String condicion = scanner.nextLine();
  813. // // if(condicion.equals("Si")|| condicion.equals("si")){
  814. // // Statement stmt = conn.createStatement();
  815. // // System.out.println("Borrando diagnostico...");
  816. // // String qs= "DROP DATABASE diagnostico";
  817. // // stmt.executeUpdate(qs);
  818. // // System.out.println("Borrado completado.");
  819. // // System.out.println("Creando la base de datos de nuevo.");
  820. // // stmt.close();
  821. // // this.crearBD();
  822. // // }
  823. // // }//fin existeBD
  824. // // conn.commit();
  825. // // }//fin try
  826. // // catch (Exception e) {
  827. // // try {
  828. // // conn.rollback();
  829. // // } catch (SQLException e1) {
  830. // // System.out.println(e);
  831. // // }
  832. // // System.out.println(e);
  833. // // }//fin catch
  834. // // finally{
  835. // // try {
  836. // // conn.setAutoCommit(true);
  837. // // } catch (SQLException e) {
  838. // // System.out.println(e);
  839. // // }
  840. // // }
  841. // // }
  842. //
  843. // private void realizarDiagnostico() {
  844. // try {
  845. // if (conectado == null || conectado.isClosed())
  846. // this.conectar();
  847. //
  848. // }
  849. // catch (Exception e) {
  850. // System.out.println(e);
  851. // }
  852. // /* Lo que tenga que hacer */
  853. //
  854. // }
  855. //
  856. // private void listarSintomasEnfermedad() {
  857. // try {
  858. // if (conectado == null || conectado.isClosed())
  859. // this.conectar();
  860. // }
  861. // catch (Exception e) {
  862. // System.out.println(e);
  863. // }
  864. // /* Lo que tenga que hacer */
  865. //
  866. // }
  867. //
  868. // private void listarEnfermedadesYCodigosAsociados() {
  869. // try {
  870. // if (conectado == null || conectado.isClosed())
  871. // this.conectar();
  872. // }
  873. // catch (Exception e) {
  874. // System.out.println(e);
  875. // }
  876. // /* Lo que tenga que hacer */
  877. //
  878. // }
  879. //
  880. // private void listarSintomasYTiposSemanticos() {
  881. // try {
  882. // if (conectado == null || conectado.isClosed())
  883. // this.conectar();
  884. // }
  885. // catch (Exception e) {
  886. // System.out.println(e);
  887. // }
  888. // /* Lo que tenga que hacer */
  889. //
  890. // }
  891. //
  892. // private void mostrarEstadisticasBD() {
  893. // try {
  894. // if (conectado == null || conectado.isClosed())
  895. // this.conectar();
  896. // }
  897. // catch (Exception e) {
  898. // System.out.println(e);
  899. // }
  900. // /* Lo que tenga que hacer */
  901. //
  902. // }
  903. //
  904. // /**
  905. // * Método para leer números enteros de teclado.
  906. // *
  907. // * @return Devuelve el número leído.
  908. // * @throws Exception
  909. // * Puede lanzar excepción.
  910. // */
  911. // private int readInt() throws Exception {
  912. // try {
  913. // System.out.print("> ");
  914. // return Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
  915. // } catch (Exception e) {
  916. // throw new Exception("Not number");
  917. // }
  918. // }
  919. //
  920. // /**
  921. // * Método para leer cadenas de teclado.
  922. // *
  923. // * @return Devuelve la cadena leída.
  924. // * @throws Exception
  925. // * Puede lanzar excepción.
  926. // */
  927. // private String readString() throws Exception {
  928. // try {
  929. // System.out.print("> ");
  930. // return new BufferedReader(new InputStreamReader(System.in)).readLine();
  931. // } catch (Exception e) {
  932. // throw new Exception("Error reading line");
  933. // }
  934. // }
  935. //
  936. // /**
  937. // * Método para leer el fichero que contiene los datos.
  938. // *
  939. // * @return Devuelve una lista de String con el contenido.
  940. // * @throws Exception
  941. // * Puede lanzar excepción.
  942. // */
  943. // private LinkedList<String> readData() throws Exception {
  944. // LinkedList<String> data = new LinkedList<String>();
  945. // BufferedReader bL = new BufferedReader(new FileReader(DATAFILE));
  946. // while (bL.ready()) {
  947. // data.add(bL.readLine());
  948. // }
  949. // bL.close();
  950. // return data;
  951. // }
  952. //
  953. // private LinkedList<Enfermedad> extraer() throws Exception{
  954. // LinkedList<Enfermedad> enfermito= new LinkedList<Enfermedad>();
  955. // LinkedList<String> lista = readData();
  956. // for(String enfermedades: lista){
  957. // String [] cadena= enfermedades.split("="); // separamos enfermedad[0] y sintomas[1]
  958. // String [] cadEnf = cadena[0].split(":"); // separamos enfermedad[0] de codigo y vocabulario[1]
  959. // String nomEnf= cadEnf[0];
  960. // String [] cadCodigos= cadEnf[1].split(";"); //separamos los codigos
  961. // LinkedList<Codigo> lisCod = new LinkedList<Codigo>();
  962. // for(int i=0;i<cadCodigos.length; i++){
  963. // String [] codigo= cadCodigos[i].split("@"); // separamos codigo[0] y vocabulario[1]
  964. // String cod= codigo[0]; //di si a los comentarios!
  965. // String voc= codigo[1];
  966. // Codigo cd= new Codigo (cod,voc); //creamos un nuevo codigo ( codigo, vocabulario)
  967. // lisCod.add(cd);
  968. // }
  969. // String [] cadSint= cadena[1].split(";"); //separamos los sintomas
  970. // LinkedList<Sintoma> lisSint = new LinkedList<Sintoma>();
  971. // for(int i=0; i<cadSint.length; i++){
  972. // String [] sintomas= cadSint[i].split(":"); //separamos sintoma, codigoSintoma y vocabularioSint
  973. // String sint=sintomas[0];
  974. // String codSint= sintomas[1];
  975. // String vocSint= sintomas[2];
  976. // Sintoma st= new Sintoma (sint, codSint, vocSint); // creamos nuevo Sintoma(sintoma, codigoSintoma, vocabulario)
  977. // lisSint.add(st);
  978. // }
  979. // Enfermedad lisEnf = new Enfermedad(nomEnf,lisCod,lisSint);
  980. // enfermito.add(lisEnf);
  981. // }
  982. // return enfermito;
  983. // }
  984. //
  985. // public static void main(String args[]) throws Exception {
  986. //
  987. // new Diagnostico().showMenu();
  988. // }
  989. //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement