因为用到了geometry,所以简单的插入insert就有问题
第一个问题:
插入的时候用的这种方式:
public int insert(Student student) {
Connection conn = getConn();
int i = 0;
String sql = "insert into students (id,Name,Sex,Age) values(?,?,?,?)";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, student.getId());
pstmt.setString(2, student.getName());
pstmt.setString(3, student.getSex());
pstmt.setString(4, student.getAge());
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
结果因为用到了geometry,所以不能用setString,但是我看了又没有别的方法,所以只能用最笨的方法
public int insert(AntGeoPolygon polygon){
int i=0;
String sql = "insert into shop_location (address,point,location,name) values ('#address#',#point#,#location#,'#name#')";
Statement statement = null;
try {
statement = connection.createStatement();
String address="ST_GeomFromText('POLYGON((#address#))')";
StringBuilder location = new StringBuilder();
for (int z = 0;z<polygon.getLocation().size();z++){
location.append(polygon.getLocation().get(z)[0]+" "+polygon.getLocation().get(z)[1]);
if(z!=(polygon.getLocation().size()-1)){
location.append(",");
}
}
address = address.replaceAll("#address#",location.toString());
sql = sql.replaceAll("#address#",polygon.getAddress()).replaceAll("#point#","ST_GeomFromText('POINT("+polygon.getPoint()[0]+" "+polygon.getPoint()[1]+")',4326)")
.replaceAll("#location#",address).replaceAll("#name#",polygon.getName());
System.out.println(sql);
ResultSet resultSet = statement.executeQuery(sql);
System.out.println(resultSet);
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
结果报错如下
ERROR: syntax error at end of input 位置:233
查询之后发现是少了括号的问题,都检查好之后又报错:
org.postgresql.util.PSQLException: ERROR: geometry contains non-closed rings
最后检查终于成功插入数据,未完待续。。。