首先该程序是不改变文件的任何信息,直接读取存入到mysql数据库,每次读取一个shp,需要批量读取shp到mysql数据库需要你自己在扩展一下,导入到mysql的shp要保证不能与mysql具有相同的表名。
一、需要的依赖(mysql)
<dependency>
<groupId>org.geotools.jdbc</groupId>
<artifactId>gt-jdbc-mysql</artifactId>
<version>${geotools.version}</version>
</dependency>
二、需要导入的jar包
1 package com.hpu.jdbc;
3 import java.io.File;
4 import java.io.IOException;
5 import java.nio.charset.Charset;
6 import java.util.ArrayList;
7 import java.util.List;
9 import org.geotools.data.DataStore;
10 import org.geotools.data.DataStoreFinder;
11 import org.geotools.data.FeatureWriter;
12 import org.geotools.data.Transaction;
13 import org.geotools.data.mysql.MySQLDataStoreFactory;
14 import org.geotools.data.shapefile.ShapefileDataStore;
15 import org.geotools.data.simple.SimpleFeatureCollection;
16 import org.geotools.data.simple.SimpleFeatureIterator;
17 import org.geotools.data.simple.SimpleFeatureSource;
18 import org.geotools.data.store.ContentEntry;
19 import org.geotools.feature.NameImpl;
20 import org.geotools.feature.simple.SimpleFeatureBuilder;
21 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
22 import org.geotools.geometry.jts.JTSFactoryFinder;
23 import org.geotools.jdbc.JDBCDataStore;
25 import org.opengis.feature.simple.SimpleFeature;
26 import org.opengis.feature.simple.SimpleFeatureType;
27 import org.opengis.feature.type.AttributeDescriptor;
三、读取shp文件
1 public static SimpleFeatureSource readSHP( String shpfile){
2 SimpleFeatureSource featureSource =null;
3 try {
4 File file = new File(shpfile);
5 ShapefileDataStore shpDataStore = null;
7 shpDataStore = new ShapefileDataStore(file.toURL());
8 //设置编码
9 Charset charset = Charset.forName("GBK");
10 shpDataStore.setCharset(charset);
11 String tableName = shpDataStore.getTypeNames()[0];
12 featureSource = shpDataStore.getFeatureSource (tableName);
13 }catch (Exception e){
14 e.printStackTrace();
15 }
16 return featureSource;
四、连接数据库
1 public static JDBCDataStore connnection2mysql(String host,String dataBase,int port,String userName,String pwd ){
2 JDBCDataStore ds=null;
3 DataStore dataStore=null;
4 //连接数据库参数
5 java.util.Map params = new java.util.HashMap();
6 params.put(MySQLDataStoreFactory.DBTYPE.key, "mysql");
7 params.put(MySQLDataStoreFactory.HOST.key, host);
8 params.put(MySQLDataStoreFactory.PORT.key, port);
9 params.put(MySQLDataStoreFactory.DATABASE.key, dataBase);
10 params.put(MySQLDataStoreFactory.USER.key, userName);
11 params.put(MySQLDataStoreFactory.PASSWD.key, pwd);
12 try {
13 dataStore=DataStoreFinder.getDataStore(params);
14 if (dataStore!=null) {
15 ds=(JDBCDataStore)dataStore;
16 System.out.println(dataBase+"连接成功");
17 }else{
19 System.out.println(dataBase+"连接失败");
20 }
22 } catch (IOException e) {
23 // TODO Auto-generated catch block
25 e.printStackTrace();
27 }
29 return ds;
五、创建表格
1 public static JDBCDataStore createTable(JDBCDataStore ds, SimpleFeatureSource featureSource){
2 SimpleFeatureType schema = featureSource.getSchema();
3 try {
4 //创建数据表
5 ds.createSchema(schema);
7 } catch (IOException e) {
8 // TODO Auto-generated catch block
9 e.printStackTrace();
10 }
11 return ds;
六、写入数据
1 public static void writeShp2Mysql(JDBCDataStore ds, SimpleFeatureSource featureSource ){
2 SimpleFeatureType schema = featureSource.getSchema();
3 //开始写入数据
4 try {
5 FeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds .getFeatureWriter(schema.getTypeName().toLowerCase(), Transaction.AUTO_COMMIT);
6 SimpleFeatureCollection featureCollection = featureSource.getFeatures();
7 SimpleFeatureIterator features = featureCollection.features();
8 while (features.hasNext()) {
9 writer.hasNext();
10 SimpleFeature next = writer.next();
11 SimpleFeature feature = features.next();
12 for (int i = 0; i < feature.getAttributeCount(); i++) {
13 next.setAttribute(i,feature.getAttribute(i) );
14 }
15 writer.write();
16 }
17 writer.close();
18 ds.dispose();
19 System.out.println("导入成功");
20 } catch (IOException e) {
21 // TODO Auto-generated catch block
22 e.printStackTrace();
23 } // SimpleFeatureIterator itertor = featureSource.getFeatures() // .features(); //create the builder SimpleFeatureBuilder builder = new SimpleFeatureBuilder(schema);
七、测试代码
1 //测试代码
2 public static void main(String[] args) {
3 JDBCDataStore connnection2mysql = shp2mysql.connnection2mysql("localhost", "testjdbc", 3306, "root", "mysql");
4 SimpleFeatureSource featureSource = readSHP("C:/Users/lenovo/Desktop/beijing/beijing.shp");
5 JDBCDataStore ds = createTable(connnection2mysql, featureSource);
6 writeShp2Mysql(ds, featureSource);
八、数据中的数据