1.JDBC-01
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.JDBC-01相关的知识,希望对你有一定的参考价值。
案例1-通过jdbc完成单表的curd操作:
需求:
对分类表完成操作.
技术分析:
jdbc
///////////////////////
jdbc:
java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
驱动:jdbc的实现类.由数据库厂商提供.
我们就可以通过一套规范操作不同的数据库了(多态)
jdbc作用:
连接数据库
发送sql语句
处理结果
jdbc操作步骤:★
1.数据库和表
2.创建一个项目
3.导入驱动jar包
4.编码:
注册驱动
获取连接
编写sql
创建预编译的语句执行者
设置参数
执行sql
处理结果
释放资源
初始化数据库和表:
CREATE DATABASE day07;
USE day07;
create table category(
cid varchar(20) primary key,
cname varchar(20)
);
insert into category values(‘c001‘,‘电器‘);
insert into category values(‘c002‘,‘服饰‘);
insert into category values(‘c003‘,‘化妆品‘);
insert into category values(‘c004‘,‘书籍‘);
IDE打开之后
1.修改字符集 utf-8
2.新建 java项目
3.使用的jdk为自己的jdk 不用使用内置
使用junit单元测试
要求:
1.方法是public void xxx(){}
2.在方法上添加 @Test
3.在@Test 按下 ctrl+1(快速锁定错误)
4.在方法上右键 run as -->junit 就可以执行方法了.
jdbc-api详解:
所有的包 都是 java.sql 或者 javax.sql
DriverManager:管理了一组jdbc的操作 类
常用方法:
了解:注册驱动
static void registerDriver(Driver driver) :
通过查看 com.mysql.jdbc.Driver的源码 有如下代码
1 static {
2 try {
3 java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
4 } catch (SQLException E) {
5 throw new RuntimeException("Can‘t register driver!");
6 }
7 }
驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
现在只需要将类加载到内存中即可:
方式1:★
Class.forName("全限定名");//包名+类名 com.mysql.jdbc.Driver
方式2:
类名.class;
方式3:
对象.getClass();
掌握:获取连接
static Connection getConnection(String url, String user, String password)
参数1:
告诉我们连接什么类型的数据库及连接那个数据库
协议:
数据库类型:子协议 参数
mysql: jdbc:mysql://localhost:3306/数据库名称
oracle: jdbc:oracle:[email protected]:[email protected]实例
参数2:账户名 root
参数3:密码
(了解)Driver:java.sql 接口 驱动
Connection:连接 接口
常用方法:
获取语句执行者:
(了解)Statement createStatement() :获取普通的语句执行者 会出现sql注入问题
★ PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
(了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者
了解:
setAutoCommit(false) :手动开启事务
commit():提交事务
rollback():事务回滚
Statement:语句执行者 接口
PreparedStatement:预编译语句执行者 接口
常用方法:
设置参数:
setXxx(int 第几个问号,Object 实际参数);
常见的方法:
setInt
setString
setObject
执行sql:
ResultSet executeQuery() : 执行 r 语句 返回值:结果集
int executeUpdate() : 执行cud 语句 返回值:影响的行数
ResultSet:结果集 接口
执行查询语句之后返回的结果
常用方法:
boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false
光标一开始处于第一条记录的上面
获取具体内容
getXxx(int|string)
若参数为int :第几列
若参数为string:列名(字段名)
例如:
获取cname的内容可以通过
getString(2)
getString("cname")
常用方法:
getInt
getString 也可以获取int值
getObject 可以获取任意
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 public class JdbcUtils { 8 // 获取链接 9 public static Connection getConnection() throws ClassNotFoundException,SQLException { 10 // 注册驱动 11 Class.forName("com.mysql.jdbc.Driver"); 12 13 // 获取链接 14 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day02", "root", "123456"); 15 16 return conn; 17 } 18 19 /** 20 * 释放资源 21 * @param conn 链接 22 * @param st 语句执行者 23 * @param rs 结果集 24 */ 25 public static void closeResource(Connection conn, Statement st, ResultSet rs) { 26 closeResultSet(rs); 27 closeStatement(st); 28 closeConn(conn); 29 } 30 /** 31 * 释放链接 32 * @param conn 链接 33 */ 34 public static void closeConn(Connection conn) { 35 if (conn != null) { 36 try { 37 conn.close(); 38 } catch (SQLException e) { 39 e.printStackTrace(); 40 } 41 conn = null; 42 } 43 } 44 /** 45 * 释放语句执行者 46 * @param st 语句执行者 47 */ 48 public static void closeStatement(Statement st) { 49 if (st != null) { 50 try { 51 st.close(); 52 } catch (SQLException e) { 53 e.printStackTrace(); 54 } 55 st = null; 56 } 57 } 58 /** 59 * 释放结果集 60 * @param rs 结果集 61 */ 62 public static void closeResultSet(ResultSet rs) { 63 if (rs != null) { 64 try { 65 rs.close(); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 rs = null; 70 } 71 } 72 73 }
1 //插入一条数据 2 @Test 3 public void f3(){ 4 Connection conn = null; 5 ResultSet rs = null; 6 PreparedStatement st = null; 7 8 try { 9 //获取链接 10 conn = JdbcUtils.getConnection(); 11 12 //编写sql 13 String sql = "insert into category values(?,?)"; 14 15 //获取语句执行者 16 st = conn.prepareStatement(sql); 17 18 //设置参数 19 st.setString(1, "c005"); 20 st.setString(2, "户外"); 21 22 //执行sql 23 int i = st.executeUpdate(); 24 25 //处理结果 26 if(i==1){ 27 System.out.println("success"); 28 }else{ 29 System.out.println("fail"); 30 } 31 32 } catch (Exception e) { 33 e.printStackTrace(); 34 }finally{ 35 //释放资源 36 JdbcUtils.closeResource(conn, st, rs); 37 } 38 39 }
以上是关于1.JDBC-01的主要内容,如果未能解决你的问题,请参考以下文章