Android 之JDBC
JDBC(Java DataBase Connectivity)是使用 Java 存取数据库系统的标准解决方案,它将不同数据库间各自差异API与标准 SQL语句分开看待,实现数据库无关的 Java操作接口。
JDBC程序访问数据库的步骤
- package com.jdbc.dbUtils;
- import java.lang.reflect.Field;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.jdbc.dbUtils.dormain.UserInfo;
- public class JDBCutils {
- private final String USERNAME="root";
- private final String PASSWORD="admin";
- private final String DRIVER="com.mysql.jdbc.Driver";
- private final String URL="jdbc:mysql://localhost:3306/mydb";
- private Connection connection;
- private PreparedStatement preparedStatement;
- private ResultSet resultSet;
- public JDBCutils() {
- try {
- Class.forName(DRIVER);//注册驱动
- System.out.println("成功注册驱动");
- } catch (Exception e) {
- // TODO: handle exception
- }
- }
- public Connection getConnection(){
- try {
- connection=DriverManager.getConnection(URL,USERNAME, PASSWORD);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return connection;
- }
- //增删改
- public boolean updateByPreparedStatement(String sql,List<Object> params)throws SQLException {
- boolean flag=false;
- int result=-;//执行增删改操作的时候所影响的行数
- int index=;//占位符的第一个位置
- preparedStatement=connection.prepareStatement(sql);
- if(params!=null&&!params.isEmpty()){
- for (int i = ; i < params.size(); i++) {
- preparedStatement.setObject(index++, params.get(i));
- }
- }
- result=preparedStatement.executeUpdate();
- flag=result>?true:false;
- return flag;
- }
- //查询 返回单条记录
- public Map<String,Object> findSimpleResult(String sql,List<Object> params) throws SQLException{
- Map<String,Object> map=new HashMap<String,Object>();
- int index=;//占位符的第一个位置
- preparedStatement=connection.prepareStatement(sql);
- if(params!=null&&!params.isEmpty()){
- for (int i = ; i < params.size(); i++) {
- preparedStatement.setObject(index++, params.get(i));
- }
- }
- resultSet=preparedStatement.executeQuery();
- ResultSetMetaData resultSetMetaData=resultSet.getMetaData();
- int col_len=resultSetMetaData.getColumnCount();//得到数据库表的列
- while(resultSet.next()){
- for (int i = ; i < col_len; i++) {
- String col_name=resultSetMetaData.getColumnName(i+);
- Object col_val=resultSet.getObject(col_name);
- if(col_val==null){
- col_val="";
- }
- map.put(col_name,col_val);
- }
- }
- return map;
- }
- //查询 返回多条记录
- public List<Map<String,Object>> findMultiResult(String sql,List<Object> params) throws SQLException{
- List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
- int index=;//占位符的第一个位置
- preparedStatement=connection.prepareStatement(sql);
- if(params!=null&&!params.isEmpty()){
- for (int i = ; i < params.size(); i++) {
- preparedStatement.setObject(index++, params.get(i));
- }
- }
- resultSet=preparedStatement.executeQuery();
- ResultSetMetaData resultSetMetaData=resultSet.getMetaData();
- int col_len=resultSetMetaData.getColumnCount();//得到数据库表的列名
- while(resultSet.next()){
- Map<String,Object>map=new HashMap<String,Object>();
- for (int i = ; i < col_len; i++) {
- String col_name=resultSetMetaData.getColumnName(i+);
- Object col_val=resultSet.getObject(col_name);
- if(col_val==null){
- col_val="";
- }
- map.put(col_name,col_val);
- }
- list.add(map);
- }
- return list;
- }
- //jdbc的封装也可以采用反射机制
- public <T> T findSimpReflectResult(String sql,List<Object> params,Class<T> cls) throws Exception{
- T resObj=null;
- int index=;//占位符的第一个位置
- preparedStatement=connection.prepareStatement(sql);
- if(params!=null&&!params.isEmpty()){
- for (int i = ; i < params.size(); i++) {
- preparedStatement.setObject(index++, params.get(i));
- }
- }
- resultSet=preparedStatement.executeQuery();
- ResultSetMetaData resultSetMetaData=resultSet.getMetaData();
- int col_len=resultSetMetaData.getColumnCount();//得到数据库表的列名
- while(resultSet.next()){
- resObj=cls.newInstance();//通过反射机制创建实例
- for (int i = ; i < col_len; i++) {
- String col_name=resultSetMetaData.getColumnName(i+);
- Object col_val=resultSet.getObject(col_name);
- if(col_val==null){
- col_val="";
- }
- Field field=cls.getDeclaredField(col_name);
- field.setAccessible(true);//打开访问javabean的私有权限
- field.set(resObj, col_val);
- }
- }
- return resObj;
- }
- public <T> List<T> findMultiReflectResult(String sql,List<Object> params,Class<T> cls) throws Exception{
- List<T> list=new ArrayList<T>();
- int index=;//占位符的第一个位置
- preparedStatement=connection.prepareStatement(sql);
- if(params!=null&&!params.isEmpty()){
- for (int i = ; i < params.size(); i++) {
- preparedStatement.setObject(index++, params.get(i));
- }
- }
- resultSet=preparedStatement.executeQuery();
- ResultSetMetaData resultSetMetaData=resultSet.getMetaData();
- int col_len=resultSetMetaData.getColumnCount();//得到数据库表的列名
- while(resultSet.next()){
- T resObj=cls.newInstance();//通过反射机制创建实例
- for (int i = ; i < col_len; i++) {
- String col_name=resultSetMetaData.getColumnName(i+);
- Object col_val=resultSet.getObject(col_name);
- if(col_val==null){
- col_val="";
- }
- Field field=cls.getDeclaredField(col_name);
- field.setAccessible(true);//打开访问javabean的私有权限
- field.set(resObj, col_val);
- }
- list.add(resObj);
- }
- return list;
- }
- public void releaseConnection() throws SQLException{
- if(resultSet!=null){
- resultSet.close();
- }
- if(preparedStatement!=null){
- preparedStatement.close();
- }
- if(connection!=null){
- connection.close();
- }
- }
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- JDBCutils jdbc=new JDBCutils();
- jdbc.getConnection();
- List<Object> params=new ArrayList<Object>();
- /* params.add("fjf");
- params.add("123");
- params.add("fanjingfang");
- String sql="insert into userinfo(username,password,realname)values(?,?,?)";
- boolean flag=jdbc.updateByPreparedStatement(sql, params);
- System.out.println(flag);
- params.add(1);
- String sql="select * from userinfo where id=?";
- Map<String,Object> m=jdbc.findSimpleResult(sql, params);
- System.out.println(m);*/
- /*String sql2="select * from userinfo ";
- List<Map<String,Object>> list=jdbc.findMultiResult(sql2, null);
- System.out.println(list);*/
- /* params.add(1);
- String sql3="select * from userinfo where id=? ";
- UserInfo u=jdbc.findSimpReflectResult(sql3, params,UserInfo.class);
- System.out.println(u);*/
- String sql4="select * from userinfo ";
- List<UserInfo> list=jdbc.findMultiReflectResult(sql4, null,UserInfo.class);
- System.out.println(list);
- }
- }
Android 之JDBC的更多相关文章
- Android开发JDBC连接mysql数据库导入驱动方法
在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ...
- Android使用JDBC连接数据库
连接数据库是安卓开发中几乎不可避免的一项工作,稍有规模的应用通常都需要使用数据库来存储用户数据.对于本地数据库当然可以使用sqlite,而对于多用户线上应用,则一般需要配备云端数据库.其中比较常用且开 ...
- 13--网页,网站,微信公众号基础入门(PHP获取网页的get请求)
https://www.cnblogs.com/yangfengwu/p/11148976.html 大家在访问网页的时候有没有注意一件事情 现在咱来看这种哈 现在咱做个功能哈,类似于这样 长话短说 ...
- Android学习笔记————利用JDBC连接服务器数据库
/******************************************************************************************** * auth ...
- Android Studio使用JDBC远程连接mysql的注意事项(附示例)
JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...
- android连接Mysql数据库之JDBC方式
一.创建一个数据库和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子. 首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PH ...
- Android应用通过JDBC直连阿里云MySQL数据库
1.设置白名单,获取外网连接地址 外部设备要访问阿里云MySQL数据库,则需要设置白名单,具体操作链接: https://help.aliyun.com/document_detail/43185.h ...
- JDBC<android studio,kotlin>
工具:mysql 5.6.19,mysql-connector-java-5.1.48.jar,android stuido&android studio自带模拟器 1.在mysql数据库中新 ...
- android studio使用JDBC访问mysql数据库(Kotlin方法)
工具:mysql-connector-java-5.1.48.jar,mysql version 5.6.19,android studio内置模拟器 1.connection import java ...
随机推荐
- 使用build_opener 自定义 opener
使用build_opener 自定义 opener,这种方法的好处是可以方便的拓展功能. import urllib.request import http.cookiejar def makeMyO ...
- 简单利用HTTP中的PUT协议拿下SHELL
第一次用方法拿shell,之前遇到的都是没有写入权限的. 站太辣鸡,纯粹练手,就不打码了. 此次实战会用到的HTTP请求方法: OPTIONS,PUT,MOVE/COPPY * 战前准备 0x01 什 ...
- Day4 - Linux分区规划与xshell使用排错
1.1 没有重要数据 /boot 200M 存放系统的引导信息 内核 swap 交换分区 防止内存用光了 临时的一个内存 如果你的内存小于8G swap是内存的1.5倍 如果你的 ...
- Linux平台 Oracle 12cR2 RAC安装Part1:准备工作
Linux平台 Oracle 12cR2 RAC安装Part1:准备工作 一.实施前期准备工作 1.1 服务器安装操作系统 1.2 Oracle安装介质 1.3 共享存储规划 1.4 网络规范分配 二 ...
- 用JS制作一个信息管理平台
首先,介绍一些需要用到的基本知识. [JSON] JSON是数据交互中,最常用的一种数据格式. 由于各种语言的语法都不相同,在传递数据时,可以将自己语言中的数组.对象等转换为JSON字符串. 传递之后 ...
- Linux的学习笔记_Day1
为什么要开始学习Linux命令? 首先当然是因为工作需要了,现在的工作是负责银行调度的系统的源系统接入的工作,经常要到生产部署版本.所以--买了一本<Linux命令行与shell脚本编程大全&g ...
- css中使用变量
2017年3月,微软宣布 Edge 浏览器将支持 CSS 变量.这个重要的 CSS 新功能,所有主要浏览器已经都支持了. 声明css变量的时候,变量名前面要加两根连词线(--).变量名大小写敏感,-- ...
- html加载和解析流程
之前查找资料了解了html的整个渲染过程,对于理解页面加载帮助还是蛮大的,下面我用visio把它画成流程图,便于直观理解 好吧,居然要150字才能发布............ 浏览器渲染过程 浏览器渲 ...
- SNS团队第七次站立会议(2017.04.28)
一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 导入相关词库数据 研究如何存取语音.图片文件 龚晓 ...
- 201521123082 《Java程序设计》第1周学习总结
201521123082 <Java程序设计>第1周学习总结 标签(空格分隔): Java 1. 本周学习总结 0.初步了解Java语言及其发展历史和过程,同时也初步了解了Java具有跨平 ...