嵌入式DERBY数据库试用



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class WwdEmbedded {

static String dbName = "HIAPK_DOWNLOAD";
static String APK_DOWNLOAD_RECORDS = "HIAPK_DOWNLOAD_RECORDS";
static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
static String connectionURL = "jdbc:derby:" + dbName + ";create=false";

public static void main(String[] args) {

try {
/*
* 载入derby驱动.嵌入式驱动使用这个方式启动derby数据库引擎. 检查初始化动作,检查CLASSPATH路径设置问题
*/
Class.forName(driver);
System.out.println(driver + " loaded. ");
} catch (java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
System.out
.println("\n >>> Please check your CLASSPATH variable <<<\n");
}

Insert insert = new Insert();
Query query = new Query();
new Thread(insert, "写入线程").start();
new Thread(query, "查询线程").start();
try {
Thread.currentThread();
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}

// ## DATABASE SHUTDOWN SECTION ##
/***
* In embedded mode, an application should shut down Derby. Shutdown
* throws the XJ015 exception to confirm success.
***/
if (driver.equals("org.apache.derby.jdbc.EmbeddedDriver")) {
try {
DriverManager.getConnection("jdbc:derby:;shutdown=true");
System.out.println("Database shut down normally");
} catch (SQLException se) {
if (se.getSQLState().equals("XJ015")) {
System.out.println("Database did not shut down normally");
}
}
}
}

static class Insert implements Runnable {
@Override
public void run() {
Connection conn = null;

// apk 下载记录表

String createSql = "create table "
+ APK_DOWNLOAD_RECORDS
+ "("
+ "ID int generated always as identity primary key,AID int,SOFTCODE int,"
+ " RECORD varchar(1024)" + ")";

String[] createIndexSql = new String[] {
"CREATE INDEX IDX_ADR_AID ON " + APK_DOWNLOAD_RECORDS
+ "(AID)",
"CREATE INDEX IDX_ADR_SOFTCODE ON " + APK_DOWNLOAD_RECORDS
+ "(SOFTCODE)" };

// Beginning of JDBC code sections
// ## LOAD DRIVER SECTION ##

// Beginning of Primary DB access section
// ## BOOT DATABASE SECTION ##
try {
// Create (if needed) and connect to the database
conn = DriverManager.getConnection(connectionURL);
System.out.println("Connected to database " + dbName);

/*
* 新建HIAPK_DOWNLOAD表结构和索引
* System.out.println(" . . . . creating table " +
* APK_DOWNLOAD_RECORDS); s.execute(createSql);
* s.execute(createIndexSql[0]); s.execute(createIndexSql[1]);
*/

// 模拟大数据量插入
PreparedStatement psInsert = conn
.prepareStatement("insert into " + APK_DOWNLOAD_RECORDS
+ "(AID,SOFTCODE,RECORD) values (?,?,?)");
doinsert(psInsert);

conn.close();
System.out.println("Closed connection");

// Beginning of the primary catch block: uses errorPrint method
} catch (Throwable e) {
/*
* Catch all exceptions and pass them to* the exception
* reporting method
*/
System.out.println(" . . . Exception thrown:");
errorPrint(e);
}
System.out.println("Derby JDBC program ending.");
}
}

// ## DERBY EXCEPTION REPORTING CLASSES ##
/***
* Exception reporting methods with special handling of SQLExceptions
***/
static void errorPrint(Throwable e) {
if (e instanceof SQLException)
SQLExceptionPrint((SQLException) e);
else {
System.out.println("A non SQL error occured.");
e.printStackTrace();
}
} // END errorPrint

// Iterates through a stack of SQLExceptions
static void SQLExceptionPrint(SQLException sqle) {
while (sqle != null) {
System.out.println("\n---SQLException Caught---\n");
System.out.println("SQLState: " + (sqle).getSQLState());
System.out.println("Severity: " + (sqle).getErrorCode());
System.out.println("Message: " + (sqle).getMessage());
// sqle.printStackTrace();
sqle = sqle.getNextException();
}
} // END SQLExceptionPrint

private static void doinsert(PreparedStatement psInsert)
throws SQLException {

long currtime = 0;
Apk_Download_Record table = new Apk_Download_Record(1, 2, 3, "TEST");

for (int i = 0; i < 1000; i++) {
currtime = System.currentTimeMillis();
psInsert.setInt(1, i);
psInsert.setInt(2, table.getSoftcode());
psInsert.setString(3, table.getRecord());
psInsert.executeUpdate();
System.out.println("newline:" + i + " "
+ (System.currentTimeMillis() - currtime));
}

psInsert.close();
}

static class Query implements Runnable {

@Override
public void run() {
int index = 0;
Connection conn = null;

Statement s = null;
try {
// Create (if needed) and connect to the database

System.out.println("Connected to database " + dbName);
conn = DriverManager.getConnection(connectionURL);
s = conn.createStatement();

ResultSet rs = s.executeQuery("select count(id) from "
+ APK_DOWNLOAD_RECORDS);

while (rs.next()) {
index++;
System.out.println(rs.getString(index) + "行");
}

} catch (Throwable e) {
/*
* Catch all exceptions and pass them to* the exception
* reporting method
*/
System.out.println(" . . . Exception thrown:");
errorPrint(e);
} finally {
try {
s.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值