学习使用Java DataBase
【IT168 技术文档】
在前几天,转贴了java网站上一篇介绍使用Java DB的文章:http://blog.matrix.org.cn/page/icess?entry=using_java_db_in_desktop里面介绍了如何在桌面程序中使用java DB,今天使用了一下感觉很不错。
但上面那篇文章中,是通过一个桌面程序来介绍java DB的,看的时候可能会感到比较混乱,今天我就按照他的例子,从中拿出介绍java db的代码,来看看如何使用它吧!
在看如何使用java db以前,先看看java db 是什么,有什么特点。
什么是Java DB?
要使用Java DB,就不免想问起什么是java db,其实java db就是在ibm 捐赠给Apache开源项目组的一个用java实现的轻量级嵌入式数据库代码基础上发展起来的。Java DB的优点还是很多,所以以后在sun 的软件中都带有Java DB了。
下面来看看如何使用Java DB吧。
嵌入式数据库和一般的数据库不同,在使用以前,需要指定一个存放数据的目录和指定数据库的配置文件。配置文件可以很简单不用解释了,如下:
# Sample ResourceBundle properties file
![]()
user=addressuser
password=addressuser
derby.driver=org.apache.derby.jdbc.EmbeddedDriver
derby.url=jdbc:derby:
db.table=ADDRESS
db.schema=APP
当然了,以上配置信息也可以用一个Property 属性对象来构造,然后在得到数据库连接的时候把该对象传递进去也是可以的。不过使用配置文件是为了方便修改相关配置信息而设定的。
通过如下方法来设置数据库数据的存放目录:
private void setDBSystemDir() ...{
// decide on the db system directory
//String userHomeDir = System.getProperty("user.home", ".");
String userHomeDir = System.getProperty("user.dir", ".");
String systemDir = userHomeDir + "/.addressbook";
System.setProperty("derby.system.home", systemDir);
![]()
// create the db system directory
File fileSystemDir = new File(systemDir);
fileSystemDir.mkdir();
}
然后就是加载数据库驱动了,Java DB的数据库驱动是集成在一起的,也是通过Class.forName() 的方式加载的,内嵌的驱动名字是org.apache.derby.jdbc.EmbeddedDriver本例子中使用下面的方法加载驱动:
private void loadDatabaseDriver(String driverName) ...{
// load Derby driver
try ...{
Class.forName(driverName);
} catch (ClassNotFoundException ex) ...{
ex.printStackTrace();
}
![]()
}
这样,加载了驱动以后,只有得到Connection就可以操作数据了。
在操作数据以前,我们先建立一个数据表,使用的sql 语句如下:
private static final String strCreateAddressTable =
"create table APP.ADDRESS (" +
" ID INTEGER NOT NULL PRIMARY KEY GENERATED
![]()
ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)," +
" LASTNAME VARCHAR(30), " +
" FIRSTNAME VARCHAR(30), " +
" MIDDLENAME VARCHAR(30), " +
" PHONE VARCHAR(20), " +
" EMAIL VARCHAR(30), " +
" ADDRESS1 VARCHAR(30), " +
" ADDRESS2 VARCHAR(30), " +
" CITY VARCHAR(30), " +
" STATE VARCHAR(30), " +
" POSTALCODE VARCHAR(20), " +
" COUNTRY VARCHAR(30) " +
")";
然后使用如下方法来建立数据库和数据表:
private boolean createTables(Connection dbConnection) ...{
boolean bCreatedTables = false;
Statement statement = null;
try ...{
statement = dbConnection.createStatement();
// 创建表格...
statement.execute(strCreateAddressTable);
bCreatedTables = true;
} catch (SQLException ex) ...{
ex.printStackTrace();
}
![]()
return bCreatedTables;
}
private boolean createDatabase() ...{
boolean bCreated = false;
Connection dbConnection = null;
![]()
String dbUrl = getDatabaseUrl();
dbProperties.put("create", "true");
![]()
try ...{
dbConnection = DriverManager.getConnection(dbUrl, dbProperties);
bCreated = createTables(dbConnection);
} catch (SQLException ex) ...{
}
dbProperties.remove("create");
return bCreated;
}
由于是嵌入式数据库,创建表格也要编程来实现,当然也有和IDE配合使用的插件可以使用。
在创建数据库和表时,需要指定 一个create 属性为true,就象上面的那样,同样,在断开连接关闭数据库时,我们也要指定属性用编程的方法来关闭数据库,,这是和普通数据库不同的地方。下面是关闭数据库的代码:
public void disconnect() ...{
if(isConnected) ...{
String dbUrl = getDatabaseUrl();
dbProperties.put("shutdown", "true");
try ...{
DriverManager.getConnection(dbUrl, dbProperties);
} catch (SQLException ex) ...{
}
isConnected = false;
}
}
然后我们就可以通过得到Connection象操作普通数据库一样来操作Java DB了。如下:
dbConnection = DriverManager.getConnection(dbUrl, dbProperties);
stmtSaveNewRecord = dbConnection.prepareStatement(strSaveAddress, Statement.RETURN_GENERATED_KEYS);
性能如何呢:经过我的测试插入100 行(每行有11个字符串) 数据要2100 多毫秒.。取出100 行需要1500多毫秒不知道大家认为如何。
本文用到的全部代码可以在此出下载:http://icess.my.china.com/downloads/index.htm。
