此文章介绍Android应用中如何连接服务器上的Oracle数据库。
注意:Oracle和sqlserver不同在于,操作数据库的SQL语句,对于表的操作要加上
数据库.表名
,如要查询TEST
数据库下的T_USER_TEMP
表,应写成select * from TEST.T_USER_TEMP
1. 下载jar包
Android使用官网下载的版本,均无法匹配,一直报错缺少类,最终使用了网上的一个版本,连接可正常(
10.2.0.1.0
,官网找不到此版本了,应该是比较旧了)
- 此处使用
10.2.0.1.0
版本,ojdbc14.jar
2. 引入JDTS到工程中
- 复制
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地址:端口号:服务名"
- 定义数据库连接用户名和密码
private val user = "test" private val password = "123456"
- 连接数据库
Class.forName ("oracle.jdbc.driver.OracleDriver");//在最初的时候加载,比如onCreate方法中 runBlocking(Dispatchers.IO) { con = DriverManager.getConnection(dbConnectUrl, user, password)//需要执行在非主线程中 }
4. 增
使用
executeUpdate
进行新增,并接收受影响行数。
注意:不可以在主线程执行。
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("插入数据结果===")
.append(result.await())
}
5. 删
使用
executeUpdate
进行删除,并接收受影响行数。
注意:不可以在主线程执行。
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("删除数据结果===")
.append(result.await())
}
6. 改
使用
executeUpdate
进行修改,并接收受影响行数。
注意:不可以在主线程执行。
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("更新数据结果===")
.append(result.await())
}
7. 查
使用
executeQuery
查询数据,并接收受影响行数。
注意:不可以在主线程执行。
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对应表中的第一列内容
sbContent.append(result.getString(1)).append(",").append(result.getString(2))
.append(",\n")
}
sbContent.toString()
}
result.await()
// 输出查询内容
}
8. 附
源码:点击下载