工具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类代码(待优化)

  1. package com.vocus.jdbctest
  2.  
  3. import java.lang.Exception
  4. import java.sql.Connection
  5. import java.sql.DriverManager
  6.  
  7. class Util {
  8. var conn:Connection?=null
  9. val driver="com.mysql.jdbc.Drvier"
  10. val url="jdbc:mysql://10.0.2.2:3306/test"
  11. val user="root" //root用户
  12. val psd="rs123456" //自己的密码
  13. fun connection():Connection?{
  14. try{
  15. Class.forName(driver).newInstance()
  16. }catch(e:Exception){
  17. e.printStackTrace()
  18. }
  19. try{
  20. conn=DriverManager.getConnection(url,user,psd)
  21. }catch (e:Exception){
  22. e.printStackTrace()
  23. }
  24. return conn
  25. }
  26. }

(3)针对数据库表customer的查询(待优化)

  1. class Customer {
  2. open val username:String?=null //权宜之计
  3. open val password:String?=null
  4. open val email:String?=null
  5.  
  6. override fun toString(): String {
  7. return "Customer(username=$username, password=$password, email=$email)"
  8. }
  9.  
  10. }
  1. package com.vocus.jdbctest
  2.  
  3. import java.lang.Exception
  4.  
  5. class CustomerForQuery {
  6. fun query(sql: String, vararg args: Any): Customer?{//sql语句如select username from customer where id=?,args不确定参数
  7.  
  8. try {
  9. // Thread({
  10. var conn = Util().connection()
  11. var ps = conn!!.prepareStatement(sql)
  12.  
  13. for (i in 0 until args.size) {//设置sql参数
  14. ps.setObject(i + 1, args[i])
  15. }
  16.  
  17. var resultSet = ps.executeQuery()//获得查询结果集
  18.  
  19. var rsmd = resultSet.getMetaData()
  20. var columns = rsmd.columnCount //获得结果集列数
  21.  
  22. if (resultSet.next()) {
  23. var cust = Customer()
  24. for (i in 0 until columns) {
  25. var value = resultSet.getObject(i + 1) //获得查询的值
  26. var columnsName = rsmd.getColumnName(i + 1) //获得值对应的列名,即字段名
  27. //println("查询结果,${value}+${columnsName}")
  28. val field = Customer::class.java.getDeclaredField(columnsName)
  29. field.setAccessible(true)
  30. field.set(cust, value)
  31. }
  32. println("已执行查询语句...")
  33. return cust
  34. }
  35. // }).start()
  36. } catch (e: Exception) {
  37. e.printStackTrace()
  38. }
  39. return null
  40. }
  41. }

(4)添加按钮点击监听执行

  1. package com.vocus.jdbctest
  2. import android.os.Bundle
  3. import androidx.appcompat.app.AppCompatActivity
  4. import kotlinx.android.synthetic.main.activity_main.*
  5. import kotlin.concurrent.thread
  6.  
  7. class MainActivity : AppCompatActivity() {
  8.  
  9. override fun onCreate(savedInstanceState: Bundle?) {
  10. super.onCreate(savedInstanceState)
  11. setContentView(R.layout.activity_main)
  12.  
  13. connBtn.setOnClickListener {
  14. thread{
  15. var cust = CustomerForQuery().query("select username from customer where id=?", "3")
  16. println(cust)
  17. }
  18. }
  19. }
  20.  
  21. }

 (5)优化关闭连接,引入泛型,实现针对不同表的通用查询等

------>DAO模式

(1)建立DAO抽象类(BaseDAO)

对于数据库的增删改查等基本操作封装在此类中

(2)针对具体的表提供接口(CustomerDAO)

用于说明具体的需求

  1. interface CustomerDAO {
  2. //查询用户名是否存在
  3. fun logcheck(username:String,password:String):Boolean
  4. }

(3)实现接口的类(CustomerDAOimpl)

用于需求的实现

  1. class CustomerDAOImpl :BaseDAO(),CustomerDAO {
  2. override fun logcheck(username: String, password: String): Boolean {
  3. var cust:Customer?=null
  4. try{
  5. cust=query("select password from customer where username=?",username)
  6. }catch (e:Exception){
  7. println("用户名不存在...")
  8. return false
  9. }
  10. if(cust!!.password==password){
  11. return true
  12. }
  13. else{
  14. println("账号和用户名不匹配...")
  15. return false
  16. }
  17. }
  18. }
  1. class MainActivity : AppCompatActivity() {
  2.  
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. super.onCreate(savedInstanceState)
  5. setContentView(R.layout.activity_main)
  6.  
  7. connBtn.setOnClickListener {
  8. thread{
  9. //var cust = CustomerForQuery().query("select password from customer where username=?", "张三")
  10. //println(cust)
  11. var exist=CustomerDAOImpl().logcheck("张三","123456")
  12. println("exist?:${exist}")
  13. }
  14. }
  15. }
  16.  
  17. }

接2.17更新

现在开发后台基本上很少用kotlin,最近尝试做后台,所以用到的jdbc都采用java

实现数据库表的通用查询,以及数据库表通用查询下的返回多条数据,使用到泛型,测试代码如下

