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. HDU 2577 How to Type (字符串处理)

    题目链接 Problem Description Pirates have finished developing the typing software. He called Cathy to te ...

  2. VMware12序列号

    VMware tools怎么删除 rpm -e open-vm-tools-desktop vm12序列号 5A02H-AU243-TZJ49-GTC7K-3C61NVF5XA-FNDDJ-085GZ ...

  3. 报错注入遇到ERROR 1242 (21000): Subquery returns more than 1 row解决方案

    我的SQL语句是这样写的. mysql> select 1,2,3 and updatexml(1,concat(1,(select user from mysql.user),1),1);ER ...

  4. Oracle 内存顾问

    --查看内存相关参数SYS@ test10g> col name for a30SYS@ test10g> col value for a20SYS@ test10g> select ...

  5. tornado样板

    python tornado  样版 (包含出错页面) 2018-02-27  13:07:30 1 # -*- coding:utf-8 -*- 2 3 import tornado.web 4 i ...

  6. C# 笔记——委托

    委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用 ...

  7. Struts2学习笔记03 之 Result组件

    二.Result原理 1.stream 2.redirectAction 3.Json

  8. ajax登录请求,无法跳转

    没有用form提交数据,用的ajax提交.服务器显示已经登录成功,并且返回了成功代码OK.却无法进行跳转: js代码: $("input[type='submit']").on(& ...

  9. [转]nginx启动期都做了哪些事

    nginx是个多进程web容器,不同的配置下它的启动方式也是不同的,这里我只说说最典型的启动方式. 它有1个master进程,和多个worker进程(最优配置的数量与CPU核数相关).那么,首先我们要 ...

  10. How ConcurrentHashMap offers higher concurrency without compromising thread safety

    https://www.ibm.com/developerworks/library/j-jtp08223/