JDBC 概述

什么是JDBC

是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成,JDBC提供了一种操作数据的标准,JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统。

通过驱动连接

JDBC的API

java.sql包装的就是JDBC的API。各大数据库厂商就会对JDBC的API提供实现类——驱动包。注意不要引错包。

连接Mysql

1. 添加驱动

  1. 在项目当中创建一个文件夹为lib
  2. 把Mysql驱动包复制到该文件夹下
  3. builder path 编译路径

2. 创建连接

eclipse 中查看驱动相关api:ctrl+shift+t 查找 drive 点进去后, 要求关联源码,把驱动压缩包直接关联。

1. 加载驱动

把com.mysql.jdbc.Driver这份字节码加载进 JVM,当一份字节码被加载到 JVM 时,就会执行该字节码中的静态代码块:

static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}

代码实现:

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

2. 获取连接对象

连接时要求传入数据库地址、用户名、密码

String url = "jdbc:mysql://localhost:3306/new";
String user = "root";
String password = "abcd";
Connection conn = DriverManager.getConnection(url, user, password);

查看连接数( SHOW PROCESSLIST )

3. 创建并执行sql语句

数据库SQL结构化语言:

  1. 数据查询语言(DQL: Data Query Language)
SELECT <字段名> FROM <表或视图名> WHERE <查询条件>;
  1. 数据操纵语言(DML:Data Manipulation Language)
INSERT INTO <表名>(列1,列2,...) VALUES (值1,值2,...);
UPDATE <表名> SET <列名>=新值 WHERE <列名>=某值;
DELETE FROM <表名> WHERE <列名>=某值;
  1. 数据定义语言(DDL:Data Definition Language)

CREATE、ALTER、DROP,用于在数据库中创建新表或删除表,以及为表加入索引等。

  1. 数据控制语言(DCL:Data Control Language)

通过GRANT、DENT、REVOKE,确定单个用户或用户组对数据库对象的访问权限。

Statement接口作用:用于进行Java程序和数据库之间的数据传输。

具体类有3个实现:

1. Statement

用于对数据库进行通用访问,使用的是静态sql。

String sql = "DML/DDL";
Statement st = conn.createStatement();
int row = st.executeUpdate(sql);
2. PreparedStatement

用于预编译模板SQL语句,在运行时接受sql输入参数。

预编译语句:

没有预编译语句时,所有的sql都是进行拼接:

String sql = "insert into stu values("+stu.getId()+",'"+stu.getName()+"'")";

PreparedStatement 用于预编译模板SQL语句,在性能和代码灵活性上有显著地提高。PreparedStatement 对象使用 ? 作为占位符,即参数标记;使用 setXXX( index,value) 方法将值绑定到参数中,每个参数标记是其顺序位置引用,注意 index 从 1 开始;

PreparedStatement 对象执行SQL语句:(注意,它们都没有参数)

  • executeQuery()
  • executeUpdate()
SQL注入

就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

用户登入示例:

预编译语句可以防SQL注入,所以更安全。之所以PreparedStatement能防止注入,是因为它把单引号转义了,变成了 \',这样一来,就无法截断SQL语句,进而无法拼接SQL语句 基本上没有办法注入了。

String sql = "insert into student(name,age) values(?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, stu.getName());
ps.setInt(2, stu.getAge());
ps.executeUpdate();
3. CallableStatement

要访问数据库存储过程时使用,也可以接受运行时输入参数。

4.处理结果集

结果集 ResultSet:表示数据库查询的结果的集合,在执行查询语句时就会得到一个这样的结果。

常用方法:

  • boolean next():判断是否有下一行数据。若有,则向下移动一行指针。

  • getXxx(int columnIndex):获取当前行中,第几列 (从1开始),(不推荐)

  • getXxx(String columnName):获取当前行中,指定列名的列的值。columnName是列名/列的别名。

    若列的类型是VARCHAR/CHAR/TEXT,都使用getString来获取列的值。

    若列的类型是int/integer,都使用getInt来获取列的值。

Mysql与Java数据类型对照表:

3. 释放数据资源

if (rs != null) {
try {
rs.close();
} catch (SQLException e) { e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

JDBC 编程初步的更多相关文章

  1. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

  2. 单独使用jdbc编程问题总结(一)

    在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...

  3. 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis

    我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...

  4. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  5. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  6. JDBC编程 之 增删改查

    JDBC编程之数据增加,更改,查询,删除 package com.good.jdbc; import java.sql.Connection; import java.sql.DriverManage ...

  7. JDBC编程步骤

    JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...

  8. 【Java】JDBC编程套路

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5847020.html 学习Java开发,一个必须掌握的知识点,就是数据库操作.当程序需要用到的数据达到一定程度 ...

  9. 用JDBC编程的执行时错误及其解决大全

    用JDBC编程的执行时错误及其解决 用JDBC编程的执行时错误及其解决 源码: .java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlser ...

随机推荐

  1. [BZOJ2440]完全平方数解题报告|莫比乌斯函数的应用

    完全平方数 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱.  这天是小X的生日 ...

  2. Machine Learning(CF940F+带修改莫队)

    题目链接:http://codeforces.com/problemset/problem/940/F 题目: 题意:求次数的mex,mex的含义为某个集合(如{1,2,4,5})第一个为出现的非负数 ...

  3. javascript继承机制 & call apply使用说明

    一.继承机制 1.对象冒充:构造函数使用 this 关键字给所有属性和方法赋值,可使 ClassA 构造函数成为 ClassB 的方法,然后调用它. function ClassZ() { this. ...

  4. 打开Android系统安装APK的页面

    //使用隐式意图开启安装APK的Activity Intent intent = new Intent("android.intent.action.VIEW"); intent. ...

  5. 【Windows使用笔记】使Onedrive同步任意文件夹

    因为度盘实在是有点垃圾,经常看的剧之类的或者其他软件资源啥的动不动就被封. 所以跑去某宝买了一个5T的企业子账号,安全性不清楚,重要的隐私数据反正都用移动硬盘备份了.主要就是存一些资源性的文件吧.而且 ...

  6. ES6 新增的一些东西

    一.常量 不允许重复定义 const a='HELLO' const a='world'//报错Uncaught SyntaxError: Identifier 'a' has already bee ...

  7. python基础===Windows环境下使用pip install 安装出错"Cannot unpack file"解决办法

    不知道为什么,加了豆瓣镜像源还是不行 这个命令可以解决! pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douba ...

  8. linux和ubuntu防火墙相关命令

    1.永久有效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2.即刻生效 开启: service iptables start 关闭: se ...

  9. JAVA 线程状态及转化

    线程状态图 说明:线程共包括以下5种状态.1. 新建状态(New)         : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状 ...

  10. 【sam复习】用sam实现后缀排序

    没错,一定是无聊到一定境界的人才能干出这种事情. 这个无聊的zcysky已经不满足于用后缀平衡树求sa了,他想用sam试试. 我们回顾下sam的插入过程,如果我们从最后一个state沿着suffix ...