• JENA与MySQL的存储与查询RDF

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 默认段落标题(请修改)

    这里将写Jena如何存储和查询RDF到Mysql中。

    JENA对Mysql,Oracle,SqlServer开放了接口,可以直接用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...");
    }
    }
    }

    • 标签:
    • static
    • import
    • string
    • 学习元
    • 查询
    • database
    • public
    • final
    • mysql
    • try
    • 存储
    • system.out.println
    • catch
    • 数据库
    • jena
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部