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λ 
目录
相关文章
|
4天前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
2天前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
15 1
|
7天前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
3天前
|
JavaScript 前端开发 搜索推荐
Moment.js、Day.js、Miment,日期时间库怎么选?
【10月更文挑战第29天】如果你需要一个功能强大、插件丰富的日期时间库,并且对性能要求不是特别苛刻,Moment.js是一个不错的选择;如果你追求极致的轻量级和高性能,那么Day.js可能更适合你;而如果你有一些特定的日期时间处理需求,并且希望在性能和功能之间取得平衡,Miment也是可以考虑的。
|
8天前
|
存储 JavaScript 前端开发
decimal.js库的安装和使用方法
【10月更文挑战第24天】decimal.js 是一个非常实用的高精度计算库,通过合理的安装和使用,可以在 JavaScript 中实现精确的数值计算和处理。你可以根据具体的需求和项目情况,灵活运用该库来解决数字精度丢失的问题。
|
12天前
|
JavaScript 前端开发 开发工具
Node.js——初识Node.js
Node.js——初识Node.js
15 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
89 2
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
109 4