JS访问数据库[非Node.js]

简介: 提起服务器端 JavaScript,很多人第一反应都是 Node.js。其实 Java 6 开始包含 Script Engine,其中就自带了一个“阉割版”的 Mozilla Rhino - 纯 Java 实现的 JavaScript 解释器。使用 jrunscript 就能启动这个解释器。使用 Rhino 的好处是你能使用 JavaScript 语言做开发,但又能使用现成的浩瀚的 Java

提起服务器端 JavaScript,很多人第一反应都是 Node.js。其实 Java 6 开始包含 Script Engine,其中就自带了一个“阉割版”的 Mozilla Rhino - 纯 Java 实现的 JavaScript 解释器。

使用 jrunscript 就能启动这个解释器。使用 Rhino 的好处是你能使用 JavaScript 语言做开发,但又能使用现成的浩瀚的 Java 库!而且支持编译成 class 文件。

我以连接 Sqlite 数据库为例子抛砖引玉。首先创建一个 sqlite 数据库:

sqliteλ sqlite3 user.db
SQLite version 3.7.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .header on
sqlite> select * from users;
id|name|age
1|Joe|24
2|redraiment|24
3|Kewell|30
sqlite> .quit
sqliteλ 

JS 封装 JDBC

var with_connection = function(url) {
    var connection = java.sql.DriverManager.getConnection(url);
    for (var argc = 1; argc < arguments.length; argc++) {
        arguments[argc].call(connection);
    }
    connection.close();
};

var with_query = function(sql, fn) {
    return function() {
        var call = this.prepareStatement(sql);
        var rs = call.executeQuery();
        var meta = rs.getMetaData();
        var list = [];
        while (rs.next()) {
            var o = {};
            for (var i = 1; i <= meta.getColumnCount(); i++) {
                o[meta.getColumnName(i)] = rs.getObject(i);
            }
            list.push(o);
        }
        rs.close();
        call.close();
        return fn(list);
    };
};

使用:读取表信息

new org.sqlite.JDBC();
with_connection(
    'jdbc:sqlite:user.db',
    with_query('select * from users', function(rs) {
        for (var row = 0; row < rs.length; row++) {
            for (var columnName in rs[row]) {
                printf('%s => %s\n', columnName, rs[row][columnName]);
            }
            print('\n');
        }
    })
);

执行结果

sqliteλ jrunscript -cp "$CLASSPATH:$PWD/sqlite-jdbc-3.7.2.jar" jdbc.js 
id => 1
name => Joe
age => 24

id => 2
name => redraiment
age => 24

id => 3
name => Kewell
age => 30

sqliteλ 
目录
相关文章
|
1月前
|
存储 JavaScript 前端开发
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
102 0
|
9天前
|
JavaScript 前端开发 开发者
jQuery:JavaScript库的瑰宝
jQuery:JavaScript库的瑰宝
34 3
|
14天前
|
人工智能 JavaScript 前端开发
使用Node.js模拟执行JavaScript
使用Node.js模拟执行JavaScript
15 2
|
14天前
|
消息中间件 JavaScript 前端开发
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
35 1
|
5天前
|
缓存 监控 JavaScript
Node.js中基于node-schedule实现定时任务之详解
Node.js中基于node-schedule实现定时任务之详解
19 0
|
5天前
|
Web App开发 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
|
5天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
6 0
|
6天前
|
JavaScript 前端开发 API
深入了解jQuery:快速、高效的JavaScript库
【10月更文挑战第11天深入了解jQuery:快速、高效的JavaScript库
7 0
|
18天前
|
缓存 JavaScript 前端开发
JavaScript 库
JavaScript 库
16 0
|
JavaScript
电脑上安装了多个版本的nodejs,如何知道node命令调用的哪一个
电脑上安装了多个版本的nodejs,如何知道node命令调用的哪一个
130 0
电脑上安装了多个版本的nodejs,如何知道node命令调用的哪一个