加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Jena与MySQL的存储与查询RDF

(2010-07-14 16:32:55)
标签:

jena

rdf

mysql

分类: SW

 Jena如何存储和查询RDF到MySQL中。

    Jena对MySQL,Oracle,SQL Server开放了接口,可以直接用Jena的Model存储RDF到数据库中,但是可惜的是没有对DB2开放这样的接口。很可惜……

下面是写入MySQL的代码(代码都是经过本人测试的):

import java.io.*;
import java.sql.SQLException;
import com.hp.hpl.jena.db.IDBConnection;
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.rdf.model.*;
public class Jena_mysql
{
  
    public static final String strDriver = "com.mysql.jdbc.Driver"; // path of driver class
    public static final String strURL = "jdbc:mysql://localhost:3306/******"; // URL of database
    public static final String strUser = "******"; // database user id
    public static final String strPassWord = "******"; // database password
    public static final String strDB = "MySQL"; // database type
    public static void main(String[] args){
      try{
            // 创建一个数据库连接
              IDBConnection conn = new DBConnection ( strURL, strUser, strPassWord, strDB );
            
              // 加载数据库驱动类,需要处理异常
              try
              {
                  Class.forName(strDriver);
              }catch(ClassNotFoundException e){
                  System.out.println("ClassNotFoundException, Driver is not available...");
              }
            
            // 使用数据库连接参数创建一个模型制造器
              ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
              // 创建一个默认模型,命名为 MyOntology
              Model defModel = maker.createDefaultModel();
              // 准备需要存入数据库的本体文件,建立输入文件流
              FileInputStream inputSreamfile = null;
              try
              {
                  File file = new File("c:/win.rdf");
                  inputSreamfile = new FileInputStream(file);
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
                  System.out.println("本体文件不存在");
              }
            
              InputStreamReader in = null;
              try
              {
                  in = new InputStreamReader(inputSreamfile, "UTF-8");
              } catch (UnsupportedEncodingException e) {
              System.out.println("出错了");
                  e.printStackTrace();
              }
            
            // 读取文件
              defModel.read(in,null);
          
            // 关闭输入流读取器
              try
              {
                  in.close();
              } catch (IOException e) {
              System.out.println("Exceptions occurclose1...");
                  e.printStackTrace();
              }
          
              // 执行数据转换,将本体数据存入数据库
            defModel.commit();
             System.out.println("成功");
            // 关闭数据库连接
              try
              {
                  conn.close();
              } catch (SQLException e) {
              System.out.println("Exceptions occur22...");
                  e.printStackTrace();
              }
        }catch(Exception e){
                  System.out.println("Exceptions occur...");
            }
        }
    }

 

2、基于上面的存储来查询数据的(代码也是经过测试的):

import java.io.*;
import java.sql.SQLException;
import com.hp.hpl.jena.db.*;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.vocabulary.VCARD;
public class Jena_mysql_select
{
public static final String strDriver = "com.mysql.jdbc.Driver"; // path of driver class
    public static final String strURL = "jdbc:mysql://localhost:3306/******"; // URL of database
    public static final String strUser = "******"; // database user id
    public static final String strPassWord = "******"; // database password
    public static final String strDB = "MySQL"; // database type
    public static void main(String[] args)
    {
      try{
            // 创建一个数据库连接
              IDBConnection conn = new DBConnection ( strURL, strUser, strPassWord, strDB );
          
              // 加载数据库驱动类,需要处理异常
              try
              {
                  Class.forName(strDriver);
              }
              catch(ClassNotFoundException e)
              {
                  System.out.println("ClassNotFoundException, Driver is not available...");
              }
            
            // 使用数据库连接参数创建一个模型制造器
              ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
            
              // 创建一个默认模型,命名为 MyOntology
              Model defModel = maker.createDefaultModel();
              // 准备需要存入数据库的本体文件,建立输入文件流
              StmtIterator iter = defModel.listStatements
              (
                  new
                      SimpleSelector(null, null, (RDFNode) null)//指明了返回谓语为“CARD.FN”的东西。
                  {
                          @Override
                          public boolean selects(Statement s)
                          {
                                  //return s.getString().endsWith("bin");
                          return s.getObject().toString().contains("c");//写明查询条件
                          }
                      }
               );
              if (iter.hasNext())
              {
                  System.out.println("The database contains vcards for:");
                  while (iter.hasNext())
                  {
                      System.out.println(iter.nextStatement().getSubject().toString());//获得谓语
                  }
              }
              else
                 
                  System.out.println("No Smith's were found in the database");
                    
      }
      catch(RDFRDBException e)
      {
          System.out.println("Exceptions occur...");
          
   }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有