⑴ 怎麼使用JAVA連接資料庫
1、載入驅動程序。
處理結果兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
ResultSet包含符合sql語句中條件的所有行,並且它通過一套get方法提供了對這些 行中數據的訪問。
(1)資料庫介面開發實例擴展閱讀:
Statement
要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3 種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
⑵ 如何創建資料庫實例
什麼是SQL呢
SQL就是專門用來做資料庫的一門語言
和C語言差不多
(當然功能不緊緊是做數據了
編程啊
都可以.....
這里就不多說了)z這道題用ACCESS
就可以完成了
1
首先
用Access
2000(資料庫
)做一個資料庫
打開設計器創建表
在點菜單
另存為
名為班級名+自己名字英文簡寫
最後點保存啦
(每完成系統都是有提示的啦)
第一問
解決
2
打開設計器
上面做的表下面下
創建數據表
名字都是在最後完成時做的
先不用管
然後在輸入sID,sName,sSex,sAge,sClass
注意根據後面的要求填寫欄位
及數據類型
以及
在做其他的問題了將T_Student表的sID欄位設置為標識列,種子為1,增量為2。
為T_Student表的sSex(性別)欄位設置其默認值為「男」。
為T_Student表的sAge(年齡)欄位設置檢查約束,規定年齡在0到30歲之間。
為T_KC表的cName(課程名稱)欄位設置唯一性約束。,規定課程名稱不得重復。
生成一個規則t_rule,限制數據的取值范圍在(0---100)之間,然後將這個規則綁定到T_CJ表的cj(成績)欄位。
為T_KC表的cName欄位創建索引。
最後
當然主鍵當然是SID了
一定要標好哦~~·先不管作業其他要求
在依次做其他2個表;
T_KC(cID,cName,sBianhao,sXuefen)
T_CJ(sID,cID,cj)
注意主鍵是SID
3.
做好了三個表後退出設計器
在打開以一個個表
在按要求輸入(在每個表中添加3-5條記錄。)
好了
基本就完成了
當然用SQL
也能完成
這些問題
並且要快
但涉及到TQL語言
編程問題
很難說清楚
就不一一解釋了···
⑶ 如何使用python連接資料庫,插入並查詢數據
你可以訪問Python資料庫介面及API查看詳細的支持資料庫列表。不同的資料庫你需要下載不同的DB API模塊,例如你需要訪問Oracle資料庫和Mysql數據,你需要下載Oracle和MySQL資料庫模塊。
DB-API 是一個規范. 它定義了一系列必須的對象和資料庫存取方式, 以便為各種各樣的底層資料庫系統和多種多樣的資料庫介面程序提供一致的訪問介面 。
Python的DB-API,為大多數的資料庫實現了介面,使用它連接各資料庫後,就可以用相同的方式操作各資料庫。
Python DB-API使用流程:
引入 API 模塊。
獲取與資料庫的連接。
執行SQL語句和存儲過程。
關閉資料庫連接。
什麼是MySQLdb?
MySQLdb 是用於Python鏈接Mysql資料庫的介面,它實現了 Python 資料庫 API 規范 V2.0,基於 MySQL C API 上建立的。
如何安裝MySQLdb?
為了用DB-API編寫MySQL腳本,必須確保已經安裝了MySQL。復制以下代碼,並執行:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
如果執行後的輸出結果如下所示,意味著你沒有安裝 MySQLdb 模塊:
Traceback (most recent call last):
File "test.py", line 3, in <mole>
import MySQLdb
ImportError: No mole named MySQLdb
安裝MySQLdb,請訪問 ,(Linux平台可以訪問:)從這里可選擇適合您的平台的安裝包,分為預編譯的二進制文件和源代碼安裝包。
如果您選擇二進制文件發行版本的話,安裝過程基本安裝提示即可完成。如果從源代碼進行安裝的話,則需要切換到MySQLdb發行版本的頂級目錄,並鍵入下列命令:
$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install
注意:請確保您有root許可權來安裝上述模塊。
資料庫連接
連接資料庫前,請先確認以下事項:
您已經創建了資料庫 TESTDB.
在TESTDB資料庫中您已經創建了表 EMPLOYEE
EMPLOYEE表欄位為 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
連接資料庫TESTDB使用的用戶名為 "testuser" ,密碼為 "test123",你可以可以自己設定或者直接使用root用戶名及其密碼,Mysql資料庫用戶授權請使用Grant命令。
在你的機子上已經安裝了 Python MySQLdb 模塊。
如果您對sql語句不熟悉,可以訪問我們的 SQL基礎教程
實例:
以下實例鏈接Mysql的TESTDB資料庫:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# 使用execute方法執行SQL語句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法獲取一條資料庫。
data = cursor.fetchone()
print "Database version : %s " % data
# 關閉資料庫連接
db.close()
執行以上腳本輸出結果如下:
Database version : 5.0.45
創建資料庫表
如果資料庫連接存在我們可以使用execute()方法來為資料庫創建表,如下所示創建表EMPLOYEE:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# 如果數據表已經存在使用 execute() 方法刪除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 創建數據表SQL語句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# 關閉資料庫連接
db.close()
資料庫插入操作
以下實例使用執行 SQL INSERT 語句向表 EMPLOYEE 插入記錄:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 插入語句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# 執行sql語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# 關閉資料庫連接
db.close()
以上例子也可以寫成如下形式:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 插入語句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# 執行sql語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
# 發生錯誤時回滾
db.rollback()
# 關閉資料庫連接
db.close()
實例:
以下代碼使用變數向SQL語句中傳遞參數:
..................................
user_id = "test123"
password = "password"
con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................
資料庫查詢操作
Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。
fetchone(): 該方法獲取下一個查詢結果集。結果集是一個對象
fetchall():接收全部的返回結果行.
rowcount: 這是一個只讀屬性,並返回執行execute()方法後影響的行數。
實例:
查詢EMPLOYEE表中salary(工資)欄位大於1000的所有數據:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 列印結果
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
except:
print "Error: unable to fecth data"
# 關閉資料庫連接
db.close()
以上腳本執行結果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
資料庫更新操作
更新操作用於更新數據表的的數據,以下實例將 TESTDB表中的 SEX 欄位全部修改為 'M',AGE 欄位遞增1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 更新語句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
WHERE SEX = '%c'" % ('M')
try:
# 執行SQL語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
# 發生錯誤時回滾
db.rollback()
# 關閉資料庫連接
db.close()
刪除操作
刪除操作用於刪除數據表中的數據,以下實例演示了刪除數據表 EMPLOYEE 中 AGE 大於 20 的所有數據:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 刪除語句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# 執行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 發生錯誤時回滾
db.rollback()
# 關閉連接
db.close()
執行事務
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
持久性(rability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。
⑷ 如何使用sql server 資料庫介面
要實現跟資料庫連接操作,第一:寫一個資料庫連接類,第二:配置訪問資料庫基本元素,可以採用*.XML形式(配置IP,埠,用戶名,密碼等),第三:門診收費系統會提供一個介面調用資料庫連接類的。一般像在醫院或門診這地方,一般都是採用配置形式做資料庫連接的,直接拿配置文件修改一下連接IP地址就可以了,但確保資料庫伺服器上有資料庫表,有連接配置上還要提供一下伺服器IP,埠,和資料庫用戶名和密碼就可以了。在SQL SERVER2008資料庫上只做授權操作即可,授權操作可以有用戶管理裡面進行。允許該用戶查詢和修改等操作就OK了。
⑸ 怎樣操作leveldb資料庫,實現增刪改查
下文例子中演示了如何插入、獲取、刪除一條記錄
LevelDB 簡介
一、LevelDB入門
LevelDB是Google開源的持久化KV單機資料庫,具有很高的隨機寫,順序讀/寫性能,但是隨機讀的性能很一般,也就是說,LevelDB很適合應用在查詢較少,而寫很多的場景。LevelDB應用了LSM (Log Structured Merge) 策略,lsm_tree對索引變更進行延遲及批量處理,並通過一種類似於歸並排序的方式高效地將更新遷移到磁碟,降低索引插入開銷,關於LSM,本文在後面也會簡單提及。
根據LevelDB官方網站的描述,LevelDB的特點和限制如下:
特點:
1、key和value都是任意長度的位元組數組;
2、entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;
3、提供的基本操作介面:Put()、Delete()、Get()、Batch();
4、支持批量操作以原子操作進行;
5、可以創建數據全景的snapshot(快照),並允許在快照中查找數據;
6、可以通過前向(或後向)迭代器遍歷數據(迭代器會隱含的創建一個snapshot);
7、自動使用Snappy壓縮數據;
8、可移植性;
限制:
1、非關系型數據模型(NoSQL),不支持sql語句,也不支持索引;
2、一次只允許一個進程訪問一個特定的資料庫;
3、沒有內置的C/S架構,但開發者可以使用LevelDB庫自己封裝一個server;
LevelDB本身只是一個lib庫,在源碼目錄make編譯即可,然後在我們的應用程序裡面可以直接include leveldb/include/db.h頭文件,該頭文件有幾個基本的資料庫操作介面,下面是一個測試例子:
#include <iostream>
#include <string>
#include <assert.h>
#include "leveldb/db.h"
using namespace std;
int main(void)
{
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
// open
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());
string key = "name";
string value = "chenqi";
// write
status = db->Put(leveldb::WriteOptions(), key, value);
assert(status.ok());
// read
status = db->Get(leveldb::ReadOptions(), key, &value);
assert(status.ok());
cout<<value<<endl;
// delete
status = db->Delete(leveldb::WriteOptions(), key);
assert(status.ok());
status = db->Get(leveldb::ReadOptions(),key, &value);
if(!status.ok()) {
cerr<<key<<" "<<status.ToString()<<endl;
} else {
cout<<key<<"==="<<value<<endl;
}
// close
delete db;
return 0;
}
上面的例子演示了如何插入、獲取、刪除一條記錄,編譯代碼:
g++ -o test test.cpp libleveldb.a -lpthread -Iinclude
執行./test後,會在/tmp下面生成一個目錄testdb,裡麵包含若干文件:
------------------------------------------------------------
LevelDB是google開源的一個key-value存儲引擎庫,類似於開源的Lucene索引庫一樣。其他的軟體開發者可以利用該庫做二次開發,來滿足定製需求。LevelDB採用日誌式的寫方式來提高寫性能,但是犧牲了部分讀性能。為了彌補犧牲了的讀性能,一些人提議使用SSD作為存儲介質。
對於本地化的Key-value存儲引擎來說,簡單的使用一般都分成三個基本的步驟:(1)打開一個資料庫實例;(2)對這個資料庫實例進行插入,修改和查詢操作;(3)最後在使用完成之後,關閉該資料庫。下面將詳細討論該三個步驟:
一、打開一個資料庫實例
一個leveldb資料庫有一個對應一個文件系統目錄的名字。該資料庫的所有內容都存儲在這個目錄下。下面的代碼描述了怎樣打開一個資料庫或者建立一個新的資料庫。
#include <assert.h>
#include "leveldb/db.h"
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());
如果打開已存在資料庫的時候,需要拋出錯誤。將以下代碼插在leveldb::DB::Open方法前面:
options.error_if_exists = true;
二、對資料庫的簡單讀、寫操作
LevelDB提供了Put,Delete和Get三個方法對資料庫進行修改和查詢。例如,下面的代碼片段描述了怎樣將key1對應的value值,移到key2對應的值。
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if(s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
if(s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);
三、關閉資料庫
在對資料庫進行了一系列的操作之後,需要對資料庫進行關閉。該操作比較簡單:
... open the db as described above...
... do something with db ...
delete db;
上面對levelDB的簡單使用做了基本的介紹,接下來就是如何自己寫一個完成並且能運行的例子。
1、下載源碼 git clone https://code.google.com/p/leveldb/
2、編譯源碼 cd leveldb && make all
3、編寫test.cpp
#include <assert.h>
#include <string.h>
#include <leveldb/db.h>
#include <iostream>
int main(){
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());
//write key1,value1
std::string key="key";
std::string value = "value";
status = db->Put(leveldb::WriteOptions(), key,value);
assert(status.ok());
status = db->Get(leveldb::ReadOptions(), key, &value);
assert(status.ok());
std::cout<<value<<std::endl;
std::string key2 = "key2";
//move the value under key to key2
status = db->Put(leveldb::WriteOptions(),key2,value);
assert(status.ok());
status = db->Delete(leveldb::WriteOptions(), key);
assert(status.ok());
status = db->Get(leveldb::ReadOptions(),key2, &value);
assert(status.ok());
std::cout<<key2<<"==="<<value<<std::endl;
status = db->Get(leveldb::ReadOptions(),key, &value);
if(!status.ok()) std::cerr<<key<<" "<<status.ToString()<<std::endl;
else std::cout<<key<<"==="<<value<<std::endl;
delete db;
return 0;
}
4、編譯鏈接 g++ -o test test.cpp ../leveldb/libleveldb.a -lpthread -I../leveldb/include
注意libleveldb.a 和leveldb include的路徑。
5、運行結果./test:
value
key2===value
key NotFound:
⑹ 哪裡可以下載到王晟的「PowerBuilder資料庫開發經典案例解析」電子書
美國Sybase公司研製的一種新型、快速開發工具,是客戶機/伺服器結構下,基於Windows3.x、Windows95和WindowsNT的一個集成化開發工具。它包含一個直觀的圖形界面和可擴展的面向對象的編程語言PowerScript,提供與當前流行的大型資料庫的介面,並通過ODBC與單機資料庫相連。其主要特點如下: (1) 可視化、多特性的開發工具。全面支持Windows或WindowsNT所提供的控制、事件和函數。 PowerScript語言提供了幾百個內部函數,並且具有一個面向對象的編譯器和調試器,可以隨時編譯新增加的代碼,帶有完整的在線幫助和編程實例。 (2)功能強大的面向對象技術。支持通過對類的定義來建立可視或不可視對象模型,同時支持所有面向對象編程技術,如繼承、數據封裝和函數多態性等。這些特性確保了應用程序的可靠性,提高了軟體的可維護性。 (3)支持高效的復雜應用程序。對基於Windows環境的應用程序提供了完備的支持,這些環境包括Windows、WindowsNT和WinOS/2。開發人員可以使用PowerBuilder內置的WatcomC/C++來定義、編譯和調試一個類。 (4)企業資料庫的連接能力。PowerBuilder的主要特色是DataWindow(數據窗口),通過DataWindow可以方便地對資料庫進行各種操作,也可以處理各種報表,而無需編寫SQL語句,可以直接與Sybase、SQLServer、Informix、Oracle等大型資料庫連接。 (5)強大的查詢、報表和圖形功能。PowerBuilder提供的可視化查詢生成器和多個表的快速選擇器可以建立查詢對象,並把查詢結果作為各種報表的數據來源。 PowerBuilder主要適用於管理信息系統的開發,特別是客戶機/伺服器結構。
在開始學習PowerBuilder 之前,首先要弄清楚的問題是什麼是PowerBuilder,它是用來干什麼的,它的特點又是什麼。只有知道了PowerBuilder的功能和特點所在,我們才能知道什麼時候應該選用PowerBuilder作為我們的應用程序開發工具。
我們知道,資料庫應用是當前計算機應用的一個非常重要的方面,而在目前的資料庫應用技術中普遍採用的就是客戶機/伺服器體系結構,在這種體系結構中,所有的數據和資料庫管理系統都在伺服器上,客戶機通過採用標準的SQL語句等方式來訪問伺服器上資料庫中的數據。由於這種體系結構把數據和對數據的管理都統一放在了伺服器上。就保證了數據的安全性和完整性,同時也可以充分利用伺服器高性能的特點。正因為客戶機/伺服器體系結構的這些優點,因而得到了非常廣泛的應用。
PowerBuilder是著名的資料庫應用開發工具生產廠商PowerSoft公司推出的產品(PowerSoft現已被資料庫廠商Sybase所收購),它完全按照客戶機/伺服器體系結構研製設計,在客戶機/伺服器結構中,它使用在客戶機中,作為資料庫應用程序的開發工具而存在。由於PowerBuilder採用了面向對象和可視化技術,提供可視化的應用開發環境,使得我們利用PowerBuilder,可以方便快捷地開發出利用後台伺服器中的數據和資料庫管理系統的資料庫應用程序。
在當前,網路技術迅速發展,隨之發展的還有OLE,OCX,跨平台等技術,而在PowerBuilder的PowerBuilder 6.0中提供了對這些技術的全面支持。總之在資料庫開發工具領域,PowerBuilder是其中非常優秀的一個,利用它我們可以開發出功能強大的資料庫應用程序。
PowerBuilder提供了對目前流行的大多數關系資料庫管理系統的支持,由於在PowerBuilder的應用程序中對資料庫訪問的部分一般採用國際化標准資料庫查詢語言SQL,使得用PowerBuilder開發的應用程序可以不做修改或者只做少量的修改就可以在不同的後台資料庫管理系統上使用。也就是說用PowerBuilder開發的應用程序是獨立於伺服器上的資料庫管理系統的。
和大多數的WINDOWS應用程序一樣,PowerBuilder也是事件驅動工作方式。在這種工作方式中,程序的運行沒有固定的流程,程序中的代碼也是為各種可能發生的事件編寫的,當程序開始運行之後,它就可以接受來自系統,用戶或者其它應用程序觸發的事件,然後執行相應的事件代碼。事件驅動的工作方式與面向對象技術是緊密相關的,在PowerBuilder應用程序中,接受發生的事件的往往就是程序界面中的各種可視化對象。
PowerBuilder是一種面向對象的開發工具,各種WINDOWS應用程序中常見的窗口、菜單、控制項等在PowerBuilder中都是一個個的對象。在PowerBuilder中我們還可以創建自己的用戶對象。特別要指出的是PowerBuilder提供了對面向對象方法中的各種技術的全面支持,我們可以利用面向對象方法中的對象的封裝性、繼承性、多態性等特點使得我們開發的應用程序具有極大的可重用性和可擴展性,而這一點正是軟體工程中對應用程序所提出的重要目標。
在當前,由於網路技術的發展,許多種不同的操作系統平台在INTERNET網上同時被使用,這對開發的應用程序的跨平台性提出了更高的要求,而PowerBuilder就提供了良好的跨平台性,比如在PowerBuilder中,利用WINDOWS平台開發的各種對象可以方便地應用到UNIX平台中,因為PowerBuilder支持對象的跨平台性。這樣使得把應用程序從一個平台移到另一個平台變得並不復雜。
為了給用戶提供各個方面的支持,PowerBuilder具有自己的編程語言POWERSCRIPT,這個語言除了提供基本的流程式控制制語句,還提供了幾百個函數來操縱各種對象和提供諸如DDE,OLE等方面的支持。此外我們還可以定義自己的函數,處理特定的事件。學習PowerBuilder時相當一部分的時間就是用來了解和熟悉PowerBuilder提供的各種函數。
PowerBuilder一個很大的特點就是提出了數據窗口對象的概念。數據窗口對象也是PowerBuilder中的一種對象類型,與其它對象不同的是數據窗口對象是專門為了訪問後台的資料庫服務的,在數據窗口對象中我們定義了數據的來源和數據的顯示風格,這樣在應用程序中我們就可以把精力完全放在程序的運行流程式控制制上,而不用關心具體數據的來源,因為我們在數據窗口對象中已經定義好了數據的來源。如果需要使用資料庫中不同的數據也只要對數據窗口對象進行修改就可以了。特別要指出的是PowerBuilder在數據窗口對象中提供了豐富的數據顯示方式,可以滿足各種不同的需要。
在PowerBuilder較新的版本中提供了基礎類庫PFC,它為應用程序的開發提供了許多可重用的預定義類和對象,利用基本類庫PFC可以快速開發出高質量重用性好的應用程序。真正發揮面向對象編程的巨大威力。
最後要指出的是PowerBuilder有三個不同的版本,分別為DESKTOP型,PROFESSIONAL型,和ENTERPRISE型,DESKTOP型是為個人使用的桌面型應用程序,在這里可以利用PowerBuilder內置的資料庫管理系統SYBASE SQL ANYWHERE來創建和使用本地資料庫,為個人的應用服務;PROFESSIONAL型的PowerBuilder最重要的一點就是提供了對MICROSOFT ODBC(資料庫標准連接介面)的支持,在PROFESSIONAL版本中我們就可以使用PowerBuilder的繼承,多態等絕大多數特性;在ENTERPRISE版本中最重要的一點就是提供了對開發大型的資料庫應用程序的全面的支持,提供了開發大型應用程序的許多輔助的工具,比如C++ CLASS BUILDER等。
資料庫前端開發工具與後台資料庫管理系統的連接方式是一個很重要的課題。PowerBuilder提供了兩種訪問後台資料庫的方式,一種是通過ODBC標准介面的方式,第二種是通過專用的介面與後台的資料庫相連。
ODBC的中文名字是開放式資料庫連接,它是微軟公司提出的資料庫連接標准,使用ODBC方式連接資料庫的第一步是創建數據源,比如我們可以利用WINDOWS下控制面板中的「32 BIT ODBC」選項來創建驅動某種資料庫的數據源,創建好數據源之後,我們就可以在本地計算機中利用定義好的數據源存取後台資料庫中的數據了。
我們還可以通過專用介面同後台的資料庫相連,由於專用介面是針對特定的後台資料庫管理系統而設計,因此這種方式存取數據的速度要比採用ODBC方式存取數據的速度要快一些,如果我們的應用程序只是針對特定類型的後台資料庫,當然是採用專用介面訪問後台數據更快一些。
2007年Sybase推出了其第四代高級編程語言(4GL)的快速應用開發(RAD)工具Sybase PowerBuilder 11。憑借其快速開發數據驅動應用程序的優勢,PowerBuilder 11的用戶可以用最簡單、最便捷的方法把應用部署到.NET平台上。
PowerBuilder 11的新特性:
PowerBuilder 11顯著地簡化了.NET應用的開發過程,是Sybase全面支持.NET架構計劃中的一部分。此次發布的PowerBuilder 11不僅可以幫助開發者靈活地部署應用程序,包括.NET Windows Forms、 Web Forms和 .NET Smart Clients等,還可以幫助開發傳統客戶機/伺服器應用程序和Web Services。
PowerBuilder 11繼續支持J2EE?環境和Win32應用程序。通過與領先的開發平台進行集成,PowerBuilder 11可以為開發者提供一個更開放、更靈活的環境。與第三代編程語言(3GL)工具下建立的應用程序相比,PowerBuilder可以實現更簡化的編碼和更短的開發周期,從而為用戶提供更高的生產力。
PowerBuilder 11的新功能包括:
部署PowerBuilder非可視對象(NVOs),包括.NET編譯和.NET Smart Client應用
快速使用ASP.NET,並在Web上部署包括Web Services 和 PowerBuilder應用在內的PowerBuilder非可視對象(NVOs)
支持Microsoft SQL Server SNC 和 Oracle 10g RAC
使用Web Services,並將其作為DataWindow的數據來源
⑺ 做個資料庫介面
9.Sql Server7.0/2000資料庫
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
::CoInitialize(NULL); // 初始化OLE/COM庫環境 ,為訪問ADO介面做准備
_RecordsetPtr m_pRecordset("ADODB.Recordset");
_ConnectionPtr m_pConnection("ADODB.Connection");
_bstr_t bstrSQL("select * from stu_info"); //查詢語句
char * query_cmd = "DELETE FROM stu_info WHERE sname = 』本拉登』";
try
{
// 創建Connection對象
m_pConnection.CreateInstance("ADODB.Connection");
// 設置連接字元串,必須是BSTR型或者_bstr_t類型
_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;";
//若資料庫在網路上則Server為形如(192.168.1.5,3340)
//用戶sa和密碼123隻是針對我的庫
m_pConnection->Open(strConnect,"","",adModeUnknown);
if(m_pConnection==NULL)
cerr<<"Lind data ERROR!\n";
// 創建記錄集對象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的記錄
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t vsnum,vsname,vsage,vssex,vsmajor; //對應庫中的snum,sname,sage,ssex,smajor
cout << "學號 姓名 年齡 姓別 專業";
cout << "\n----------------------------------------------------------------\n";
while (!m_pRecordset->EndOfFile)
{
vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//這兒給欄位編號和欄位名都可以
vsname = m_pRecordset->GetCollect("sname");
vsage = m_pRecordset->GetCollect("sage");
vssex = m_pRecordset->GetCollect("ssex");
vsmajor = m_pRecordset->GetCollect("smajor");
if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL
&& vssex.vt != VT_NULL && vsmajor.vt != VT_NULL)
{
cout.setf(ios::left);
cout << setw(14) << (char*)(_bstr_t)vsnum;
cout << setw(14) << (char*)(_bstr_t)vsname;
cout << setw(8) << vsage.lVal;
cout << setw(8) << (char*)(_bstr_t)vssex;
cout <<setw(20) << (char*)(_bstr_t)vsmajor;
cout.unsetf(ios::left);
cout << endl;
}
m_pRecordset->MoveNext(); ///移到下一條記錄
}
cout << "\n----------------------------------------------------------------\n";
cout << "\n請輸入你要添加的學生信息\n";
cout << "學號:";
cin >> student.snum;
cout << "\n姓名:";
cin >> student.sname;
cout << "\n年齡:";
cin >> student.sage;
cout << "\n姓別:";
cin >> student.ssex;
cout << "\n專業:";
cin >> student.smajor;
m_pRecordset->MoveFirst(); //移動到第一條記錄
m_pRecordset->AddNew(); ///添加新記錄
m_pRecordset->PutCollect("snum",_variant_t(student.snum));
m_pRecordset->PutCollect("sname",_variant_t(student.sname));
m_pRecordset->PutCollect("sage",_variant_t(student.sage));
m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
m_pRecordset->Update();
m_pConnection->Execute(query_cmd,NULL,1); //用Execute執行sql語句來刪除
m_pRecordset->Close(); // 關閉記錄集
}
// 捕捉異常
catch(_com_error e)
{
// 顯示錯誤信息
cerr << "\nERROR:" << (char*)e.Description();//拋出異常
}
if(m_pConnection->State)
m_pConnection->Close();
::CoUninitialize();
3.顯示表格
/*
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
*/
CoInitialize(NULL);
_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb";
//_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
_ConnectionPtr m_pConnection(_uuidof(Connection));
m_pConnection->Open(varSource,"","",adModeUnknow);
//打開屬性為默認(adModeRead(只讀),adModeWrite(可寫),adModeReadWrite(可讀寫)等)
_RecordsetPtr m_pSet(_uuid(Recordset));
try {
HRESULT hr=m_pSet->Open(%%1,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error *e){
AfxMessageBox(e->ErrorMessage());
}
if(SUCCESSED(hr))
{
//表打開成功
}
FieldsPtr p_fields=m_pSet->Fields;
FieldPtr p_field;
_variant_t var_index;
LPCSTR field_name;
int index=0;
_bstr_t bstr_field_name;
int countfields=p_fields->GetCount();
CString *Column=new CString[countfields];
CListCtrl *pList=(CListCtrl*)GetDlgItem(%%1);//IDC_LIST_TABLEDATA
VERIFY(pList);
pList->DeleteAllItems();
for(index=0;index<countfields;index++)
{
var_index.vt=VT_I4;
var_index.IVal=index;
p_field=p_fields->Item[var_index];
bstr_field_name=p_field->GetName();
field_name=(LPCSTR)bstr_field_name;
Column[index]=field_name;
int ColumnWidth=Column[index].GetLength()*15;
pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);
}
int i=0;
_bstr_t vCol;
//pList->SetTextBkColor(RGB(122,200,122));
//pList->SetTextColor(RGB(0,0,200));
while(!m_pSet->adoEOF)
{
pList->Insert(i,atoi(i));
for(int j=0;j<countfields;j++)
{
vCol=m_pSet->GetCollect((long)j);
pList->SetItemText(i,j,vCol);
}
m_pSet->MoveNext();
i++;
}
CoUninitialize(NULL);
4.操作表格
/*
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
*/
CoInitialize(NULL);
_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb";
//_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
_ConnectionPtr m_pConnection(_uuidof(Connection));
m_pConnection->Open(varSource,"","",adModeUnknow);
//打開屬性為默認(adModeRead(只讀),adModeWrite(可寫),adModeReadWrite(可讀寫)等)
_RecordsetPtr m_pSet(_uuid(Recordset));
try {
HRESULT hr=m_pSet->Open(%%1,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error *e){
AfxMessageBox(e->ErrorMessage());
}
if(SUCCESSED(hr))
{
//表打開成功
}
FieldsPtr p_fields=m_pSet->Fields;
FieldPtr p_field;
_variant_t var_index;
LPCSTR field_name;
int index=0;
_bstr_t bstr_field_name;
int countfields=p_fields->GetCount();
CString *Column=new CString[countfields];
CListCtrl *pList=(CListCtrl*)GetDlgItem(%%1);//IDC_LIST_TABLEDATA
VERIFY(pList);
pList->DeleteAllItems();
for(index=0;index<countfields;index++)
{
var_index.vt=VT_I4;
var_index.IVal=index;
p_field=p_fields->Item[var_index];
bstr_field_name=p_field->GetName();
field_name=(LPCSTR)bstr_field_name;
Column[index]=field_name;
int ColumnWidth=Column[index].GetLength()*15;
pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);
}
int i=0;
_bstr_t vCol;
//pList->SetTextBkColor(RGB(122,200,122));
//pList->SetTextColor(RGB(0,0,200));
while(!m_pSet->adoEOF)
{
pList->Insert(i,atoi(i));
for(int j=0;j<countfields;j++)
{
vCol=m_pSet->GetCollect((long)j);
pList->SetItemText(i,j,vCol);
}
m_pSet->MoveNext();
i++;
}
CoUninitialize(NULL);
6.關閉時斷開連接
::ExitInstance()
{
if (adStateOpen == ADOConn->State)
ADOConn->Close();
ADOConn.Release();
if(adStateOpen == m_pADOset->State)
m_pADOset->Close();
m_pADOset.Release();
return CWinApp::ExitInstance();
}
22.批量執行SQL和存儲過程
22.1、如果用ODBC訪問資料庫的話,可參考下列代碼:
CDatabase * pDatabase = new CDatabase;
TRY
{
pDatabase->OpenEx( _T("DSN=ODBCName;UID=%%1;PWD=%%2"), CDatabase::noOdbcDialog);
}
CATCH (CDBException, e)
{
delete pDatabase;
return;
}END_CATCH
SQL.Format("exec sp_Name");//有參數的話直接寫再後面
pDatabase->ExecuteSQL(SQL);
pDatabase->Close();
delete pDatabase;
22.2、用ADO調用存儲過程
_ConnectionPtr Conn = NULL;
_RecordsetPtr Rs = NULL;
_CommandPtr Cmd = NULL;
CoInitialize(NULL);
Conn.CreateInstance ( __uuidof(Connection));
Rs.CreateInstance (__uuidof(Recordset));
Cmd.CreateInstance (__uuidof(Command));
Conn->Open(L"db", L"sa", L"", adOpenUnspecified); //打開正常
//如下為_CommandPtr對象參數的賦值和調用
Cmd->ActiveConnection = Conn;
Cmd->CommandText = "SP_TEST";
//資料庫中實際存在這個測試存儲過程,select * from atable,不傳遞參數
Cmd->CommandType = adCmdStoredProc;
Cmd->Parameters->Refresh();
Rs = Cmd->Execute( NULL,NULL, adCmdUnknown ); //COM出錯。
//注釋掉的代碼為直接的SQL語句提交,運行正確。
//Cmd->ActiveConnection=Conn;
//Cmd->CommandText = "select * from atable";
//Cmd->CommandType = adCmdText;
//Cmd->Parameters->Refresh();
//Rs = Cmd->Execute(NULL,NULL,adCmdUnknown);
Rs->Close();
Conn->Close();
CoUninitialize();
⑻ 資料庫具體應用的實例有哪些
資料庫的應用領域
1、多媒體資料庫: 這類資料庫主要存儲與多媒體相關的數據,如聲音、圖像和視頻等數據。多媒體數據最大的特點是數據連續,而且數據量比較大,存儲需要的空間較大。
2、移動資料庫: 該類資料庫是在移動計算機系統上發展起來的,如筆記本電腦、掌上計算機等。該資料庫最大的特點是通過無線數字通信網路傳輸的。移動資料庫可以隨時隨地地獲取和訪問數據,為一些商務應用和一些緊急情況帶來了很大的便利。
3、空間資料庫: 這類資料庫目前發展比較迅速。它主要包括地理信息資料庫(又稱為地理信息系統,即GIS)和計算機輔助設計(CAD)資料庫。其中地理信息資料庫一般存儲與地圖相關的信息數據;計算機輔助設計資料庫一般存儲設計信息的空間資料庫,如機械、集成電路以及電子設備設計圖等。
4、信息檢索系統: 信息檢索就是根據用戶輸入的信息,從資料庫中查找相關的文檔或信息,並把查找的信息反饋給用戶。信息檢索領域和資料庫是同步發展的,它是一種典型的聯機文檔管理系統或者聯機圖書目錄。
5、分布式信息檢索: 這類資料庫是隨著Internet的發展而產生的資料庫。它一般用於網際網路及遠距離計算機網路系統中。特別是隨著電子商務的發展,這類資料庫發展更加迅猛。
許多網路用戶(如個人、公司或企業等)在自己的計算機中存儲信息,同時希望通過網路使用發送電子郵件、文件傳輸、遠程登錄方式和別人共享這些信息。分布式信息檢索滿足了這一要求。
6、專家決策系統: 專家決策系統也是資料庫應用的一部分。由於越來越多的數據可以聯機獲取,特別是企業通過這些數據可以對企業的發展作出更好的決策,以使企業更好地運行。由於人工智慧的發展,使得專家決策系統的應用更加廣泛。
(8)資料庫介面開發實例擴展閱讀
對資料庫系統的基本要求是:
①能夠保證數據的獨立性。數據和程序相互獨立有利於加快軟體開發速度,節省開發費用。
②冗餘數據少,數據共享程度高。
③系統的用戶介面簡單,用戶容易掌握,使用方便。
④能夠確保系統運行可靠,出現故障時能迅速排除;能夠保護數據不受非受權者訪問或破壞;能夠防止錯誤數據的產生,一旦產生也能及時發現。
⑤有重新組織數據的能力,能改變數據的存儲結構或數據存儲位置,以適應用戶操作特性的變化,改善由於頻繁插入、刪除操作造成的數據組織零亂和時空性能變壞的狀況。
⑥具有可修改性和可擴充性。
⑦能夠充分描述數據間的內在聯系。
⑼ Java的資料庫連接方式是什麼,簡要敘述之。
JDBC引擎介面。
JDBC(Java DataBase Connectivity,java資料庫連接)是一種用於執行SQL語句的Java API,可以為多種關系資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高級的工具和介面,使資料庫開發人員能夠編寫資料庫應用程序,同時,JDBC也是個商標名。
JDBC 也是個"低級"介面,換句話說,它用於直接調用 SQL 命令。在這方面它的功能極佳,並比其它的資料庫連接 API 易於使用,但它同時也被設計為一種基礎介面,在它之上可以建立高級介面和工具。高級介面是"對用戶友好的"介面,它使用的是一種更易理解和更為方便的 API,這種API在幕後被轉換為諸如 JDBC 這樣的低級介面。
在關系資料庫的"對象/關系"映射中,表中的每行對應於類的一個實例,而每列的值對應於該實例的一個屬性。於是,程序員可直接對 Java 對象進行操作;存取數據所需的 SQL 調用將在"掩蓋下"自動生成。此外還可提供更復雜的映射,例如將多個表中的行結合進一個 Java 類中。
⑽ 安卓開發連接資料庫
Android 連接資料庫
Android採用關系型資料庫SQLite3,它是一個支持SQL輕量級的嵌入式資料庫,在嵌入式操作上有很廣泛的,WM採用的也是SQLite3
關於過於、原理方面的東西在這篇文章里不會提到,但是如果你想能夠快速的學會操作SQLite3,那這就是你要找的文章!
首先,我們看一下api,所有資料庫相關的介面、類都在。database和android.database.sqlite兩個包下,雖然只有兩個包,但是如果你英文不好或是太懶的話也要迷茫一段時間,其實,我們真正用的到的沒有幾個!
1、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)
這是一個抽象類,關於抽象類我們都知道,如果要使用它,一定是繼承它!
這個類的方法很少,有一個構造方法
SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);
參數不做過多的解釋,CursorFactory一般直接傳null就可以
public void onCreate(SQLiteDatabase db)
此方法在創建資料庫是被調用,所以,應該把創建表的操作放到這個方法裡面,一會兒在後面我們會再詳細的說如何創建表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
從方法名上我們就能知道這個方法是執行更新的,沒錯,當version改變是系統會調用這個方法,所以在這個方法里應該執行刪除現有表,然後手動調用onCreate的操作
SQLiteDatabase getReadableDatabase()
可讀的SQLiteDatabase對象
SQLiteDatabase getWritableDatabase()
獲取可寫的SQLiteDatabase對象
2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)
關於操作資料庫的工作(增、刪、查、改)都在這個類里
execSQL(sql)
執行SQL語句,用這個方法+SQL語句可以非常方便的執行增、刪、查、改
除此之外,Android還提供了功過方法實現增、刪、查、改
long insert(TABLE_NAME, null, contentValues)添加記錄
int delete(TABLE_NAME, where, whereValue)刪除記錄
int update(TABLE_NAME, contentValues, where, whereValue) 更新記錄
Cursor query(TABLE_NAME, null, null, null, null, null, null) 查詢記錄
除此之外,還有很多方法,如:beginTransaction()開始事務、endTransaction()結束事務…有興趣的可以自己看api,這里就不多贅述了
3、Cursor(android.database.Cursor)
游標(介面),這個很熟悉了吧,Cursor里的方法非常多,常用的有:
boolean moveToPosition(position)將指針移動到某記錄
getColumnIndex(Contacts.People.NAME)按列名獲取id
int getCount()獲取記錄總數
boolean requery()重新查詢
boolean isAfterLast()指針是否在末尾
boolean isBeforeFirst()時候是開始位置
boolean isFirst()是否是第一條記錄
boolean isLast()是否是最後一條記錄
boolean moveToFirst()、 boolean moveToLast()、 boolean moveToNext()同moveToPosition(position)
4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)
也許你會奇怪了,之前我還說過關於資料庫的操作都在database和database.sqlite包下,為什麼把一個Adapter放到這里,如果你用過Android的SQLite3,你一定會知道
,這是因為我們對資料庫的操作會經常跟列表聯系起來
經常有朋友會在這出錯,但其實也很簡單
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.list,
myCursor,
new String[] {DB.TEXT1,DB. TEXT2},
new int[]{ R.id.list1,R.id.listText2 });
my.setAdapter(adapter);
一共5個參數,具體如下:
參數1:Content
參數2:布局
參數3:Cursor游標對象
參數4:顯示的欄位,傳入String[]
參數5:顯示欄位使用的組件,傳入int[],該數組中是TextView組件的id
到這里,關於資料庫的操作就結束了,但是到目前為止我只做了翻譯的工作,有些同學可能還是沒有掌握,放心,下面我們一起順著正常開發的思路理清一下頭緒!
前面的只是幫沒做過的朋友做下普及,下面才是你真正需要的!
一、寫一個類繼承SQLiteOpenHelpe
public class DatabaseHelper extends SQLiteOpenHelper
構造方法:
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
在onCreate方法里寫建表的操作
public void onCreate(SQLiteDatabase db) {
String sql = 「CREATE TABLE tb_test (_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,class_jb TEXT NOT NULL,class_ysbj TEXT NOT NULL,title TEXT NOT NULL,content_ysbj TEXT NOT NULL)」;
db.execSQL(sql);//需要異常捕獲
}
在onUpgrade方法里刪除現有表,然後手動調用onCtreate創建表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = 「drop table 」+tbname;
db.execSQL(sql);
onCreate(db);
}
對表增、刪、查、改的方法,這里用的是SQLiteOpenHelper提供的方法,也可以用sql語句實現,都是一樣的
關於獲取可讀/可寫SQLiteDatabase,我不說大家也應該會想到,只有查找才會用到可讀的SQLiteDatabase
/**
* 添加數據
*/
public long insert(String tname, int tage, String ttel){
SQLiteDatabase db= getWritableDatabase();//獲取可寫SQLiteDatabase對象
//ContentValues類似map,存入的是鍵值對
ContentValues contentValues = new ContentValues();
contentValues.put(「tname」, tname);
contentValues.put(「tage」, tage);
contentValues.put(「ttel」, ttel);
return db.insert(tbname, null, contentValues);
}
/**
* 刪除記錄
* @param _id
*/
public void delete(String _id){
SQLiteDatabase db= getWritableDatabase();
db.delete(tbname,
「_id=?」,
new String[]{_id});
}
/**
* 更新記錄的,跟插入的很像
*/
public void update(String _id,String tname, int tage, String ttel){
SQLiteDatabase db= getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(「tname」, tname);
contentValues.put(「tage」, tage);
contentValues.put(「ttel」, ttel);
db.update(tbname, contentValues,
「_id=?」,
new String[]{_id});
}
/**
* 查詢所有數據
* @return Cursor
*/
public Cursor select(){
SQLiteDatabase db = getReadableDatabase();
return db.query(
tbname,
new String[]{「_id」,「tname」,「tage」,「ttel」,「taddr」},
null,
null, null, null, 「_id desc」);
}
關於db.query方法的參數,有很多,為了防止大家弄亂,我簡單說一下
參數1:表名
參數2:返回數據包含的列信息,String數組里放的都是列名
參數3:相當於sql里的where,sql里where後寫的內容放到這就行了,例如:tage>?
參數4:如果你在參數3里寫了?(知道我為什麼寫tage>?了吧),那個這里就是代替?的值 接上例:new String[]{「30」}
參數5:分組,不解釋了,不想分組就傳null
參數6:having,想不起來的看看SQL
參數7:orderBy排序
到這里,你已經完成了最多的第一步!我們來看看都用到了那些類:
SQLiteOpenHelper我們繼承使用的
SQLiteDatabase增刪查改都離不開它,即使你直接用sql語句,也要用到execSQL(sql)
二、這里無非是對DatabaseHelper類定義方法的調用,沒什麼可說的,不過我還是對查詢再嘮叨幾句吧
Android查詢出來的結果一Cursor形式返回
cursor = sqLiteHelper.select();//是不是很簡單?
查詢出來的cursor一般會顯示在listView中,這就要用到剛才提到的SimpleCursorAdapter
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.list_row,
cursor,
new String[]{「tname」,「ttel」},
new int[]{R.id.TextView01,R.id.TextView02}
);
裡面帶有實例。自己好好學習吧!