⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbaction.java

📁 xml数据库
💻 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 + -