-
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条)
聪明如你,不妨在这 发表你的看法与心得 ~