一、JDBC的简介

  JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,由与各种数据
库都有着一套自己的规范,JAVA对其操作的方法也各不相同,这对我们的开发造成了很大的困难。所以Sun公司提
供了一种标准化的规范  -  JDBC,所有想要和JAVA进行连接的数据库都要遵守这个标准。它由一组用Java语言编写
的类和接口来实现的。
  就像电脑的显卡驱动一样,想要使用显卡首先要安装显卡驱动。连接数据库也是一样,想要使用谁家的数据库
,先要导入数据库的驱动jar包。拿mySql举例,如果想要和mySql数据进行连接连接,第一步要做的就是导入mySQL
的驱动包 - mysql-connector-java-5.1.39-bin.jar,然后设置连接路径,用户名和密码进行连接。JDBC是接口,
而驱动是接口的实现,每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库。

二、JDBC的使用

  其实数据库的连接和我们用QQ的步骤是一样的。首先你要有一个QQ的安装包进行安装(导入数据库的驱动包),
然后找到你的QQ启动文件(设置连接路径),输入用户名和密码进行登录(设置数据库的登录名和密码)。双击好
友头像打开聊天界面(获得语句执行平台),在聊天框里输入想要发送的数据(编写SQL语句),点击发送按钮发送
消息(执行语句),关闭聊天框(释放资源)。总结起来可以分为7步:
  1、导入相关数据库的驱动包
  2、注册驱动.
  3、获得连接.
  4、获得语句执行平台.
  5、执行sql语句.
  6、处理结果.
  7、释放资源.

(一)导入相关数据库的驱动包

  为了方便管理jar包,我们在项目路径下新建一个lib文件夹用来专门存放炸包。

  1、
  
2、右键要添加的jar包,选择Add to BuildPath添加jar包。

(二)数据库驱动的注册

  JDBC定义了一个标准的驱动接口Driver(java.sql包下的),每种数据库的驱动包都提供了该类的实现类。拿
mySql举例:mySql驱动包提供了实现类:Driver类(com.mysql.jdbc包下的)。工具类DriverManager提供了注册驱
动的方法 registerDriver()。但是不推荐使用这种方法注册驱动,因为:
  
1、通过观察源码发现这样注册驱动会导致驱动被注册了2次。
  2、不易于后期的维护和修改。
  
而通过查看Driver类(com.mysql.jdbc包下的)发现在这个类的静态代码块已经将自己给注册了,所以就可以
通过反射的方法进行注册。
 
举例:

Class.forName("com.mysql.jdbc.Driver");

(三)数据库连接的获取

  通过工具类DriverManager提供的getConnection(url,username,password)方法就可以获得数据库的连接。三个
参数分别为:
  1、url:连接数据库的位置、他由三部分组成的,之间用 : 进行分割。
    * 第一部分是jdbc,表示连接数据库的标准,是固定的;
    * 第二部分是数据库名称,可以将前两部分理解为网址上的https: ,同网址一样他与第三部分的数据库路径
也是由//分割的;
    * 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服
务器的IP地址(localhost)、端口号(3306),以及你要连接的库的名称(DATABASE)组成;
  2、username:数据库的用户名,每个数据库在安装的时候都会让你设置用户名和密码。
  3、password:数据库连接的密码。
  举例:

String url="jdbc:mysql://localhost:3306/mydb";
String user="boom";
String pwd="boom";
//获取连接
Connection connection = DriverManager.getConnection(url, user, pwd);

(四)获取SQL语句的执行平台与执行SQL语句

  找到要打开的“软件”输入用户名和密码之后,就要获得“聊天窗口了”。JDBC中有2种方式获得SQL语句的执行平台,调
用者都是连接类Connection。
  1、创建一个 Statement 对象来将 SQL 语句发送到数据库 :createStatement(),这种方法执行SQL语句的话,向
数据库传入的参数要拼到sql里,有注入安全问题。
  2、创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库 :prepareStatement(String sql) ,
这种方法执行SQL语句时会用占位符给参数占位,通过方法给占位符赋值,不会有注入问题。
数据库的增删改查对应着2个方法,查询方法 - executeQuery,增删改方法 - executeUpdate() 。
  * Statement
  1、执行给定的 SQL 语句,该语句返回单个 ResultSet 对象 :executeQuery(String sql)
  2、执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句
(如SQL,DDL语句) : executeUpdate(String sql) 返回值为int - 影响的行数。
  * PreparedStatement
  1、在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象 :executeQuery()
  2、在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)
语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句 :executeUpdate()
  3、将指定参数设置为给定 Java String 值 : setString(int parameterIndex - 占位符位置从一开始, String x)
  set....后边的类型根据你要传入值得类型来定,如:setInt(int parameterIndex, int x),具体可传参数类型请看JDK。
  * ResultSet(结果集)
  1、以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值 :
      getString(int columnIndex - 从第一列开始) ,不推荐。
  2、以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值 :
      getTime(int columnIndex - 列名) ,列名一定要写对哦!!!推荐。

栗子1(Statement的查询):

 //注册驱动
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mydb";
String user="root";
String pwd="root";
//获取连接
Connection connection = DriverManager.getConnection(url, user, pwd);
//获取SQL语句的执行平台
Statement statement = connection.createStatement();
//编写SQL语句
String sql="SELECT * FROM sort;";
//执行SQL语句返回结果集
ResultSet query = statement.executeQuery(sql);
//打印列名(为了好看)
System.out.println("sid\tsname\tsprice\tsdesc");
System.out.println("-------------------------------");
//循环处理结果集
while(query.next()){
System.out.println(query.getString("sid")+"\t"+query.getString("sname")+"\t"
+query.getString("sprice")+"\t"+query.getString("sdesc"));
}
//关闭资源
query.close();
connection.close();
statement.close();
}

