📄 dbaction.java
字号:
/*
* DBAction.java
*
* Created on 2006年5月25日, 下午3:24
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package xmldb;
import xmldb.Student;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.util.Vector;
/**
*
* @author Administrator
*/
/*
*CREATE TABLE
*create table tablename
*
*SELECT
*select from tablename stuNum/name stuNum_value/name_value
*
*DELETE TABLE
*delete table tableName
*
*DELETE RECORD
*delete from tablename stunum
*
*INSERT
*insert into tablename stunum name sex age
*
*UPDATE
*update tablename stunum [name] [sex] [age]
*
*/
public class DBAction {
final private int SUCCESS=0;//用于返回,表示操作成功
final private int FALIURE=-1;//表示操作失败
final String dbname="database.xml";
Document document=null;
Element root,table;
TransformerFactory tf;
Transformer transformer;
DOMSource source;
PrintWriter pw;
StreamResult result;
/** Creates a new instance of DBAction */
public DBAction() {
try{
File f=new File(""+dbname);
/*
*如果文件不存在则新建一个名为database的XML文件,包含根节点StudentList
*/
if(!f.exists()){
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
document=builder.newDocument();
root=document.createElement("StudentList");
document.appendChild(root);
tf=TransformerFactory.newInstance();
transformer=tf.newTransformer();
source=new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312"); //设置编码,默认为GB2312
transformer.setOutputProperty(OutputKeys.INDENT,"yes"); //设置为独立,不需要DTD等
pw=new PrintWriter(new FileOutputStream(this.dbname));
result=new StreamResult(pw);
transformer.transform(source,result);
System.out.println("not exist="+f.exists());
}
/*
*如果存在database.xml文件,则读取文件获取根节点
*/
if(f.exists()){
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
document=builder.parse(dbname);
root = (Element) document.getDocumentElement();
}
}catch( Exception e ){
e.printStackTrace();
}
}
/*
*保存对XML文件所做的修改
*/
public void save(){
try{
tf=TransformerFactory.newInstance();
transformer=tf.newTransformer();
source=new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312"); //设置编码,默认为GB2312
transformer.setOutputProperty(OutputKeys.INDENT,"yes"); //设置为独立,不需要DTD等
pw=new PrintWriter(new FileOutputStream(this.dbname));
result=new StreamResult(pw);
transformer.transform(source,result);
}catch(TransformerException mye){
mye.printStackTrace();
}catch(IOException exp){
exp.printStackTrace();
}
}
/*
*创建表
*用法create table tablename
*入参:tablename
*/
public int createTable(String tableName){
try{
table = document.createElement(tableName);
root.appendChild(table);
this.save();
}catch(Exception e){
e.printStackTrace();
return FALIURE;
}
return SUCCESS;
}
/*
*删除表
*用法:delete table tablename
*/
public int deleteTable(String tableName){
try{
NodeList codes = document.getElementsByTagName(tableName);//定位到表一级
Node child=null;
Node parent = null;
int num=0;
if(codes!=null){
child = codes.item(0);
if(child!=null){
parent = child.getParentNode();
parent.removeChild(child);//删除表节点
}
}
this.save();//保存操作结果
}catch(Exception e){
return FALIURE;
}
return SUCCESS;
}
/*
*查询操作
*用法:select from tablename stuNum stuNum_value
*stuNum 为 查询的列名
*stuNum_value 为 查询的值
*/
public Vector selectByStuNum( String tableName, String stuNum ){
try{
Vector vect = new Vector();
NodeList codes = root.getElementsByTagName(tableName);
NodeList student = ( (Element)codes.item(0)).getElementsByTagName("student");
for(int i=0;i<student.getLength();i++){
NodeList studentNum = ((Element)student.item(i)).getElementsByTagName("stuNum");
if(studentNum.item(0).getFirstChild().getNodeValue().equals(stuNum)){
//System.out.println("afdasfsfa");
NodeList stuInfo = student.item(i).getChildNodes();
//System.out.println("stuinfo len="+stuInfo.getLength());
/*
*将查询到的元素值放入Student对象中,然后添加到VECTOR中返回
*/
vect.addElement( new Student( stuInfo.item(1).getFirstChild().getNodeValue(),stuInfo.item(3).getFirstChild().getNodeValue(),stuInfo.item(5).getFirstChild().getNodeValue(),stuInfo.item(7).getFirstChild().getNodeValue() ) );
}
}
return vect;
}catch(Exception e){
return null;
}
}
/*
*查询操作
*用法:select from tablename name name_value
*name 为 查询的列名
*name_value 为 查询的值
*/
public Vector selectByName( String tableName, String name ){
try{
Vector vect = new Vector();
NodeList codes = root.getElementsByTagName(tableName);
NodeList student = ( (Element)codes.item(0)).getElementsByTagName("student");
for(int i=0;i<student.getLength();i++){
NodeList studentName = ((Element)student.item(i)).getElementsByTagName("name");
if(studentName.item(0).getFirstChild().getNodeValue().equals(name)){
//System.out.println("afdasfsfa");
NodeList stuInfo = student.item(i).getChildNodes();
//System.out.println("stuinfo len="+stuInfo.getLength());
/*
*将查询到的元素值放入Student对象中,然后添加到VECTOR中返回
*/
vect.addElement( new Student( stuInfo.item(1).getFirstChild().getNodeValue(),stuInfo.item(3).getFirstChild().getNodeValue(),stuInfo.item(5).getFirstChild().getNodeValue(),stuInfo.item(7).getFirstChild().getNodeValue() ) );
}
}
return vect;
}catch(Exception e){
return null;
}
}
/*
*插入记录
*用法:insert into tableName stuNum name sex age
*/
public int insertInto( String tableName, String stuNum, String name, String sex, String age ){
//System.out.println("taname="+tableName+",stNum="+stuNum+",name="+name+",sex="+sex+",age="+age);
try{
/*
*首先获得表一级节点,然后搜索stuNum判断是否即将插入记录的stuNum有重复的,如果重复返回操作失败
*/
NodeList codes = root.getElementsByTagName(tableName);
table =(Element) codes.item(0);
//System.out.println("codes.length"+codes.getLength()+"codesfsf "+codes.item(0).getFirstChild().getNodeValue());
//codes=table.getChildNodes();
NodeList stunum = table.getElementsByTagName("stuNum");
//System.out.println("tabele lentgt="+codes.getLength());
for(int i=0;i<stunum.getLength();i++){
if( stunum.item(i).getFirstChild().getNodeValue().equals(stuNum) ){
//System.out.println("faliure");
return FALIURE;
}
}
/*
*添加student元素和其他4个元素
*/
Element student=document.createElement("student");
table.appendChild(student);
Element num=document.createElement("stuNum");
num.appendChild(document.createTextNode(stuNum));
student.appendChild(num);
Element stuName=(Element)document.createElement("name");
stuName.appendChild(document.createTextNode(name));
student.appendChild(stuName);
Element sx=document.createElement("sex");
sx.appendChild(document.createTextNode(sex));
student.appendChild(sx);
Element ag=document.createElement("age");
ag.appendChild(document.createTextNode(age));
student.appendChild(ag);
this.save();
}catch(Exception e){
e.printStackTrace();
return FALIURE;
}
return SUCCESS;
}
/*
*更新记录
*用法:update tableName stuNum [name] [sex] [age]
*/
public int update( String tableName, String stuNum, String name, String sex, String age ){
//System.out.println(""+stuNum+","+name+","+sex+","+age);
try{
NodeList codes = root.getElementsByTagName(tableName);
NodeList student = ( (Element)codes.item(0)).getElementsByTagName("student");
for(int i=0;i<student.getLength();i++){
NodeList studentNum = ((Element)student.item(i)).getElementsByTagName("stuNum");//找到与要更新的节点相符的节点
if(studentNum.item(0).getFirstChild().getNodeValue().equals(stuNum)){
//System.out.println("afdasfsfa");
NodeList stuInfo = student.item(i).getChildNodes();
//System.out.println("stuinfo len="+stuInfo.getLength());
if( !name.equals("#") ) stuInfo.item(3).getFirstChild().setNodeValue(name);//更改节点值
if( !sex.equals("#") ) stuInfo.item(5).getFirstChild().setNodeValue(sex);
if( !age.equals("#") ) stuInfo.item(7).getFirstChild().setNodeValue(age);
}
}
this.save();
}catch(Exception e){
return FALIURE;
}
return SUCCESS;
}
/*
*删除记录
*用法:delete from tableName stuNum
*/
public int delete( String tableName, String stuNum ){
try{
NodeList codes = root.getElementsByTagName(tableName);
NodeList student = ( (Element)codes.item(0)).getElementsByTagName("student");
for(int i=0;i<student.getLength();i++){
NodeList studentNum = ((Element)student.item(i)).getElementsByTagName("stuNum");
if(studentNum.item(0).getFirstChild().getNodeValue().equals(stuNum)){
Node tmp = studentNum.item(0).getParentNode();
//System.out.println("tmp.name="+tmp.getNodeName());
codes.item(0).removeChild(tmp);
}
}
this.save();
}catch(Exception e){
return FALIURE;
}
return SUCCESS;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -