通明讲JDBC(一)–认识JDBC
本章记录了jdbc的简单使用方式!
0,jdbc的作用
1,jdbc入门准备工作
2,jdbc注册驱动
3,使用jdbc对数据库CRUD
0,jdbc的作用
与数据库建立连接、发送操作数据库的语句并处理得到的结果。
1,jdbc入门准备工作
0),使用jdbc操作mysql所用到jar
mysql-connector-java-5.1.22-bin.jar
1),创建数据库qogir 用户名root 密码root
创建表use

2,jdbc注册驱动
0),注册mysql驱动(3种方式)
注册了数据库驱动,我们才能与数据库建立连接并对数据库做读写的操作。
因为驱动只需要注册一次,所以我们在静态代码块中注册它
第一种方式:使用驱动关联类来注册驱动,它的缺点是当替换数据库(比如:将mysql改为oracle)时,去除mysql的jar后,程序就会出现编译问题。
static {
try {
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());
} catch (SQLException e) {
e.printStackTrace();
}
}
查看registerDriver方法的源码:我们可以发现,驱动实际被封装到一个DriverInfo中,然后置于一个Vector之中。


第二种方式:推荐使用这种方式,方便灵活配置驱动
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
使用Class.forName加载驱动类,驱动类在被加载初始化时真正注册驱动
查看com.mysql.jdbc.Driver源码:可以发现,它实际还是使用了第一种方式来注册驱动

第三种方式:将描述驱动的键值对设置到系统属性中
static {
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
}
使用这种方式可以注册多个驱动,多个驱动以“:”分隔
比如加载 mysql 和 oracle 的驱动
System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:oracle.jdbc.driver.OralceDriver");
在使用DriverManager获取数据库连接时,DriverManager被加载初始化
DriverManager.getConnection(url,username,password);



由源代码看到第三种方式还是使用第二种方式注册驱动,则最终还是使用第一种方式进行驱动注册。
3,使用jdbc对数据库CRUD
1),注册驱动,如上所述
2),获取数据库连接
这个url格式:jdbc:子协议:子名称//主机名:端口/数据库名
这里没有子名称, 若数据库在本地且端口号是默认端口号,则可省略localhost:3306,直接写为 jdbc:mysql:///qogir
private static String url = "jdbc:mysql://localhost:3306/qogir";
private static String username = "root";
private static String password = "root";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
3),创建用于在已经建立数据库连接的基础上,向数据库发送要执行的不带参数的简单SQL语句的工具类对象
Statement statement = null;
statement = connection.createStatement();
4),向数据库发送SQL语句,获取结果集
ResultSet resultSet = null;
resultSet = statement.executeQuery("select id,name,password from user ");
5),处理结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+"---->"+resultSet.getString("name")+"--->"+resultSet.getString("password"));
}
6),释放资源,释放资源的顺序应该按照释放结果集,释放Statement,释放数据库连接的顺序
并且,为了不占用太多的资源,数据库连接建立到释放的时间应该尽量短。
public static void close(ResultSet rs,Statement st,Connection con){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try{
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try{
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
最后得到结果

了解了JDBC的读操作,再了解JDBC的写操作应该很容易,具体参考以下完整的程序
package jdbc; import java.sql.*; public final class JdbcUtils { private JdbcUtils(){} private static String url = "jdbc:mysql://localhost:3306/qogir";
private static String username = "root";
private static String password = "root"; /**
* 注册驱动 方式 1 离开驱动jar ,无法编译
*/
/*
static {
try {
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());
} catch (SQLException e) {
e.printStackTrace();
}
}*/ /**
* 注册驱动 方式 3 装载com.mysql.jdbc.Driver 推荐的方式
*/
/*
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}*/ /**
* 注册驱动 方式 2
* 多个驱动 以“:”分隔
* System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:oracle.jdbc.driver.OralceDriver");
*/
static {
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
} /**
* 建立数据库连接
* jdbc:子协议:子名称//主机名:端口/数据库名 这里没有子名称
* 本机,端口号是默认端口号 则可省略"localhost:3306" jdbc:mysql:///qogir
**/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
} /**
* 释放资源
*/
public static void close(ResultSet rs,Statement st,Connection con){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try{
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try{
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }
package jdbc; import java.sql.*; public class JdbcTest { /**
* 创建user
*/
public void createUsers(){
Connection connection = null;
Statement statement = null;
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement();
for(int i=1;i<=10;i++){
String sql = "insert into user(id,name,password) values ("+i+",'name"+i+"','00"+i+"')";
statement.executeUpdate(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(null,statement,connection);
}
} /**
* 更新user
*/
public void updateUsers(){
Connection connection = null;
Statement statement = null;
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement();
for(int i=1;i<=10;i++){
String sql = "update user set name='abc"+i+"' where id="+i;
statement.executeUpdate(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(null,statement,connection);
}
} /**
* 删除user
*/
public void deleteUsers(){
Connection connection = null;
Statement statement = null;
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement();
String sql = "delete from user where 1=1 ";
int i = statement.executeUpdate(sql);
System.out.println("删除了"+i+"条数据!");
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(null,statement,connection);
}
} /**
* 读user
*/
public void readUsers(){
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
/**
* 2,建立数据库连接
*/
connection = JdbcUtils.getConnection();
/**
* 3,创建用于在已经建立数据库连接的基础上,向数据库发送要执行的不带参数的简单SQL语句的工具类对象
*/
statement = connection.createStatement();
/**
* 4,向数据库发送SQL语句,获取结果集
*/
resultSet = statement.executeQuery("select id,name,password from user ");
/**
* 5,处理结果
*/
while(resultSet.next()){
System.out.println(resultSet.getString("id")+"---->"+resultSet.getString("name")+"--->"+resultSet.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
/**
* 6,释放资源
*/
JdbcUtils.close(resultSet,statement,connection);
}
} public static void main(String[] args){ //new JdbcTest().createUsers();
//new JdbcTest().updateUsers();
//new JdbcTest().deleteUsers();
new JdbcTest().readUsers();
} }
- 本文来自:Linux教程网
通明讲JDBC(一)–认识JDBC的更多相关文章
- 理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处(转)
在描述JNDI,例如获得数据源时,JNDI地址有两种写法,例如同是 jdbc/testDS 数据源: A:java:comp/env/jdbc/testDS B:jdbc/testDS 这两种写 ...
- JDBC设计理念浅析 JDBC简介(一)
概念 JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外. JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java A ...
- JDBC驱动程序注册 JDBC简介(二)
使用JDBC进行数据库操作的第一步就是驱动注册(当然你得先导入JAR). 驱动注册有多种方式,第一步必然是获得正确的驱动名称与URL格式 驱动名称与URL格式 RDBMS 驱动程序名称 ...
- JDBC 异常简介 jDBC简介(六)
SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException ...
- 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)
-----------------------JDBC---------- 0. db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...
- Unit01: JDBC原理 、 JDBC基础编程
Unit01: JDBC原理 . JDBC基础编程 这个文件里面有两块内容: 1.用比较麻烦的方式连接数据库,test1(),test4() 2.创建DBTool,测试DBTool连接数据库 ,tes ...
- oracle数据库连接问题org.springframework.jdbc.support.MetaDataAccessException: JDBC DatabaseMetaData method not implemented by JDBC driver - upgrade your driver...
org.springframework.jdbc.support.MetaDataAccessException: JDBC DatabaseMetaData method not implement ...
- JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务
JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...
- JDBC(2):JDBC对数据库进行CRUD
一. statement对象 JDBC程序中的Connection用于代表数据库的链接:Statement对象用于向数据库发送SQL语句:ResultSet用于代表Sql语句的执行结果 JDBC中的s ...
随机推荐
- 【工作】to-do-list
当你不确定的时候,你就把你所在的工作做好,所在的你不愿意的行业做好,所谓的自由选择,它本身不自由的,不自由过程当中,如何你把它做好,就做人生的一个经历,人生的一个积累.-- 王石 TODO
- python之random库
random库是用于产生并运用随机数的标准库 1. random库函数 (1)random.seed(a) 设置随机种子数,可以是浮点数或整数,如果不设置的话,则random库默认以系统时间产生当作随 ...
- 定时框架quartz的一些问题总结
1 什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单 ...
- 【java规则引擎】drools6.5.0版本api简介
在有些术语使用的时候,我有时候会用KIE项目.KIE引擎或者Drools项目.Drools引擎,大家应该理解KIE是Drools等项目的一个统称,所以在大多数情况下KIE或者特指Drools都是差不多 ...
- Python 中,字符串"连接"效率最高的方式是?一定出乎你的意料
网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作.说前者效率更高,它以更少的代价创建新字符串,如果用「+」连接多个字符串,每连接一次,就要为字符串分配一次内存,效率显得有点低 ...
- spring mvc集成freemarker使用
freemarker作为视图技术出现的比velocity早,想当年struts风靡一时,freemarker作为视图层也风光了一把.但现在velocity作为后起之秀的轻量级模板引擎,更容易得到青睐. ...
- git 本地文件里内容 操作记录
本地环境文件合并分支(以下的都分别 commit提交了的) [一.分支[追加] 和 [新增] 新信息 合并主线 情景] 分支内容: dr.find_element_by_id("su&qu ...
- expected_conditions 库的使用方法
from selenium.webdriver.support import expected_conditions as EC 例子一: 例子二:(判断元素存在文本"糯米")
- 比赛安排(穷举法或dfs)
比赛安排 时间限制: 1 Sec 内存限制: 125 MB提交: 11 解决: 10[提交][状态][讨论版][命题人:外部导入] 题目描述 设有2n(n<=6)个球队进行单循环比赛,计划在 ...
- Centos7部署CephFS
标签(空格分隔): ceph环境,ceph,cephfs cephfs部署之前准备工作: 1. 一个 clean+active 的cluster cluster部署参考:centos7下搭建ceph ...