Java论坛网»Java技术»我用Digester组件从xml里读出数据,然后插入数据库,老是出问题,请高手指点!!!
我用Digester组件从xml里读出数据,然后插入数据库,老是出问题,请高手指点!!!
问?:
1...............table_data.xml
<?xml version="1.0" encoding="gb2312"?>
<t_xml create_date="Sun Jun 18 23:40:30 CST 2006">
<record id="1">
<name>Zhang San</name>
<sex>male</sex>
<birthday>1982-10-21</birthday>
<lucknum>0.0</lucknum>
</record>
<record id="2">
<name>Li Si</name>
<sex>male</sex>
<birthday>1988-05-14</birthday>
<lucknum>0.0</lucknum>
</record>
</t_xml>
2.MySQL数据库的表t_xml为:
name varchar(50), sex varchar(10), birthday Date, lucknum double.
3...........和表t_xml对应的Bean是:
package cy;
import java.sql.Date;
public class TableData {
private String name;
private String sex;
private Date birthday;
private double lucknum;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public double getLucknum() {
return lucknum;
}
public void setLucknum(double lucknum) {
this.lucknum = lucknum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
4...........连接数据库用的类
package cy.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Common4DB {
private static Connection con = null;
public static Connection connDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException e) {
System.out.println("没有找到驱动");
}
String url = "jdbc:mysql://localhost/test";
try {
con = DriverManager.getConnection(url, "root", "1234");
return con;
} catch (SQLException e) {
e.printStackTrace();//这个地方的细节。
return null;
}
}
}
5...........我的导入程序如下:
package cy;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import cy.tablebean.TableData;
import cy.util.Common4DB;
public class InputData {
public void input2DB(TableData tableData) throws SQLException {
Connection conn = Common4DB.connDB();
String sql = "insert into t_xml values(?, ?, ?, ?)";
//String sql = "insert into t_xml(name, sex) values(?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
int i = 1;
ps.setString(i++, tableData.getName());
ps.setString(i++, tableData.getSex());
ps.setDate(i++, tableData.getBirthday());
ps.setDouble(i++, tableData.getLucknum());
ps.executeUpdate();
ps.close();
conn.close();
}
private void digestXML() throws IOException, SAXException {
Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate("t_xml", InputData.class);
digester.addObjectCreate("t_xml/record", TableData.class);
digester.addCallMethod("t_xml/record/name", "setName", 0);
digester.addCallMethod("t_xml/record/sex", "setSex", 0);
digester.addCallMethod("t_xml/record/birthday", "setBirthday", 0);
digester.addCallMethod("t_xml/record/lucknum", "setLucknum", 0);
digester.addSetNext("t_xml/record", "input2DB");
String fileName = "table_data.xml";
String fileNameFull = "xml/" + fileName;
InputData db = (InputData) digester.parse(new File(fileNameFull));
}
public static void main(String[] args) throws IOException, SAXException {
InputData inputData = new InputData();
inputData.digestXML();
}
public InputData(){}
}
报错信息如下:
org.apache.commons.digester.Digester endElement
严重: End event threw exception
java.lang.NoSuchMethodException: No such accessible method: setBirthday() on object: cy.tablebean.TableData
<?xml version="1.0" encoding="gb2312"?>
<t_xml create_date="Sun Jun 18 23:40:30 CST 2006">
<record id="1">
<name>Zhang San</name>
<sex>male</sex>
<birthday>1982-10-21</birthday>
<lucknum>0.0</lucknum>
</record>
<record id="2">
<name>Li Si</name>
<sex>male</sex>
<birthday>1988-05-14</birthday>
<lucknum>0.0</lucknum>
</record>
</t_xml>
2.MySQL数据库的表t_xml为:
name varchar(50), sex varchar(10), birthday Date, lucknum double.
3...........和表t_xml对应的Bean是:
package cy;
import java.sql.Date;
public class TableData {
private String name;
private String sex;
private Date birthday;
private double lucknum;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public double getLucknum() {
return lucknum;
}
public void setLucknum(double lucknum) {
this.lucknum = lucknum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
4...........连接数据库用的类
package cy.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Common4DB {
private static Connection con = null;
public static Connection connDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException e) {
System.out.println("没有找到驱动");
}
String url = "jdbc:mysql://localhost/test";
try {
con = DriverManager.getConnection(url, "root", "1234");
return con;
} catch (SQLException e) {
e.printStackTrace();//这个地方的细节。
return null;
}
}
}
5...........我的导入程序如下:
package cy;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import cy.tablebean.TableData;
import cy.util.Common4DB;
public class InputData {
public void input2DB(TableData tableData) throws SQLException {
Connection conn = Common4DB.connDB();
String sql = "insert into t_xml values(?, ?, ?, ?)";
//String sql = "insert into t_xml(name, sex) values(?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
int i = 1;
ps.setString(i++, tableData.getName());
ps.setString(i++, tableData.getSex());
ps.setDate(i++, tableData.getBirthday());
ps.setDouble(i++, tableData.getLucknum());
ps.executeUpdate();
ps.close();
conn.close();
}
private void digestXML() throws IOException, SAXException {
Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate("t_xml", InputData.class);
digester.addObjectCreate("t_xml/record", TableData.class);
digester.addCallMethod("t_xml/record/name", "setName", 0);
digester.addCallMethod("t_xml/record/sex", "setSex", 0);
digester.addCallMethod("t_xml/record/birthday", "setBirthday", 0);
digester.addCallMethod("t_xml/record/lucknum", "setLucknum", 0);
digester.addSetNext("t_xml/record", "input2DB");
String fileName = "table_data.xml";
String fileNameFull = "xml/" + fileName;
InputData db = (InputData) digester.parse(new File(fileNameFull));
}
public static void main(String[] args) throws IOException, SAXException {
InputData inputData = new InputData();
inputData.digestXML();
}
public InputData(){}
}
报错信息如下:
org.apache.commons.digester.Digester endElement
严重: End event threw exception
java.lang.NoSuchMethodException: No such accessible method: setBirthday() on object: cy.tablebean.TableData
答!: 1:
错误提示是说没有setBirthday()方法....
答!: 2:
但是我在TableData这个类里,确实写了setBirthday()这个方法!!!!
答!: 3:
现在又出现下面这个异常!畸形的url异常是什么意思?
java.net.MalformedURLException
at java.net.URL.<init>(URL.java:571)
at java.net.URL.<init>(URL.java:434)
at java.net.URL.<init>(URL.java:383)
at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:740)
at org.apache.xerces.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:685)
at org.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:252)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:503)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
at org.apache.commons.digester.Digester.parse(Digester.java:1591)
at test.InputData.digestXML(InputData.java:53)
at test.InputData.main(InputData.java:58)
Exception in thread "main"
java.net.MalformedURLException
at java.net.URL.<init>(URL.java:571)
at java.net.URL.<init>(URL.java:434)
at java.net.URL.<init>(URL.java:383)
at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:740)
at org.apache.xerces.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:685)
at org.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:252)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:503)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
at org.apache.commons.digester.Digester.parse(Digester.java:1591)
at test.InputData.digestXML(InputData.java:53)
at test.InputData.main(InputData.java:58)
Exception in thread "main"
答!: 4:
问题解决了:
是我读取xml文件的路径设的不对!
是我读取xml文件的路径设的不对!
相关JAVA教程:
请问,有没有用来合并折分pdf的jar包
struts action 中能不能进行 数据类型转换
哎。。。郁闷的问题
web应用中如何做柱状图和折线图?
高手看过来:怎么在.jsp.html 页面画一个 calendar ?(随当前的月份而变化) 并且点击上面的数字得到值并提
高手看过来:怎么在.jsp.html 页面画一个 calendar ?(随当前的月份而变化) 并且点击上面的数字得到值并提
Tomcat的虚拟目录和Tomcat的问题
JButton的标题内容的小问题!谢谢各位朋友!10
有关webservice非基本类型数据传递的问题,有兴趣的请进,谢谢。
struts <html:select property="myselect" multiple="true"> 对应 formbean 里myselect属性应该是什?
(急)服务器带宽在10M/s,同时大概能支撑多少用户访问?
怎样在JAVA里面用返回参数的存储过程