JDBC<android studio,kotlin>
工具:mysql 5.6.19,mysql-connector-java-5.1.48.jar,android stuido&android studio自带模拟器
1.在mysql数据库中新建表customer,并创建相关字段
SQL命令如下
create table customer(username varchar(20),password varchar(20),email varchar(40));
alter table customer add id int(5) auto_increment primary key;
mysql> insert into customer(username,password,email) values('张三','123456','zhangsan@5429.com');
insert into customer(username,password,email) values('李四','234567','lisi@5429.com');
insert into customer(username,password,email) values('王五','345678','wangwu@5429.com');
insert into customer(username,password,email) values('陈六','456789','chenliu@5429.com');
select * from customer;
2.JDBC连接数据库
------>页面布局
------>设置按钮点击监听
------>导入mysql-connector-java-5.1.48.jar包,搜索下载即可
复制粘贴到lib文件下,右键,add as library...
------>JDBC连接数据库
(1),添加网络许可<uses-permission android:name="android.permission.INTERNET"/>
(2)Util类代码(待优化)
package com.vocus.jdbctest import java.lang.Exception
import java.sql.Connection
import java.sql.DriverManager class Util {
var conn:Connection?=null
val driver="com.mysql.jdbc.Drvier"
val url="jdbc:mysql://10.0.2.2:3306/test"
val user="root" //root用户
val psd="rs123456" //自己的密码
fun connection():Connection?{
try{
Class.forName(driver).newInstance()
}catch(e:Exception){
e.printStackTrace()
}
try{
conn=DriverManager.getConnection(url,user,psd)
}catch (e:Exception){
e.printStackTrace()
}
return conn
}
}
(3)针对数据库表customer的查询(待优化)
class Customer {
open val username:String?=null //权宜之计
open val password:String?=null
open val email:String?=null override fun toString(): String {
return "Customer(username=$username, password=$password, email=$email)"
} }
package com.vocus.jdbctest import java.lang.Exception class CustomerForQuery {
fun query(sql: String, vararg args: Any): Customer?{//sql语句如select username from customer where id=?,args不确定参数 try {
// Thread({
var conn = Util().connection()
var ps = conn!!.prepareStatement(sql) for (i in 0 until args.size) {//设置sql参数
ps.setObject(i + 1, args[i])
} var resultSet = ps.executeQuery()//获得查询结果集 var rsmd = resultSet.getMetaData()
var columns = rsmd.columnCount //获得结果集列数 if (resultSet.next()) {
var cust = Customer()
for (i in 0 until columns) {
var value = resultSet.getObject(i + 1) //获得查询的值
var columnsName = rsmd.getColumnName(i + 1) //获得值对应的列名,即字段名
//println("查询结果,${value}+${columnsName}")
val field = Customer::class.java.getDeclaredField(columnsName)
field.setAccessible(true)
field.set(cust, value)
}
println("已执行查询语句...")
return cust
}
// }).start()
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
}
(4)添加按钮点击监听执行
package com.vocus.jdbctest
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.concurrent.thread class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) connBtn.setOnClickListener {
thread{
var cust = CustomerForQuery().query("select username from customer where id=?", "3")
println(cust)
}
}
} }
(5)优化关闭连接,引入泛型,实现针对不同表的通用查询等
------>DAO模式
(1)建立DAO抽象类(BaseDAO)
对于数据库的增删改查等基本操作封装在此类中
(2)针对具体的表提供接口(CustomerDAO)
用于说明具体的需求
interface CustomerDAO {
//查询用户名是否存在
fun logcheck(username:String,password:String):Boolean
}
(3)实现接口的类(CustomerDAOimpl)
用于需求的实现
class CustomerDAOImpl :BaseDAO(),CustomerDAO {
override fun logcheck(username: String, password: String): Boolean {
var cust:Customer?=null
try{
cust=query("select password from customer where username=?",username)
}catch (e:Exception){
println("用户名不存在...")
return false
}
if(cust!!.password==password){
return true
}
else{
println("账号和用户名不匹配...")
return false
}
}
}
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) connBtn.setOnClickListener {
thread{
//var cust = CustomerForQuery().query("select password from customer where username=?", "张三")
//println(cust)
var exist=CustomerDAOImpl().logcheck("张三","123456")
println("exist?:${exist}")
}
}
} }
接2.17更新
现在开发后台基本上很少用kotlin,最近尝试做后台,所以用到的jdbc都采用java
实现数据库表的通用查询,以及数据库表通用查询下的返回多条数据,使用到泛型,测试代码如下
->数据库表查询通用方法
public <T> T queryForTable(Class<T> clazz,String sql,Object ...args){
Connection conn=null;
PreparedStatement statement=null;
ResultSet rs=null;
try{
conn=JdbcUtil.connection();
statement=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
statement.setObject(i+1,args[0]);
} rs=statement.executeQuery();
//获得结果集原数据
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
if(rs.next()){
T t=clazz.newInstance();
for(int i=0;i<columnCount;i++){
Object columnValue=rs.getObject(i+1);
String columnName=rsmd.getColumnName(i+1);
//把查询到的每一行数据,映射到java类
Field field=clazz.getDeclaredField(columnName);
field.setAccessible(true);
field.set(t,columnValue);
}
return t; } }catch (Exception e){
e.printStackTrace();
}finally {
new JdbcUtil().closeResource(conn,statement,rs);
} return null;
}
->返回多条数据
public <T> ArrayList<T> query(Class<T> clazz,String sql,Object ...args) {
ResultSet rs = null;
PreparedStatement statement = null;
Connection conn = new JdbcUtil().connection();
ArrayList<T> customersList=new ArrayList<T>();//对象列表
try { //String sql = "select * from customer limit 0,10;";
statement = conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
statement.setObject(i+1,args[i]);
} rs = statement.executeQuery(); ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount(); for (int j=0;rs.next();j++) {
T t=clazz.newInstance();
for(int i=0;i<columnCount;i++){
String columnName=rsmd.getColumnName(i+1);
Object columnValue=rs.getObject(i+1);
Field field=clazz.getDeclaredField(columnName);
field.setAccessible(true);
field.set(t,columnValue);
}
customersList.add(t);
}
} catch (
SQLException | NoSuchFieldException | IllegalAccessException | InstantiationException e) {
e.printStackTrace();
} finally {
new JdbcUtil().closeResource(conn, statement, rs);
}
return customersList;
}
JDBC<android studio,kotlin>的更多相关文章
- Google Android Studio Kotlin 开发环境配置
Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对Kotlin的重视,本文就介绍一下Android Studio下的Kot ...
- Google Android Studio Kotlin
Google Android Studio Kotlin 开发环境配置 Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对 ...
- Android Studio(Kotlin)之RecyclerView
RecyclerView应该是ListView的增强版. RecyclerView与ListView的区别(我认为的): RecyclerView的性能比ListView高 RecyclerView支 ...
- android studio使用JDBC访问mysql数据库(Kotlin方法)
工具:mysql-connector-java-5.1.48.jar,mysql version 5.6.19,android studio内置模拟器 1.connection import java ...
- Android Studio不更新到最新版使用Kotlin
第一步:安装Kotlin插件 打开Settings面板,找到Plugins选项,点击Browse repositories(浏览仓库),输入“Kotlin”查找,然后安装即可.安装完成之后需要重启An ...
- Android Studio中创建Kotlin For Android项目
Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...
- 浅谈Kotlin(一):简介及Android Studio中配置
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言: 今日新闻:谷 ...
- Android Studio安装Kotlin插件
1 Kotlin语言介绍 Kotlin 是 JetBrains 在 2010 年推出的基于 JVM 的新编程语言,是一种新的静态类型编程语言.开发者称,设计它的目的是避免 Java 语言编程中的一些难 ...
- Android Studio使用JDBC远程连接mysql的注意事项(附示例)
JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...
随机推荐
- Django(二) 模板:基本使用、模板语法、模板继承
一.模板的使用实战 接:https://blog.csdn.net/u010132177/article/details/103788677 参考:https://docs.djangoproject ...
- QEMU 配置网络
背景 为了 实现 uboot 中连接上 QEMU-host 的网络. 非常奇怪,本人的 系统中 存在/dev/net/tun驱动,但是 lsmod | grep tun 却没有任何结果,所以实际上,这 ...
- UVA - 10891 Game of Sum (区间dp)
题意:AB两人分别拿一列n个数字,只能从左端或右端拿,不能同时从两端拿,可拿一个或多个,问在两人尽可能多拿的情况下,A最多比B多拿多少. 分析: 1.枚举先手拿的分界线,要么从左端拿,要么从右端拿,比 ...
- MSDN原版系统镜像ISO下载站
官网 网址1:http://www.imsdn.cn/ Windows 10 最新版本 1909 正式版 ISO 镜像下载 (微软 MSDN / VL 官方原版系统) 网址2:https://www. ...
- 八十三、SAP中的ALV创建之二,ALV相关的类型池定义
一.与ALV相关的类型都是在TYPE-POOLS:SLIS中.我们来到SE11 二.常用的定义有fieldca和layout等,用于显示字段,和控制信息数据等. 三.我们以VBAK表为例,用ALV输出 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 数据结构
C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项. 结构用于表示一条记录,假设想要跟踪图书馆中书本的动态,可能需要 ...
- spring boot集成mybatis(1)
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- Docker每次启动容器,IP及hosts指定
原文链接:https://blog.csdn.net/u012834750/article/details/80508464 前言 每次在使用Docker启动Hadoop集群的时候,都需要重新绑定下网 ...
- python_生成器小结
#__author : "ziChuan" #__data : 2019/7/19 import random # print(random.random()) # print(r ...
- 2.2 学习总结 之 servlet 的两次抽取
说在前面 昨天 完成了文件上出的学习和实践 今天 学习servlet的两次抽取,以加快编写工程的速度 一.servlet 抽取的原因: 刚刚学习使用servlet写后台,往往只使用一个servlet来 ...