JDBC(Java DataBase Connectivity)是使用 Java 存取数据库系统的标准解决方案,它将不同数据库间各自差异API与标准 SQL语句分开看待,实现数据库无关的 Java操作接口。

JDBC程序访问数据库的步骤 

步骤一:加载JDBC驱动程序:Class.forName("com.mysql.jdbc.Driver");Oracle10g:oracle.jdbc.driver.OracleDriver;MySQL5:com.mysql.jdbc.Driver;SQLServer2005:com.microsoft.sqlserver.jdbc.SQLServerDriver
步骤二:提供连接参数:URL,USERNAME, PASSWORD:不同数据库产品的连接URL不同
Oracle10g:jdbc:oracle:thin:@主机名:端口:数据库SID

jdbc:oracle:thin:@localhost:1521:ORCL
MySQL5:jdbc:mysql://主机名:端口/数据库名
jdbc:mysql://localhost:3306/test       
SQLServer2005:jdbc:sqlserver://主机名:端口:DatabaseName=库名
jdbc:sqlserver://localhost:1433:DatabaseName=BookDB
步骤三:建立一个数据库的连接:connection=DriverManager.getConnection(URL,USERNAME, PASSWORD);
步骤四:创建一个statement:preparedStatement=connection.prepareStatement(sql);
步骤五:执行SQL语句:result=preparedStatement.executeUpdate();
步骤六:处理结果:flag=result>0?true:false;return flag;
步骤七:关闭JDBC对象:if(resultSet!=null){resultSet.close();}if(preparedStatement!=null){preparedStatement.close();}if(connection!=null){connection.close();}
 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的更多相关文章

  1. Android开发JDBC连接mysql数据库导入驱动方法

    在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ...

  2. Android使用JDBC连接数据库

    连接数据库是安卓开发中几乎不可避免的一项工作,稍有规模的应用通常都需要使用数据库来存储用户数据.对于本地数据库当然可以使用sqlite,而对于多用户线上应用,则一般需要配备云端数据库.其中比较常用且开 ...

  3. 13--网页,网站,微信公众号基础入门(PHP获取网页的get请求)

    https://www.cnblogs.com/yangfengwu/p/11148976.html 大家在访问网页的时候有没有注意一件事情 现在咱来看这种哈 现在咱做个功能哈,类似于这样 长话短说 ...

  4. Android学习笔记————利用JDBC连接服务器数据库

    /******************************************************************************************** * auth ...

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

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

  6. android连接Mysql数据库之JDBC方式

    一.创建一个数据库和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子. 首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PH ...

  7. Android应用通过JDBC直连阿里云MySQL数据库

    1.设置白名单,获取外网连接地址 外部设备要访问阿里云MySQL数据库,则需要设置白名单,具体操作链接: https://help.aliyun.com/document_detail/43185.h ...

  8. JDBC<android studio,kotlin>

    工具:mysql 5.6.19,mysql-connector-java-5.1.48.jar,android stuido&android studio自带模拟器 1.在mysql数据库中新 ...

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

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

随机推荐

  1. JavaScript入门(三)

    循环结构的执行步骤 1.声明循环变量: 2.判断循环条件: 3.执行循环体操作: 4.更新循环变量: 然后循环执行2~4,直到条件不成立时,跳出循环. [While循环] while循环()中的表达式 ...

  2. Jenkins 环境搭建

    本文为jenkins入手教程,全文分为 jenkins安装.系统管理(配置全局安全.全局工具配置.管理插件).创建项目(同时创建证书),管理视图,jenkins 客户端,执行构建.查看任务历史 一.j ...

  3. IT科技企业逻辑思维面试题

    逻辑思维面试题 一.假设有一个池塘,里面有无穷多的水.现有2个空水壶,容积分别为5升和6升.问题是如何只用这2个水壶从池塘里取得3升的水.[请描述操作过程] 答:(1)先用容积为6升的水壶装满水: ( ...

  4. 错误Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:

    今天写PHP代码,遇到了这个非常不友好的报错(Deprecated: mysql_connect(): The mysql extension is deprecated and will be re ...

  5. Nodejs进阶:使用DiffieHellman密钥交换算法

    ## 简介 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥.目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端.服务端利 ...

  6. JavaScript封装一个实用的select控件

    最近一直把精力放在项目上面,导致忽略的一些底层的东西.以前就一直觉得原有的select控件很丑,正好周末有时间,试着做了一个简单封装,实现了它的基本功能.我总结了一下,大概分为三个部分: 1.对显示样 ...

  7. static和final修饰方法

    static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法.static方法是可以被继承,然后可以被重写和重载. final修饰的方法是不可变方法,final方法所在类被继承时,被final ...

  8. cocos2dx 在Xcode里面 resource 里面文件夹的搜索

    以前一直在pc上写cocos2dx  第一次到Xcode里面写 发现在resource文件夹里面 添加了新的目录后竟然没有用 这里记录下 在项目里面和classes目录同级的 标签下有个Resourc ...

  9. 微信H5支付:网络环境未能通过安全验证,请稍后再试。解决办法(PHP版)

    前(tu)言(cao) (这段前言纯属吐槽,着急解决问题的小伙伴,赶紧看正文吧) 最近做了支付宝和微信支付,先做的是PC端网站的支付,就是出个二维码,然后手机扫描支付,当然支付宝在扫码页面支持登录支付 ...

  10. docker 添加国内源

    docker for mac 获取地址:dao镜像地址  # 163的地址 https://hub-mirror.c.163.com docker for mac的设置操作:   点击Apply ...