此文章介紹Android應(yīng)用中如何連接服務(wù)器上的Oracle數(shù)據(jù)庫么介。
注意:Oracle和sqlserver不同在于,操作數(shù)據(jù)庫的SQL語句,對于表的操作要加上
數(shù)據(jù)庫.表名
,如要查詢TEST
數(shù)據(jù)庫下的T_USER_TEMP
表核行,應(yīng)寫成select * from TEST.T_USER_TEMP
1. 下載jar包
Android使用官網(wǎng)下載的版本绵脯,均無法匹配妙黍,一直報錯缺少類,最終使用了網(wǎng)上的一個版本浇借,連接可正常(
10.2.0.1.0
肉康,官網(wǎng)找不到此版本了,應(yīng)該是比較舊了)
- 此處使用
10.2.0.1.0
版本献丑,ojdbc14.jar
2. 引入JDTS到工程中
- 復(fù)制
ojdbc14.jar
文件到app/libs/jtds-1.3.1.jar
中筐摘; - 右鍵
ojdbc14.jar
柳畔,選擇Add As Library
罗捎,將jar
包引入到工程中捉偏;
3. 連接Oracle
- 定義連接
url
,private val dbConnectUrl = "jdbc:oracle:thin:@IP地址:端口號:服務(wù)名"
- 定義數(shù)據(jù)庫連接用戶名和密碼
private val user = "test" private val password = "123456"
- 連接數(shù)據(jù)庫
Class.forName ("oracle.jdbc.driver.OracleDriver");//在最初的時候加載挤巡,比如onCreate方法中 runBlocking(Dispatchers.IO) { con = DriverManager.getConnection(dbConnectUrl, user, password)//需要執(zhí)行在非主線程中 }
4. 增
使用
executeUpdate
進(jìn)行新增母廷,并接收受影響行數(shù)。
注意:不可以在主線程執(zhí)行。
val sbContent = StringBuilder()
runBlocking {
val result = async(Dispatchers.IO) {
val stmt = con?.createStatement()
val sql = "INSERT INTO TEST.T_USER_TEMP VALUES(100,'旺旺',15)"
try {
val result = stmt?.executeUpdate(sql) as Int
result > 0
} catch (e: Exception) {
false
}
}
sbContent.append("插入數(shù)據(jù)結(jié)果===")
.append(result.await())
}
5. 刪
使用
executeUpdate
進(jìn)行刪除沥割,并接收受影響行數(shù)。
注意:不可以在主線程執(zhí)行。
val sbContent = StringBuilder()
runBlocking {
val result = async(Dispatchers.IO) {
val stmt = con?.createStatement()
val sql = "delete from TEST.T_USER_TEMP where Name='旺旺'"
try {
val result = stmt?.executeUpdate(sql) as Int
result > 0
} catch (e: Exception) {
false
}
}
sbContent.append("刪除數(shù)據(jù)結(jié)果===")
.append(result.await())
}
6. 改
使用
executeUpdate
進(jìn)行修改,并接收受影響行數(shù)耻陕。
注意:不可以在主線程執(zhí)行岛心。
val sbContent = StringBuilder()
runBlocking {
val result = async(Dispatchers.IO) {
val stmt = con?.createStatement()
val sql = "UPDATE TEST.T_USER_TEMP SET AGE=20 where Name='旺旺'"
try {
val result = stmt?.executeUpdate(sql) as Int
result > 0
} catch (e: SQLException) {
false
}
}
sbContent.append("更新數(shù)據(jù)結(jié)果===")
.append(result.await())
}
7. 查
使用
executeQuery
查詢數(shù)據(jù),并接收受影響行數(shù)。
注意:不可以在主線程執(zhí)行祭阀。
val sbContent = StringBuilder()
runBlocking {
val result = async(Dispatchers.IO) {
val stmt = con?.createStatement()
val sql = "SELECT * FROM TEST.T_USER_TEMP"
val result = stmt?.executeQuery(sql)
while (result?.next() == true) {
//注意赢底,索引從1開始洽损,索引1對應(yīng)表中的第一列內(nèi)容
sbContent.append(result.getString(1)).append(",").append(result.getString(2))
.append(",\n")
}
sbContent.toString()
}
result.await()
// 輸出查詢內(nèi)容
}
8. 附
源碼:點擊下載