Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разборка xml и слаживание в базу данных 
:(
    Опции темы
ayurevi4
Дата 23.8.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.12.2009

Репутация: нет
Всего: нет



проблема с закидывание данных в бд.  у меня должно быть база данных со связанными таблицами country, region и city. закинуть данные в city не получается.
Код

CREATE TABLE country
    (id VARCHAR(2),
     name_ru VARCHAR(20),
     name_en VARCHAR(20),
     CONSTRAINT pk_country PRIMARY KEY (id)
     );
CREATE TABLE region
    (region VARCHAR(40),
    CONSTRAINT pk_region PRIMARY KEY (region)
    );
CREATE TABLE city
    (id_coutry VARCHAR(2),
     name_region VARCHAR(40),
     city VARCHAR(40),
     CONSTRAINT fk_id FOREIGN KEY (id_coutry) REFERENCES COUNTRY(id) ON DELETE CASCADE,
      CONSTRAINT fk_region FOREIGN KEY (name_region) REFERENCES REGION(region) ON DELETE CASCADE
     );


Код

<?xml version="1.0" encoding="UTF-8"?>
<countries>
  <country id="ru" name_ru="Россия" name_en="Russian Federation">
    <region name="Алтайский край">
      <city name="Алейск" />
      <city name="Барнаул" />
      <city name="Белокуриха" />
      <city name="Бийск" />
      <city name="Горняк" />
      <city name="Заринск" />
      <city name="Змеиногорск" />
      <city name="Камень-на-Оби" />
      <city name="Новоалтайск" />
      <city name="Рубцовск" />
      <city name="Славгород" />
      <city name="Яровое" />
    </region>
    <region name="Амурская обл">
      <city name="Белогорск" />
      <city name="Благовещенск" />
      <city name="Завитинск" />
      <city name="Зея" />
      <city name="Райчихинск" />
      <city name="Свободный" />
      <city name="Сковородино" />

Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package java_2_3;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 *
 * @author alex
 */

public class Main extends DefaultHandler{
private String currentElement = null;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws InstantiationException, ClassNotFoundException, IllegalAccessException, IOException, SAXException {
      Class c = Class.forName("org.apache.xerces.parsers.SAXParser");
      XMLReader reader = (XMLReader)c.newInstance();
      Main ss = new Main();
      reader.setContentHandler(ss);
      reader.parse("geo.xml");
  }
  public void startElement(String uri, String local_name, String raw_name, Attributes amap) throws SAXException {
    String driverClass  = "org.apache.derby.jdbc.EmbeddedDriver";
    String connectionURL  = "jdbc:derby://localhost:1527/GEO_DB";
    String userID = "admin";
    String userPassword = "admin";
    Connection con = null;
    PreparedStatement stmt  = null;
    currentElement = local_name;
    try {
            Class.forName(driverClass);
            con = DriverManager.getConnection(connectionURL, userID, userPassword);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    try {
      if(local_name.equals("country")){
          //System.out.println(local_name+", "+amap.getValue(0)+", "+amap.getValue(1)+", "+amap.getValue(2));
          String queryString = "INSERT into country(id, name_ru, name_en)" + "VALUES(?,?,?)";
          stmt = (PreparedStatement) con.prepareStatement (queryString);
          stmt.setString(1, amap.getValue(0));
          stmt.setString(2, amap.getValue(1));
          stmt.setString(3, amap.getValue(2));
          stmt.execute();
          stmt.close();
      }
      if(local_name.equals("region")){
          //System.out.println(local_name+", "+amap.getValue(0));
          String queryString = "INSERT into region(region)" + "VALUES(?)";
          stmt = (PreparedStatement) con.prepareStatement (queryString);
          stmt.setString(1, amap.getValue(0));
          stmt.execute();
          stmt.close();
      }
      if(local_name.equals("city")){
          //System.out.println(local_name+", "+amap.getValue(0));
          String queryString = "INSERT into city" + "VALUES(?)";[color=red][/color]
          stmt = (PreparedStatement) con.prepareStatement (queryString);

          stmt.setString(1, amap.getValue(0));
          stmt.execute();
          stmt.close();
      }
    } catch (SQLException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
   try {
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
  }
  public void characters(char[] ch, int start, int length) throws SAXException {
   String value = new String(ch,start,length);
   if (!Character.isISOControl(value.charAt(0))) {
    System.out.println("characters " + value + " found " + currentElement);


    }
}}


Как должен выглядеть код в выделенной строчке???
пробовал как то так
 
Код

String queryString = "INSERT into city(city)" + "VALUES(IDENTITY_VAL_LOCAL(), IDENTITY_VAL_LOCAL(), ?)";

получал 
23.08.2010 11:55:07 java_2_3.Main startElement
SEVERE: null
    java.sql.SQLSyntaxErrorException: 'ID_COUNTRY' не является столбцом в таблице или VTI 'ADMIN.CITY'.
            at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
            at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
            at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)
            at java_2_3.Main.startElement(Main.java:73)
            at org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1376)
            at org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLValidator.java:1284)
            at org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentScanner.java:1806)
            at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1182)
            at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
            at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
            at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1139)
            at java_2_3.Main.main(Main.java:33)
PM MAIL ICQ   Вверх
LSD
Дата 23.8.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код

insert into city (id_coutry, name_region, city) values (?, ?, ?)

Ну и плюс надо будет сохранять текущий регион и страну. И заодно открывать соединение не в каждом startElement() а один раз.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.