0 0

java解析字符串,按照树形结构存入数据库--这个问题纠结了我好久,各路大神求帮忙10

字符串:
LDAP://gz.cvte.cn/CN=张三,OU=研发中心,OU=事业部,OU=AAA有限公司,OU=C集团
LDAP://gz.cvte.cn/CN=tom,OU=销售部,OU=事业部,OU=AAA有限公司,OU=C集团
......

表结构:(可以修改,反正能体现到树状结构就好了)

id
name:名称
fatherId: 父Id
type:类型(人员,公司,部门)

问题:解析上述字符串,然后按照下列树状形式存入数据库,数据库不限。
PS:【上述字符串中 人员的名字, 集团的名字, xxx有限公司的名字都是唯一的】

	C集团 (公司)
	 |-AA有限公司 (公司)
	 |    |-电源事业部门 (部门) 
	 |          |-研发中心 (部门)
	 |              |-张三 (人员)
	 |
	 |-BBB公司 (公司)
		|-研发中心 (部门) 
		    |-李四  (人员)


请求大神解答,我弄了两天都没弄出来。。哎哎呀呀呀呀呀。。
2013年7月04日 09:28

6个答案 按时间排序 按投票排序

0 0

采纳的答案

for (int i = strs.length - 1; i > -1; i--) {
String str = strs[i];
/*
* 这里是从root向下插入,所以如果遇到节点已经存在的情况
* 执行查询select count(1) from test where name = nodeName and type = nodeType
*/
if (node存在) {
continue; // 不再创建重复节点
}
/*
* 这里需要判断需要创建节点的父节点
*/
if (i < strs.length - 1) {
String parent = strs[i + 1];
/*
* 执行查询select id from test where name = parentName and type = parentType
* 找到父ID
*/
}
if (父id > 0) {
stmt.executeUpdate("insert into test(id, name, parentid, type) values(null, '"
+ str.substring(str.indexOf("=") + 1)
+ "', " + 父id + ", '"
+ str.substring(0, str.indexOf("=")) + "');");
conn.commit();
} else {
stmt.executeUpdate("insert into test(id, name, parentid, type) values(null, '"
+ str.substring(str.indexOf("=") + 1)
+ "', 0, '"
+ str.substring(0, str.indexOf("=")) + "');");
conn.commit();
}
}

2013年7月05日 11:14
0 0

/*
* 主要就这两个方法了
*/
public void mainMethod() {
List<String> list = readFile(文件路径);
for (String s : list) {
inDB(s);
}
}

public List<String> readFile(String path) {
File file = new File(path); // 文件路径
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
List<String> lists = new ArrayList<String>();
while(null != (line = br.readLine())) {
lists.add(line);
}
return lists;
} catch (FileNotFoundException e) {

} catch (IOException e) {

}
}

public void inDB(String str) {
String connectionUrl = "jdbc:mysql://localhost:3306/数据库名称?user=用户名&password=密码";
Connection conn = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(connectionUrl);
conn.setAutoCommit(false);
stmt = conn.createStatement();
String[] strs = str.split(",");
for (int i = strs.length - 1; i > -1; i--) {
String str = strs[i];
stmt.executeUpdate("insert into test(id, name, parentid, type) values(null, '"
+ str.substring(str.indexOf("=") + 1)
+ "', @@IDENTITY, '"
+ str.substring(0, str.indexOf("=")) + "');");
conn.commit();
}
} catch (Exception e) {
// 异常处理
} finally {
// 关闭连接,释放资源
}
}

2013年7月05日 10:11
0 0

File file = new File(文件路径);
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
List<String> lists = new ArrayList<String>();
while(null != (line = br.readLine())) {
lists.add(line);
}
return lists;
} catch (FileNotFoundException e) {

} catch (IOException e) {

}

2013年7月05日 10:04
0 0

String connectionUrl = "jdbc:mysql://localhost:3306/数据库名称?user=用户名&password=密码";
Connection conn = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(connectionUrl);
conn.setAutoCommit(false);
stmt = conn.createStatement();
String[] strs = "CN=张三,OU=研发中心,OU=事业部,OU=AAA有限公司,OU=C集团".split(",");
for (int i = strs.length - 1; i > -1; i--) { // 先有父类才有子类,所以倒过来写
String str = strs[i];
if (i == strs.length - 1) { // 创建ROOT
stmt.executeUpdate("insert into test(id, name, parentid, type) values(null, '"
+ str.substring(str.indexOf("=") + 1)
+ "', 0, '"
+ str.substring(0, str.indexOf("=")) + "')");
conn.commit();
} else { // 创建所有叶节点
stmt.executeUpdate("insert into test(id, name, parentid, type) values(null, '"
+ str.substring(str.indexOf("=") + 1)
+ "', @@IDENTITY, '"
+ str.substring(0, str.indexOf("=")) + "');");
conn.commit();
}
}
} catch (Exception e) {
// 异常处理
} finally {
// 关闭连接,释放资源
}

2013年7月05日 01:31
0 0

闲来没事,就帮你写写。
先说说表结构,就用你这个结构
id:(自动增长)
name:名称
parentid:父ID
type:类型(人员,公司,部门)
使用DB------MYSQL5.0

2013年7月05日 01:25
0 0

