1.什么是JDBC

JDBC是java数据库连接技术的简称(Java DataBase Connectivity)

jdbc是接口,jdbc驱动才是接口的实现,负责连接各种不同的数据库。jdbc的API由Sun公司提供,要遵循其规范

PS:驱动就是比如你买个鼠标,并不能直接用,需要插入电脑并安装驱动程序才可以使用。这里你有个JDBC,但是你得有jdbc驱动才可以和数据库建立连接

2.组成JDBC的类和接口

java.sql

  类:DrivaerManager --------由sun公司提供,载入不同的jdbc驱动(由数据库厂商提供)

  接口:

    Connection(连接数据库)

    Statement和PreparedStatement:执行sql语句。要搞清楚两者的用法和区别

    ResultSet:

javax.sql

  接口:DataSource

3.关于Statement和PreparedStatement的区别与使用

  1. 二者都是执行sql语句的载体,PreparedStatement是Statement的一个子接口。使用PreparedStatement可以防止SQL攻击,提高可读性和效率,建议使用

  2.Statement执行sql语句提供了以下常用方法:executUpdate(可执行sql中的增删改,还可以用于判断是否数据库更新成功),executeQuery(执行sql语句的查询语句)

  3.关于PreparedStatement的使用

     string sql = "select * from people p where p.id = ? and p.name = ?";  //1.编写sql语句,"?"代表占位符,参数
    preparedstatement ps = connection.prepareStatement(sql);        //2.获取执行sql语句的载体
    ps.setint(1,id);             //3.设置占位符,提供了setInt,setString,setDouble等
    ps.setstring(2,name);    
    ResultSet rs = ps.executequery();

4.关于statement的使用    

     Statement stmt = connection.createStatement();  //获取Statement
    string sql = "select * from people p where p.id = 1 and p.name = '张三' ";
    ResultSet rs = stmt.executeQuery(sql);

  5.看了不少资料说了很多,都是建议有一点开发水平的程序员都使用PreparedStatement。

   好处有很多,有jdbc模板,方便维护,防止sql注入攻击,预编译处理等等,至于其中的原因,会在后面转载几篇大佬的文章来学习学习

4.关于结果集ResultSet

1 ResultSet.next(); // 将游标由当前位置移动到下一行
2 ResultSet.getString(String columnName); // 获取指定字段的String类型值
3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值
4 ResuleSet.previous(); // 将游标由当前位置移动到上一行

/*

 *参数columnIndex表示列的索引,列索引从1开始,而不是0,

 *这第一点与数组不同。如果你清楚当前列的数据类型,那么可以使用getInt()之类的方法来获取

 *如果你不清楚列的类型,那么你应该使用getObject()方法来获取。

*/

5. 把数据库连接关闭这种重复度很高的代码抽取出来(三种方式)

第一种方式(我用的最多)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; /**
* 提供获取连接和释放资源的方法
*/
public class JDBCUtils_V1 { /**
* 获取连接方法
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08", "root", "root");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} /*
*释放资源
*/
public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}

第二种方式--通过读取配置文件

在src目录下新建一个db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf8
username=root
password=123456
package cn.itheima.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle; /**
* 提供获取连接和释放资源的 方法
*/
public class JDBCUtils_V2 {
private static String driver;
private static String url;
private static String username;
private static String password; /**
* 静态代码块加载配置文件信息
*/
static{
ResourceBundle bundle = ResourceBundle.getBundle("db");
driver = bundle.getString("driver");
url = bundle.getString("url");
username = bundle.getString("username");
password = bundle.getString("password");
} /**
* 获取连接方法
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}

第三种方式--也是通过读取配置文件

package cn.itheima.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.ResourceBundle; /**
* 提供获取连接和释放资源的 方法*/
public class JDBCUtils_V3 {
private static String driver;
private static String url;
private static String username;
private static String password; /**
* 静态代码块加载配置文件信息
*/
static {
try {
// 1.通过当前类获取类加载器
ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();
// 2.通过类加载器的方法获得一个输入流
InputStream is = classLoader.getResourceAsStream("db.properties");
// 3.创建一个properties对象
Properties props = new Properties();
// 4.加载输入流
props.load(is);
// 5.获取相关参数的值
driver = props.getProperty("driver");
url = props.getProperty("url");
username = props.getProperty("username");
password = props.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
} } /**
* 获取连接方法
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}

JDBC复习1的更多相关文章

  1. JDBC复习

    -----------------------------------------JDBC复习----------------------------------------- 1.JDBC (Jav ...

  2. JDBC复习2

    前面复习了一些基础知识以及如何抽取一些常用的代码,接下来就结合junit4做一个增删改查的小demo 重点是这么几个步骤:1.创建连接 2.编写sql语句 3.编写sql语句的载体 4.如果是Prep ...

  3. JDBC 复习

    概念 Java DataBase Connectivity java数据库连接 定义了操作所有关系型数据库的规则(接口),不同的数据库厂商编写类实现这些接口,这些类就叫数据库驱动,使得用户只需要使用统 ...

  4. JDBC 复习4 批量执行SQL

    1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...

  5. JDBC 复习3 存取Oracle大数据 clob blob

    1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...

  6. JDBC 复习2 存取mysql 大数据

    大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据 mysql的大数据分为2种 blob 和 text ,没有cl ...

  7. JDBC 复习1 DBUtil

    package dbex; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; impo ...

  8. JDBC 复习5 mysql 的自增长主键 auto_increment

    MySQL 自增长主键 (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. (2)把0插入AUTO_INCRE ...

  9. JDBC(三)数据库连接池(DBCP、C3P0)

    前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...

随机推荐

  1. 【转载】C#检测客户端输入的内容是否含有危险字符串

    用户在客户端提交的内容有时候并不可信,如果客户端提交的内容中含有危险字符串信息,则很有可能造成应用程序安全性问题,如SQL注入风险等.因此在接收客户端提交过来的数据后,我们首先需要判断数据中是否含有危 ...

  2. JPA、Hibernate、Spring data jpa之间的关系,终于明白了

    什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...

  3. MVC 视图助手书写规范及注意点

    @Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...

  4. 数据库部分(MySql)_4

    约束 约束:给表的字段名添加限制条件; 非空约束(not null):添加非空约束后,字段值不能为null: 唯一约束(unique):添加唯一约束后,字段值不能重复: 主键约束(primary ke ...

  5. C# string数组转int数组

    用法 //字符串数组(源数组) string[] sNums = new[] {"1", "2"}; //整型数组(目标数组) int[] iNums; //转 ...

  6. sourcetree Authentication failed

    sourcetree 的 git 密码存在 mac 的 钥匙串里面, 需要在钥匙串里删除掉对应信息,再次打开就会让你重新输入密码, 问题就解决了。 参看: https://stackoverflow. ...

  7. Java从URL获取PDF内容

    Java直接URL获取PDF内容 题外话 网上很多Java通过pdf转 HTML,转文本的,可是通过URL直接获取PDF内容,缺没有,浪费时间,本人最近工作中刚好用到,花了时间整理下,分享出来,防止浪 ...

  8. URL 与 URI 介绍

    URL: 统一资源定位符 ( Uniform Resource Locator ) URI: 统一资源标识符 ( Uniform Resource Identifier ) URL 地址:https: ...

  9. JMeter 关于JMeter 正则表达式提取器的一点研究

    关于JMeter 正则表达式提取器的一点研究   by:授客 QQ:1033553122 1.   实验环境: JMeter 2.13 2.   添加正则表达式提取器 右键线程组->添加-> ...

  10. C# 动态输出Dos命令执行结果

    本文以一个简单的小例子讲解如何将命令行信息实时的输出到文本框中.仅供学习分享使用,如有不足之处,还请指正. 概述 在C#程序开发过程中,有时需要运行其它的程序并获得输出的结果来进行进一步的处理.一般第 ...