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. ​'JAVAC' 不是内部或外部命令的解决方法

    ​'JAVAC' 不是内部或外部命令解决方法.. 在cmd里边输入javac就会提示”'JAVAC' 不是内部或外部命令,也不是可运行的程序 或批处理文件..此时原因分析: 一.确定是否安装了jdk ...

  2. 【JBoss】Linux下JBoss服务器"Too many open files"的解决方法

    linux中,每个socket连接都使用文件描述符进行标识,文件描述符属于系统资源,存在使用上的限制:缺省情况下JBoss能使用的最大描述符数是系统默认的最大文件描述符数(通过命令ulimit -H ...

  3. 一个利用pojo类从前端页面request中获取参数的小框架~

    写之前不知道Spring已经实现这样的功能,所以傻傻的写了这个东西! 实现原理挺有趣的在此记录一下.从去年十月参加java开发以来自己终于有了点小进步. 好开心. 解决问题(详解):前端form表单提 ...

  4. MyEclipse简介

  5. Selenium启动关闭Webdriver

    第一 启动chrome driver 1. 首先要通过System.setProperty指定chrome driver的路径,才能正常打开一个chrome浏览器: System.setPropert ...

  6. MVC配置伪静态

    提出需求 伪静态能提高搜索引擎收录,还不影响硬盘寿命,是一个不错的选择,但是会增加CPU和内存开销,由于时候也需要实现伪静态. web.config配置 <system.webServer> ...

  7. Java 反射之动态代理

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt205 利用Java反射机制你可以在运行期动态的创建接口的实现.java.la ...

  8. startsWith和endWith方法

    startsWith(): 例如:if(a.startsWith(b)) //判断字符串a 是不是以字符串b开头. 语法1 public boolean startsWith(String prefi ...

  9. VB与C#语言部分不用的地方Part1

    1. 数据类型: ① 日期型(Date)      表示日期和时间用两个“#”符号把日期和时间的值括起来,如:#08/20/2001#.#2001-08-20#. ② 变体型(Variant)    ...

  10. c# 网页打印全流程

    说明:我要实现的就是将数据库中Group表的数据查找出来,替换打印模版中的内容,再将模版文件打印出来 1.准备好要打印的模版group_O_train.html <div class=" ...