栗子2(Statement的修改):

//注册驱动
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mydb";
String user="root";
String pwd="root";
//获取连接
Connection connection = DriverManager.getConnection(url, user, pwd);
//获取SQL语句的执行平台
Statement statement = connection.createStatement();
//执行SQL语句
int row = statement.executeUpdate("INSERT INTO sort(sname,sprice,sdesc) VALUES('充气娃娃',160,'羞羞的');");
System.out.println(row);
//关闭资源
query.close();
connection.close();
statement.close();
}

栗子3(PreparedStatement的模拟登录的功能):

public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获得连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名");
String user = sc.nextLine();
System.out.println("请输入密码");
String pwd = sc.nextLine();
//根据输入的参数去库里查询,使用?占位符
String s="SELECT * FROM users WHERE uuser=? AND upwd=?";
//获取SQL语句的执行平台
PreparedStatement statement = connection.prepareStatement(s);
//为占位符赋值
statement.setString(1, user);
statement.setString(2, pwd);
//执行SQL语句
ResultSet query = statement.executeQuery();
//如果不为空
if (query.next()) {
System.out.println("登陆成功");
}else {
System.out.println("登录失败");
}
//关闭资源
query.close();
statement.close();
connection.close();
}

JAVA基础-JDBC(一)的更多相关文章

  1. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  2. JAVA基础-JDBC二(常用的开源工具)

    一.连接池 在实际的开发应用中,我们常常会对数据库进行大量的高并发的访问,而最原始的连接和操作方式并不能满足这种大量的访问,程序员为了追求更方便.更快捷.更科学安全的开发.第三方的工具类和Dao层的框 ...

  3. Java基础 JDBC

    一,前言 数据库是开发中必不可少的一个工具,那么java如何操作数据库呢,那就是我们的JDBC了,接下来我们将会好好聊一下这个JDBC. 二,JDBC 2.1 JDBC概述 JDBC(Java Dat ...

  4. Java基础——JDBC

    今天学习的内容是:JDBC 通常jdbc连接分6步: 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执行sql 语句: 5)处理结果集(若sql 语句为查询语句): 6)关闭连接. ...

  5. Java基础-JDBC访问数据库

    基本步骤: 加载数据库驱动 建立连接 创建SQL语句 执行SQL语句 处理执行结果 释放资源 代码示例: import java.sql.Connection; import java.sql.Dri ...

  6. java基础 JDBC & Statement & PreparedStatement

    参考文章: http://blog.csdn.net/wang379275614/article/details/23393335 概念 JDBC-数据库连接,是由一些类和接口构成的API,是J2SE ...

  7. java基础-jdbc——三种方式加载驱动建立连接

    String url = "jdbc:mysql://localhost:3306/student?Unicode=true&characterEncoding=utf-8" ...

  8. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  9. Java基础-面向接口编程-JDBC详解

    Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...

随机推荐

  1. codevs 种树3

    codevs上的题目,自从wikioi改名后,就不怎么做题了. 这道题的话注释在代码中就可以了,还是求最长路,相较返回如果中间可以种多个的话,那就种越多越好,因为这样可以减少种的棵树, 所以这个i与i ...

  2. NOIP2017SummerTraining0710

    个人感受:这套题,题目泄露,没什么好打的,第一题刚开始题目理解错误,后来还行,第二道题,打了一个50还是60分的dp,第三道暴力过了小数据,拿了200分,排名15+. 问题 A: 七天使的通讯 时间限 ...

  3. 点聚合功能---基于ARCGIS RUNTIME SDK FOR ANDROID

    一直不更新博客的原因,如果一定要找一个,那就是忙,或者说懒癌犯了. 基于ArcGIS RunTime SDK for Android的点聚合功能,本来是我之前做过的一个系统里面的一个小部分,今天抽出一 ...

  4. 移动WEB 响应式设计 @media总结

    第一种: 在引用样式的时候添加 <link rel="stylesheet" media="mediatype and|not|only (media featur ...

  5. mui框架移动开发初体验

      前  言 博主最近在接触移动APP,学习了几个小技巧,和大家分享一下. 1. 状态栏设置 现在打开绝大多数APP,状态栏都是与APP一体,不仅美观,而且与整体协调.博主是个中度强迫症患者,顶部那个 ...

  6. 入坑IT十年(二)技术以外

    上一篇博客里提到:技术越来越简单,发布后不久,就看到<技术并不是越来越简单>,这显然是打擂台来了. 技术究竟是不是越来越简单?其实这个问题,要看你究竟是以什么角度来思考这个问题.我们可以举 ...

  7. yeah,我的博客成功建立!

    以此来记录我个人的学习历程!~~

  8. SQL中游标的用法

    游标:是用来对表从上下每行循环取值,将值连接成为字符串.例子:对 pubs 数据库的dbo.titles 表.1.取得表中的总价格:select sum(price) from dbo.titles2 ...

  9. Jquery实现按钮点击遮罩加载,处理完后恢复

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="EasyUiLoad.aspx. ...

  10. 关闭eclipse自动弹出console的功能

    当启动项目后,console有值时就会弹出,挺烦人的,可以如下修改