-
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个答案 按时间排序 按投票排序
-
采纳的答案
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
-
/*
* 主要就这两个方法了
*/
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
-
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
-
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
-
闲来没事,就帮你写写。
先说说表结构,就用你这个结构
id:(自动增长)
name:名称
parentid:父ID
type:类型(人员,公司,部门)
使用DB------MYSQL5.02013年7月05日 01:25
-
/* 这种方式顺序就是实现关系的依据 */
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如何处理串口输入,接着是...
下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这是为了将字符串转换为可以被SAXBuilder读取的形式。接着,使用`InputSource`封装`StringReader`,以便SAXBuilder...
在Oracle数据库中,当我们遇到需要存储超过4000个字符的文本数据时,使用CLOB(Character Large Object)类型便显得尤为重要。下面将详细介绍如何在C#环境下通过Oracle.NET接口实现将长于4000字符的字符串转化为CLOB...
Java解析Json字符串是Java开发中常见的一项任务,特别是在与Web服务交互、数据交换或存储时。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java...
java代码-使用java解决从字符串中解析二维数组的源代码 ——学习参考资料:仅用于个人学习使用!
在Java编程中,验证字符串是否符合JSON(JavaScript Object Notation)格式是一项常见的任务,尤其是在进行前后端数据交互时。JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,...
这篇博客“Java实现计算字符串表达式”可能讲解了如何利用Java来处理这种问题,虽然具体的实现细节没有提供,但我们可以基于一般的方法和常用的库来探讨这个主题。 首先,计算字符串表达式的基本步骤通常包括以下几...
本示例通过Java实现了字符串的加密与解密功能,采用DES加密算法,提供了基本的加密解密功能及字符串与十六进制之间的转换。这种实现方式适用于简单的加密需求,但对于更复杂的安全场景,建议考虑使用更先进的加密...
在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的转换,并且通常使用`Character`类和`Integer`类的方法来完成。让我们深入...
详细讲解java各种数据库连接字符串(2-2).jsp
本文将深入探讨如何在Java中替换字符串中的特定符号,并解析代码示例,以便更好地理解其工作原理。 ### Java中替换字符串中的符号 在Java中,`String`类提供了多种方法来操作字符串,包括查找、替换、分割等。其中...
根据提供的信息,我们可以深入探讨如何在Kettle中解析JSON串,并连接数据库进行数据处理。本文将详细介绍使用Java库解析JSON的基本方法以及如何在Kettle环境中实现这一过程。 ### Kettle与JSON解析概述 #### 1. **...
根据题目提供的代码片段,我们可以看到这是一个简单的Java程序,用于遍历指定路径下的所有文件及子目录,并按照层级关系以树形结构打印出来。 ```java package com.test; import java.io.File; public class Root...
通过解析字符串获取字符串编码类型的java代码
这个工程里面包含了解析json的jar,和解析json的一个小例子。 在运行这个工程时,需要重新,自行导入工程中,lib目录下的jar包 JSONObject jsonObject = new JSONObject(jsonString);//将字符串转换成JSON对象 ...
自己写的一个计算字符串表达式工具类; Java 工具类, 计算字符串表达式, 支持 +,-,*,/,%. ()
json报文的解析,写入数据库; 通过数据库取值,生成json报文
通过这两个参数,我们可以将字符串解析成日期对象,然后进一步转换为`java.sql.Date`对象。 #### 三、代码实现 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util....
例如,网络请求可能失败,XML解析可能出现异常,数据库插入可能会因为数据格式问题而失败。 通过以上步骤,我们可以成功地将`wthrcdn.etouch.cn`的XML天气数据解析并存储到MySQL数据库中。这个过程涉及了HTTP请求、...
代码均为自己设计所写,分享一下。 字符串数学表达式(含括号)计算值 如: "31+3*3-20/2*5+40/8+4*5" ((2*(19-13*(1+2)/39)/6+4)-5)/5+((2+3)*2-5)