hwmf Ответов: 1

Как я могу импортировать данные файла excel в базу данных с помощью JAVA


I have an excel sheet with multiple columns.

i want this to be imported into sql via 12 tables.

but three of this table have foreign keys from other tables

how would i do this using java.

Please help.
Thanks


Что я уже пробовал:

package importDB;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import java.sql.Statement;

public class excelReading {

	
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) {
		
		ArrayList<String> values = new ArrayList<String>();
		Connection connection;
		Statement statement;
		
		
		
		try {
			
			InputStream input = new FileInputStream("etudiants.xls");
			POIFSFileSystem fs = new POIFSFileSystem(input);
			HSSFWorkbook wb =new HSSFWorkbook(fs);
			HSSFSheet sheet = wb.getSheetAt(0);
			Iterator rows = sheet.rowIterator();
			
			while (rows.hasNext()) {
				
				values.clear();
				
				HSSFRow row = (HSSFRow) rows.next();
				
				Iterator cells =row.cellIterator();
				
				while (cells.hasNext()) {
					HSSFCell cell = (HSSFCell) cells.next();
					
					switch (cell.getCellType()) {
					case BOOLEAN:
						values.add(Boolean.toString((boolean)cell.getBooleanCellValue()));
					case NUMERIC:
						values.add(Integer.toString((int) cell.getNumericCellValue()));
					default:
						values.add(cell.getStringCellValue());
					}
				}
				
				
				try {
					Class.forName("com.mysql.jdbc.Driver").newInstance();
					
					connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/mydb1", "root","");
					
					statement = connection.createStatement();
					
					String sql00 = String.format("INSERT INTO filiere (lib_Filiere) VALUES ('%s')", values.get(22));
					String sql01 = String.format("INSERT INTO specialite (lib_specialite) VALUES ('%s')", values.get(12));
					String sql02 = String.format("INSERT INTO ville (lib_ville) VALUES ('%s')", values.get(8));
					String sql03 = String.format("INSERT INTO diplome (lib_diplome) VALUES ('%s')", values.get(0));
					String sql04 = String.format("INSERT INTO etablissement (lib_etablissement) VALUES ('%s')", values.get(0));
					String sql05 = String.format("INSERT INTO mention (lib_mention) VALUES ('%s')", values.get(0));
					String sql06 = String.format("INSERT INTO semestre (lib_semestre, Date_debut, Date_fin) VALUES ('s1','NULL','NULL')");
					String sql07 = String.format("INSERT INTO etudiant (nom, prenom, Date_naissance, CIN, Telephone, Email) VALUES ('%s','%s','%s','%s','%s','%s')", 
							values.get(0), values.get(1), values.get(4), values.get(3),
							values.get(5), values.get(6));
					
		//here is where i'm blocked i don't know what to do
					String sql08 = String.format("INSERT INTO obtenir_diplome (id_Diplome, id_mention, id_Specialite, id_Ville, id_Etablissement, Id_etudiant, annee_obtention) "
							+ "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
							select id_Diplome from diplome, values.get(0));
					String sql09 = String.format("INSERT INTO obtenir_semestre (id_semestre, Id_etudiant, note) VALUES (select id_semestre from)", 
							values.get(0));
					String sql10 = String.format("INSERT INTO choisir_filiere (Id_etudiant, id_Filiere, premiere_choix) VALUES ('%s', '%s', '%s')", 
							values.get(0));
					
					
					int count00 = statement.executeUpdate(sql00);
					if (count00 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count01 = statement.executeUpdate(sql01);
					if (count01 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count02 = statement.executeUpdate(sql02);
					if (count02 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count03 = statement.executeUpdate(sql03);
					if (count03 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count04 = statement.executeUpdate(sql04);
					if (count04 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count05 = statement.executeUpdate(sql05);
					if (count05 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count06 = statement.executeUpdate(sql06);
					if (count06 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count07 = statement.executeUpdate(sql07);
					if (count07 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count08 = statement.executeUpdate(sql08);
					if (count08 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count09 = statement.executeUpdate(sql09);
					if (count09 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					int count10 = statement.executeUpdate(sql10);
					if (count10 > 0) {
						System.out.println("Enregistrement effectué!");
					}
					
					
				}catch(Exception e) {
					e.printStackTrace();
				}
				
			}
		}catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

1 Ответов

Рейтинг:
0

CHill60

Вместо того, чтобы комментировать, что вы "заблокированы" состояние на самом деле происходит, то есть что такое сообщение об ошибке?

Основываясь на комментарии в вашем коде, я думаю, что это решение вашей проблемы..

На любом языке, который вы используете, вы должны убедиться, что значения, указанные во внешних ключах, уже существуют в других таблицах

Вы не дали нам никаких подробностей о ваших таблицах или данных, так что этот простой пример придется сделать..

Скажем, у вас есть два стола - Car который имеет столбцы (id int, color int) где color является внешним ключом к ..
то Color таблица, имеющая столбцы (colorid int, description varchar(25)).

Для этого примера предположим, что обе таблицы полностью пусты.

Этот код приведет к ошибке

INSERT INTO Car (id, color) VALUES (1,1);
INSERT INTO Color (id, description) VALUES (1, 'Blue');
поскольку строка для "синего" с идентификатором 1 не существует в Color таблица в тот момент времени, когда вы пытаетесь ссылаться на нее.

Настоящий кодекс будет работа
INSERT INTO Color (id, description) VALUES (1, 'Blue');
INSERT INTO Car (id, color) VALUES (1,1);

Если у вас есть более одного внешнего ключа то все значения уже должны существовать в соответствующей таблице например
INSERT INTO Color (id, description) VALUES (1, 'Blue');
INSERT INTO Make (id, maker) VALUES (1, 'Fiat');
INSERT INTO Car (id, color) VALUES (1,1);
нет
INSERT INTO Car (id, color) VALUES (1,1);
INSERT INTO Color (id, description) VALUES (1, 'Blue');
INSERT INTO Make (id, maker) VALUES (1, 'Fiat');
Вы также слепо вставляете все, что находится на листе Excel, в свою базу данных - что делать, если две строки имеют ville = 'Honfleur'? Если вы поставили ограничение на свой стол, то это может быть ошибка, которую вы получаете.

Вы должны проверить, существует ли это значение уже или использовать его INSERT IGNORE или REPLACE или INSERT .. ON DUPLICATE KEY UPDATE(они специфичны для MySql, эта концепция известна как "UPSERT")