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 ...
随机推荐
- 家中路由添加静态IP映射(一)
登录路由器配置页面,选择更多功能来添加IP和MAC地址映射关系
- .NET 体系结构(.net core、.net framework、xamarin之间的关系)
这是一张来自官方的图. 图中.NET FRAMEWORK..NET CORE和XAMARIN是三个不同的运行时,这三个运行时在.NET STANDARD LIBRARY之上,它们都包含一些基础的组件, ...
- 给Linux RedHat7 设置启动终端的快捷键
RedHat7中设置启动终端的快捷键... ------------------------------ 征服Linux从终端开始 ---------------------------------- ...
- -webkit-overflow-scrolling 与滚动回弹效果.
参考来源:https://developer.mozilla.org/zh-CN/docs/Web/CSS/-webkit-overflow-scrolling https://www.w3cways ...
- form enctype参数
application/x-www-form-urlencoded 表示在发送前编码所有字符(默认) multipart/form-data 不对字符编码.在使用包含文件上传控件的表单时,必须使用该值 ...
- Django 学习笔记(五)模板标签
关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...
- 【Unity游戏开发】浅谈Unity游戏开发中的单元测试
一.单元测试的定义与作用 单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性.一个单元测试 ...
- java面向对象(一)
[toc] 面向对象 我们都说java是面向对象的编程语言,那什么是面向对象呢?什么是类呢?什么是方法呢? 类.对象.方法 类是对象的抽象定义,对象是类的具体实例. 类:指的是一类东西,比如汽车,人类 ...
- 常用bash命令
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- chrome开发工具指南(十四)
模拟和测试其他浏览器 您的任务不只局限于确保网站在 Chrome 和 Android 上出色运行.即使 Device Mode 可以模拟 iPhone 等多种其他设备,我们仍鼓励您查看其他浏览器模拟解 ...