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 ...
随机推荐
- SuperSocket基础(二)-----一个完成SocketServer项目
SuperSocket基础(二)-----一个完成SocketServer项目 由于时间关系未能及时更新,关于SuperSocket,对于初学者而言,一个SuperSock的Server真的不好写.官 ...
- Coursera无法正常提交作业
如下图,upload服务貌似被墙了,想要提交作业的话需要临时科学上网.
- sed武功心法(info sed翻译+注解)
本文中的提到GNU扩展时,表示该功能是GNU为sed提供的(即GNU版本的sed才有该功能),一般此时都会说明:如果要写具有可移植性的脚本,应尽量避免在脚本中使用该选项. 本文中的正则表达式几乎和gr ...
- Redis介绍和环境安装
-------------------Redis环境安装------------------- 1.安装 1.卸载软件 sudo apt-get remove redis-se ...
- Django视图,与数据库交互并返回数据
环境:python 2.7.13 数据库:sqlite3(Django自带) 在学习Django的时候,遇到了困难.大概就是取到数据库数据后一直不能转成json数据.最后终于自己琢磨解决了. 要点就 ...
- JS源生代码“增删改查”之增
51呢最近在做一个管理数据的,第一次接触到用JS的源代码去实现一些功能,才知道网页里的许多功能都是依赖于“增删改查”完成的,下面的几张图片就是对于增的演示: 下面是有关HTML的代码:这个主要是弹窗部 ...
- Spark 1.6升级2.x防踩坑指南
原创文章,谢绝转载 Spark 2.x自2.0.0发布到目前的2.2.0已经有一年多的时间了,2.x宣称有诸多的性能改进,相信不少使用Spark的同学还停留在1.6.x或者更低的版本上,没有升级到2. ...
- WebServices 之 WSDL
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt234 一,WSDL概述 WebServices Description La ...
- poj2914无向图的最小割模板
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...
- CSS文本效果
前面的话 本文将详细介绍CSS文本效果 凸版印刷效果 这种效果尤其适用于中等亮度背景配上深色文字的场景:但它也可用于深色底.浅色字的场景,只要文字不是黑色并且背景不是纯黑或纯白就行 [浅色背景深色文本 ...