->数据库表查询通用方法

  1. public <T> T queryForTable(Class<T> clazz,String sql,Object ...args){
  2. Connection conn=null;
  3. PreparedStatement statement=null;
  4. ResultSet rs=null;
  5. try{
  6. conn=JdbcUtil.connection();
  7. statement=conn.prepareStatement(sql);
  8. for(int i=0;i<args.length;i++){
  9. statement.setObject(i+1,args[0]);
  10. }
  11.  
  12. rs=statement.executeQuery();
  13. //获得结果集原数据
  14. ResultSetMetaData rsmd=rs.getMetaData();
  15. int columnCount=rsmd.getColumnCount();
  16. if(rs.next()){
  17. T t=clazz.newInstance();
  18. for(int i=0;i<columnCount;i++){
  19. Object columnValue=rs.getObject(i+1);
  20. String columnName=rsmd.getColumnName(i+1);
  21. //把查询到的每一行数据,映射到java类
  22. Field field=clazz.getDeclaredField(columnName);
  23. field.setAccessible(true);
  24. field.set(t,columnValue);
  25. }
  26. return t;
  27.  
  28. }
  29.  
  30. }catch (Exception e){
  31. e.printStackTrace();
  32. }finally {
  33. new JdbcUtil().closeResource(conn,statement,rs);
  34. }
  35.  
  36. return null;
  37. }

->返回多条数据

  1. public <T> ArrayList<T> query(Class<T> clazz,String sql,Object ...args) {
  2. ResultSet rs = null;
  3. PreparedStatement statement = null;
  4. Connection conn = new JdbcUtil().connection();
  5. ArrayList<T> customersList=new ArrayList<T>();//对象列表
  6. try {
  7.  
  8. //String sql = "select * from customer limit 0,10;";
  9. statement = conn.prepareStatement(sql);
  10. for(int i=0;i<args.length;i++){
  11. statement.setObject(i+1,args[i]);
  12. }
  13.  
  14. rs = statement.executeQuery();
  15.  
  16. ResultSetMetaData rsmd=rs.getMetaData();
  17. int columnCount=rsmd.getColumnCount();
  18.  
  19. for (int j=0;rs.next();j++) {
  20. T t=clazz.newInstance();
  21. for(int i=0;i<columnCount;i++){
  22. String columnName=rsmd.getColumnName(i+1);
  23. Object columnValue=rs.getObject(i+1);
  24. Field field=clazz.getDeclaredField(columnName);
  25. field.setAccessible(true);
  26. field.set(t,columnValue);
  27. }
  28. customersList.add(t);
  29. }
  30. } catch (
  31. SQLException | NoSuchFieldException | IllegalAccessException | InstantiationException e) {
  32. e.printStackTrace();
  33. } finally {
  34. new JdbcUtil().closeResource(conn, statement, rs);
  35. }
  36. return customersList;
  37. }

JDBC<android studio,kotlin>的更多相关文章

  1. Google Android Studio Kotlin 开发环境配置

    Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对Kotlin的重视,本文就介绍一下Android Studio下的Kot ...

  2. Google Android Studio Kotlin

    Google Android Studio Kotlin 开发环境配置 Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对 ...

  3. Android Studio(Kotlin)之RecyclerView

    RecyclerView应该是ListView的增强版. RecyclerView与ListView的区别(我认为的): RecyclerView的性能比ListView高 RecyclerView支 ...

  4. android studio使用JDBC访问mysql数据库(Kotlin方法)

    工具:mysql-connector-java-5.1.48.jar,mysql version 5.6.19,android studio内置模拟器 1.connection import java ...

  5. Android Studio不更新到最新版使用Kotlin

    第一步:安装Kotlin插件 打开Settings面板,找到Plugins选项,点击Browse repositories(浏览仓库),输入“Kotlin”查找,然后安装即可.安装完成之后需要重启An ...

  6. Android Studio中创建Kotlin For Android项目

    Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...

  7. 浅谈Kotlin(一):简介及Android Studio中配置

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言: 今日新闻:谷 ...

  8. Android Studio安装Kotlin插件

    1 Kotlin语言介绍 Kotlin 是 JetBrains 在 2010 年推出的基于 JVM 的新编程语言,是一种新的静态类型编程语言.开发者称,设计它的目的是避免 Java 语言编程中的一些难 ...

  9. Android Studio使用JDBC远程连接mysql的注意事项(附示例)

    JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...

随机推荐

  1. 吴裕雄--天生自然java开发常用类库学习笔记:SortedSet接口

    import java.util.SortedSet ; import java.util.TreeSet ; public class TreeSetDemo05{ public static vo ...

  2. chatdet用法

    1. 下载chardet 2. 在命令提示符里转到chardet的存放目录,执行python setup.py install 3. 在代码中用 import chardet 导入模块 4. 用法:c ...

  3. HihoCoder第十三周:最近公共祖先 一

    #1062 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 同城那样神奇,但这个网站仍然让小Ho乐在其中,但这是为什么呢? "为什么呢?& ...

  4. 文件上传报错java.io.FileNotFoundException拒绝访问

    局部代码如下: File tempFile = new File("G:/tempfileDir"+"/"+fileName); if(!tempFile.ex ...

  5. 安装redis cluster时:undefined method `invoke_with_build_args' for nil:NilClass

    gem install -l redis-3.3.3.gem ERROR: Loading command: install (LoadError) cannot load such file -- ...

  6. 指令——cat

    作用1:cat有直接打开一个文件的功能,只看不用编辑. 语法:#cat 文件的路径 选项:-n, --number 对输出的所有行编号. 如:用cat查看/etc/passwd [root@local ...

  7. truncate table (tablename )表明

    Truncate是SQL中的一个删除数据表内容的语句,用法是: 语法 TRUNCATE TABLE name 参数 name 是要截断的表的名称或要删除其全部行的表的名称. 下面是对Truncate语 ...

  8. ACM-单词接龙

    题目描述:单词接龙 问题描述:单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们己知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙" 中出现 ...

  9. 【pwnable.kr】 mistake

    又一道pwnable,我还没放弃.. ssh mistake@pwnable.kr -p2222 (pw:guest) 源代码如下: #include <stdio.h> #include ...

  10. Redis获取缓存异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX

    Redis获取缓存异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX. 出现这种异常,我需要自 ...