在ArcSDE中的“表”(Table)指的就是所有的数据库表对象,而“图层”(Layer)指的是在ArcSDE中注册过的空间表。
通过SeTable的create方法可以创建一个表,一下代码展示了如何创建一个名为“CREATE_TEST”的表:
SeConnection conn = getConn();
if(conn !=null){
try {
SeTable table = new SeTable(conn, "CREATE_TEST");
SeColumnDefinition[] colDefs = new SeColumnDefinition[2];
colDefs[0] = new SeColumnDefinition("ID", SeColumnDefinition.TYPE_INT32, 10, 0, false);
colDefs[1] = new SeColumnDefinition("NAME", SeColumnDefinition.TYPE_STRING, 0, 0, true);
table.create(colDefs);
} catch (SeException e) {
e.printStackTrace();
} finally{
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}
表的字段通过SeColumnDefinition来指定,通过它可以指定字段名称、类型、长度、精度、是否为空等属性,下面是上述代码执行后的结果:
图 3 通过ArcSDE SDK创建的一个普通表
通过SeTable的createIndex等方法可以在一个表的某些字段上创建索引和约束,下面的代码在上面创建的CREATE_TEST表的ID字段上创建了一个唯一约束、升序的索引,在“NAME”字段上创建了一个主键约束:
SeConnection conn = getConn();
if(conn !=null){
try {
SeTable table = new SeTable(conn, "CREATE_TEST");
table.createIndex("ID", true, true, null, "IDX_CREATE_TEST_ID");
table.createPrimaryConstraint(new String[]{"NAME"}, "PK_CREATE_TEST_NAME", null);
} catch (SeException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}
这是上述代码执行后的效果:
图 4 通过ArcSDE SDK创建索引和约束
通过SeTable的一些其他方法可以进行更新统计、释放锁、重命名表、截短表、删除表等操作,用法见以下代码:
SeConnection conn = getConn();
if(conn !=null){
try {
SeTable table = new SeTable(conn, "CREATE_TEST");
table.updateDBMSStats("IDX_CREATE_TEST_ID", "COMPUTE",
SeTable.SE_UPDATE_BUSINESS_TABLE_STATS);//更新统计
try {
table.freeLock();//释放锁
} catch (Exception e) {
e.printStackTrace();
}
table.rename("TO_DELETE");//重命名表
table.truncate();//截短表
table.delete();//删除表
} catch (SeException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}