Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
node-sqlite3
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
node-sqlite3
Commits
c1c4b86b
Commit
c1c4b86b
authored
Dec 15, 2009
by
Eric Fredricksen
Committed by
Eric Fredricksen
Dec 15, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Documentation
parent
ed597e40
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
226 additions
and
34 deletions
+226
-34
README
README
+3
-2
compiloop.py
compiloop.py
+4
-8
examples.html
doc/examples.html
+133
-0
examples.js
doc/examples.js
+2
-24
index.php
doc/index.php
+84
-0
No files found.
README
View file @
c1c4b86b
SQLite3 bindings for Node.js
=============================
The code and some documentation live at http://code.google.com/p/node-sqlite/
Documentation lives at http://grumdrig.com/node-sqlite/
The code lives at http://code.google.com/p/node-sqlite/
The two files required to use these bindings are sqlite.js and
build/default/sqlite3_bindings.node. Put this directory in your
NODE_PATH or copy those two files where you need them.
(c) 2009 Eric Fredricksen -
P
ermissive license terms at top of sqlite.js
(c) 2009 Eric Fredricksen -
See p
ermissive license terms at top of sqlite.js
compiloop.py
View file @
c1c4b86b
#!/usr/bin/python
# Wait for changes
for files specified on the command line, or here in the file
#
Then compile and run test. And
do this forever.
# Wait for changes
to relevant files, then compile and run test. And
# do this forever.
import
os
,
sys
,
time
#filenames = sys.argv[1:]
filenames
=
[
"sqlite3_bindings.cc"
,
"wscript"
,
"sqlite.js"
,
"test.js"
]
def
handler
():
os
.
system
(
"clear; rm -f test.db"
)
os
.
system
(
"node-waf build && node test.js && sleep 1 && sqlite3 test.db .dump"
);
mtime
=
[]
while
True
:
m
=
[
os
.
stat
(
filename
)
.
st_mtime
for
filename
in
filenames
]
if
mtime
!=
m
:
handler
()
os
.
system
(
"clear; rm -f test.db"
)
os
.
system
(
"node-waf build && node test.js && sleep 1 && sqlite3 test.db .dump"
);
mtime
=
m
time
.
sleep
(
1
)
...
...
doc/examples.html
0 → 100644
View file @
c1c4b86b
<p>
<h2>
Documentation by Example
</h2>
<p>
Import the library and open a database. (Only syncronous database
access is implemented at this time.)
<p>
<pre>
var sqlite = require("../sqlite");
var db = sqlite.openDatabaseSync("example.db");
</pre>
<p>
Perform an SQL query on the database:
<p>
<pre>
db.query("CREATE TABLE foo (a,b,c)");
</pre>
<p>
This is a more convenient form than the HTML5 syntax for the same
thing, but which is also supported:
<p>
<pre>
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE bar (x,y,z)");
});
</pre>
<p>
This allows the same or similar code to work on the client and
server end (modulo browser support of HTML5 Web SQL).
<p>
Transactions generate either a "commit" or "rollback" event.
<p>
<pre>
var rollbacks = 0;
db.addListener("rollback", function () {
++rollbacks;
});
</pre>
<p>
Both forms take an optional second parameter which is values to
bind to fields in the query, as an array:
<p>
<pre>
db.query("INSERT INTO foo (a,b,c) VALUES (?,?,?)", ['apple','banana',22]);
</pre>
<p>
or as a map:
<p>
<pre>
db.query("INSERT INTO bar (x,y,z) VALUES ($x,$y,$zebra)",
{$x: 10, $y:20, $zebra:"stripes"});
</pre>
<p>
Also optional is a callback function which is called with an object
representing the results of the query:
<p>
<pre>
db.query("SELECT x FROM bar", function (records) {
process.assert(records.length == 1);
process.assert(records[0].x == 10);
</pre>
<p>
The HTML5 semantics for the record set also work:
<p>
<pre>
process.assert(records.rows.length == 1);
process.assert(records.rows.item(0).x == 10);
});
</pre>
<p>
INSERT, UPDATE
&
DELETE queries set
<code>
rowsAffected
</code>
on their result
set object:
<p>
<pre>
db.query("UPDATE foo SET a = ? WHERE a = ?", ['orange', 'apple'], function(r) {
process.assert(r.rowsAffected == 1);
});
</pre>
<p>
They also emit an
<code>
"update"
</code>
event.
<p>
INSERT queries set
<code>
insertId
</code>
:
<p>
<pre>
var insert = db.query("INSERT INTO foo VALUES (1,2,3)");
process.assert(insert.insertId == 2);
</pre>
<p>
Note here that the result set passed to the callback is also
returned by
<code>
query
</code>
.
<p>
Multiple-statement queries are supported; each statement's result set is retuned to the callback as a separate parameter:
<p>
<pre>
var q = db.query("UPDATE bar SET z=20; SELECT SUM(z) FROM bar;",
function (update, select) {
process.assert(update.rowsAffected == 1);
process.assert(select[0]['SUM(z)'] == 20);
});
</pre>
<p>
An array of all result sets is available as the
<code>
.all
</code>
property on
each result set:
<p>
<pre>
process.assert(q.all[1].length == 1);
</pre>
<p>
HTML5 semantics are supported.
<p>
<pre>
db.transaction(function(tx) {
tx.executeSql("SELECT * FROM foo WHERE c = ?", [3], function(tx,res) {
process.assert(res.rows.item(0).c == 3);
});
});
</pre>
<p>
The
<code>
query
</code>
and
<code>
transaction
</code>
APIs wrap lower level APIs that more
thinly wrap the underlying C api:
<p>
<pre>
var stmt = db.prepare("INSERT INTO foo VALUES (?,?,?)");
stmt.bind(1, "curly");
stmt.bind(2, "moe");
stmt.bind(3, "larry");
stmt.step(); // Insert Curly, Moe
&
Larry
stmt.reset();
stmt.step(); // Insert another row with same stooges
stmt.reset();
stmt.clearBindings();
stmt.bind(2, "lonely");
stmt.step(); // Insert (null, "lonely", null)
stmt.finalize();
</pre>
<p>
Close it:
<p>
<pre>
db.close();
</pre>
<p>
<p>
</pre>
<p>
</pre>
<p>
examples.js
→
doc/
examples.js
View file @
c1c4b86b
...
...
@@ -2,35 +2,13 @@
/*
//!! To be processed by docbyex.py (or run by Node)
<head>
<title>node-sqlite</title>
<style>
pre, code { color: #060; font-size: 11pt; }
pre { margin-left: 2ex; padding: 1ex; background: #eee; }
p { font-size: 12pt; }
body { margin: 2em; background-color: #fff; color: black }
h1,h2,h3,h4 { font-family: helvetica }
</style>
</head>
<body>
<h1>node-sqlite</h1>
<a href=http://sqlite.org/>SQLite</a> bindings for
<a //href=http://nodejs.org/>Node</a>.
The semantics conform somewhat to those of the <a
href=http://dev.w3.org/html5/webdatabase/#sql>HTML5 Web SQL API</a>,
plus some extensions. Also, only the synchronous API is implemented;
the asynchronous API is a big TODO item.
<h2>Documentation by Example</h2>
*/
// Import the library and open a database. (Only syncronous database
// access is implemented at this time.)
var
sqlite
=
require
(
"./sqlite"
);
var
sqlite
=
require
(
".
.
/sqlite"
);
var
db
=
sqlite
.
openDatabaseSync
(
"example.db"
);
// Perform an SQL query on the database:
...
...
@@ -131,7 +109,7 @@ stmt.bind(2, "lonely");
stmt
.
step
();
// Insert (null, "lonely", null)
stmt
.
finalize
();
// Close it
!
// Close it
:
db
.
close
();
...
...
doc/index.php
0 → 100644
View file @
c1c4b86b
<head>
<title>
node-sqlite
</title>
<style>
pre
,
code
{
color
:
#060
;
font-size
:
11pt
;
}
pre
{
margin-left
:
2ex
;
padding
:
1ex
;
background-color
:
#eee
;
}
p
{
font-size
:
12pt
;
}
body
{
margin-left
:
10%
;
margin-right
:
10%
;
background-color
:
#fff
;
color
:
black
;
max-width
:
800px
;
}
h1
,
h2
,
h3
,
h4
{
font-family
:
helvetica
}
h1
{
font-size
:
36pt
;
}
h1
{
background-color
:
#58b
;
color
:
white
;
padding-left
:
6px
;
}
h2
{
color
:
#28b
;
}
</style>
</head>
<body>
<h1>
node-sqlite
</h1>
<a
href=
http://sqlite.org/
>
SQLite
</a>
bindings for
<a
//
href=
http://nodejs.org/
>
Node
</a>
.
<p>
The semantics conform somewhat to those of the
<a
href=
http://dev.w3.org/html5/webdatabase/#sql
>
HTML5 Web SQL API
</a>
,
plus some extensions. Also, only the synchronous API is implemented;
the asynchronous API is a big TODO item.
<h2>
Download
</h2>
<p>
The spiritual home of node-sqlite is at
<a
href=
http://grumdrig.com/node-sqlite/
>
http://grumdrig.com/node-sqlite/
</a>
.
<p>
The code lives at
<a
href=
http://code.google.com/p/node-sqlite/
>
http://code.google.com/p/node-sqlite/
</a>
.
<?
readfile
(
'examples.html'
)
?>
<h2>
Installation
</h2>
<p>
<ol>
<li>
Install
<a
//
href=
http://nodejs.org/
>
Node
</a>
and
<a
href=
http://sqlite.org/
>
SQLite
</a>
.
<p>
<li>
Get the code
<pre>
$ hg clone https://node-sqlite.googlecode.com/hg/ node-sqlite
</pre>
<li>
Configure and build
<pre>
$ cd node-sqlite
$ node-waf configure
$ node-waf build
</pre>
<li>
Test:
<pre>
$ node test.js
$ node doc/examples.js
</pre>
</ol>
<p>
The two files needed to use this library are
<code>
sqlite.js
</code>
and
<code>
build/default/sqlite3_bindings.node
</code>
; copy them where you need
them.
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment