JDBC复习1
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的更多相关文章
- JDBC复习
-----------------------------------------JDBC复习----------------------------------------- 1.JDBC (Jav ...
- JDBC复习2
前面复习了一些基础知识以及如何抽取一些常用的代码,接下来就结合junit4做一个增删改查的小demo 重点是这么几个步骤:1.创建连接 2.编写sql语句 3.编写sql语句的载体 4.如果是Prep ...
- JDBC 复习
概念 Java DataBase Connectivity java数据库连接 定义了操作所有关系型数据库的规则(接口),不同的数据库厂商编写类实现这些接口,这些类就叫数据库驱动,使得用户只需要使用统 ...
- JDBC 复习4 批量执行SQL
1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...
- JDBC 复习3 存取Oracle大数据 clob blob
1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...
- JDBC 复习2 存取mysql 大数据
大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据 mysql的大数据分为2种 blob 和 text ,没有cl ...
- JDBC 复习1 DBUtil
package dbex; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; impo ...
- JDBC 复习5 mysql 的自增长主键 auto_increment
MySQL 自增长主键 (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. (2)把0插入AUTO_INCRE ...
- JDBC(三)数据库连接池(DBCP、C3P0)
前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...
随机推荐
- 错误提示:The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this project The type java.lang.Object cannot b
原文:http://www.cnblogs.com/mmzs/p/7662863.html 错误类型: 搞了很久才找到原因.解决办法写出来分享: 出现以上错误的原因是玩耍maven时多装了个jre.本 ...
- Redis学习笔记(1)-安装Oracle VM VirtualBox
Oracle VM VirtualBox官网网址 打开安装包网址界面,如下所示,点击截图红框. 下载完成后,点击exe文件,不停的点击下一步. 因为是使用MarkDown编辑器书写的尝试,所以写的简单 ...
- c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错
如果一个对象的值为null,那么它调用扩展方法时会报错吗? Person p = null ; p.ExtendMethod(); 上述代码出现的情况不会报错,刚开始遇到这种情况时很纳闷,就去问了大牛 ...
- 从零开始学安全(二十一)●PHPSPL异常
- Android Studio 使用Menu
首先在res目录下创建一个文件夹名字随意 在对创建的文件夹下在创建一个菜单 名字随意 参看布局 可以看到你的菜单 可以选择添加是么样的菜单 接着要到主活动中重写 onCreateOptionsMenu ...
- Centos 6.8 配置mysql数据库主从同步
Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务,首先确保主从服务器上的Mysql版本相同. 一.安装部署mysql ...
- vb.net 数字大写
Private Function RMBChinese(ByVal Rmb As Double) As String Dim Rmbexp As String Dim Rmbda As String ...
- jdk的配置(适用于win7、win8、win10)
一.前言 win7和win8的jdk配置基本一样,所以本文以win7和win10来说明配置. 二.win7jdk环境配置(win8和这个一样) 首先安装好jdk,这里已安装好jdk7,本文采取的是jd ...
- python中的tcp
目录 TCP简介 TCP介绍 TCP特点 TCP与UDP的不同点 udp通信模型 TCP通信模型 tcp客户端 tcp服务器 tcp注意点 TCP简介 TCP介绍 TCP协议,传输控制协议(英语:Tr ...
- Linux上Simplescalar/ARM的安装和运行文档
本文是基于ARM的simplescalar在ubuntu下的安装说明 1.1 软件下载 *********************文件下载地址:http://yunpan.cn/cw2n7dAyfG ...