/* 这种方式顺序就是实现关系的依据 */
String str = "CN=张三,OU=研发中心,OU=事业部,OU=AAA有限公司,OU=C集团";
String[] strs = str.split(",");
for (int i = 0; i < strs.length; i++) {
String son = strs[i];
if (i < strs.length - 1) {
String parent = strs[i + 1];
System.out.println(son + "<--->" + parent);
/*
* CN=张三<--->OU=研发中心
* OU=研发中心<--->OU=事业部
* OU=事业部<--->OU=AAA有限公司
* OU=AAA有限公司<--->OU=C集团
*/
} else {
System.out.println(son + "<--->ROOT");
/*
* OU=C集团<--->ROOT
*/
}
}

2013年7月04日 10:49

相关推荐

    JAVA串口助手接收数据并解析数据存入MySQL数据库中

    在本文中,我们将深入探讨如何使用Java开发一个串口助手应用程序,该程序能接收来自串行端口的数据并将其解析后存储到MySQL数据库中。首先,我们需要了解串口通信的基本概念,然后学习Java如何处理串口输入,接着是...

    java解析xml字符串

    下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这是为了将字符串转换为可以被SAXBuilder读取的形式。接着,使用`InputSource`封装`StringReader`,以便SAXBuilder...

    将长于4000字符的字符串转化为CLOB类型存入数据库

    在Oracle数据库中,当我们遇到需要存储超过4000个字符的文本数据时,使用CLOB(Character Large Object)类型便显得尤为重要。下面将详细介绍如何在C#环境下通过Oracle.NET接口实现将长于4000字符的字符串转化为CLOB...

    java解析Json字符串

    Java解析Json字符串是Java开发中常见的一项任务,特别是在与Web服务交互、数据交换或存储时。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java...

    java代码-使用java解决从字符串中解析二维数组的源代码

    java代码-使用java解决从字符串中解析二维数组的源代码 ——学习参考资料:仅用于个人学习使用!

    java验证字符串是否符合json格式

    在Java编程中,验证字符串是否符合JSON(JavaScript Object Notation)格式是一项常见的任务,尤其是在进行前后端数据交互时。JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,...

    Java实现计算字符串表达式

    这篇博客“Java实现计算字符串表达式”可能讲解了如何利用Java来处理这种问题,虽然具体的实现细节没有提供,但我们可以基于一般的方法和常用的库来探讨这个主题。 首先,计算字符串表达式的基本步骤通常包括以下几...

    java字符串-用户名和密码-加密解密

    本示例通过Java实现了字符串的加密与解密功能,采用DES加密算法,提供了基本的加密解密功能及字符串与十六进制之间的转换。这种实现方式适用于简单的加密需求,但对于更复杂的安全场景,建议考虑使用更先进的加密...

    java 字符串转16进制Ascii

    在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的转换,并且通常使用`Character`类和`Integer`类的方法来完成。让我们深入...

    java各种数据库连接字符串(2-2).jsp

    详细讲解java各种数据库连接字符串(2-2).jsp

    java替换字符串中的符号

    本文将深入探讨如何在Java中替换字符串中的特定符号,并解析代码示例,以便更好地理解其工作原理。 ### Java中替换字符串中的符号 在Java中,`String`类提供了多种方法来操作字符串,包括查找、替换、分割等。其中...

    kettle解析json串

    根据提供的信息,我们可以深入探讨如何在Kettle中解析JSON串,并连接数据库进行数据处理。本文将详细介绍使用Java库解析JSON的基本方法以及如何在Kettle环境中实现这一过程。 ### Kettle与JSON解析概述 #### 1. **...

    java遍历文件树形结构输出

    根据题目提供的代码片段,我们可以看到这是一个简单的Java程序,用于遍历指定路径下的所有文件及子目录,并按照层级关系以树形结构打印出来。 ```java package com.test; import java.io.File; public class Root...

    java获取字符串编码类型代码

    通过解析字符串获取字符串编码类型的java代码

    java解析json字符串

    这个工程里面包含了解析json的jar,和解析json的一个小例子。 在运行这个工程时,需要重新,自行导入工程中,lib目录下的jar包 JSONObject jsonObject = new JSONObject(jsonString);//将字符串转换成JSON对象 ...

    Java 工具类, 计算字符串表达式, 支持 +,-,*,/,%. ()

    自己写的一个计算字符串表达式工具类; Java 工具类, 计算字符串表达式, 支持 +,-,*,/,%. ()

    Java针对json类型数据的解析和生成,直接连接数据库写进oracle数据表

    json报文的解析,写入数据库; 通过数据库取值,生成json报文

    java完美按格式化字符串String转sql.date

    通过这两个参数,我们可以将字符串解析成日期对象,然后进一步转换为`java.sql.Date`对象。 #### 三、代码实现 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util....

    解析wthrcdn.etouch的xml格式天气存入mysql数据库

    例如,网络请求可能失败,XML解析可能出现异常,数据库插入可能会因为数据格式问题而失败。 通过以上步骤,我们可以成功地将`wthrcdn.etouch.cn`的XML天气数据解析并存储到MySQL数据库中。这个过程涉及了HTTP请求、...

    java字符串数学表达式(含括号)计算值

    代码均为自己设计所写,分享一下。 字符串数学表达式(含括号)计算值 如: "31+3*3-20/2*5+40/8+4*5" ((2*(19-13*(1+2)/39)/6+4)-5)/5+((2+3)*2-5)

Global site tag (gtag.js) - Google Analytics