1 JDBC入门

1.1 回顾

之前操作mysql数据库:

1)使用mysql客户端工具

2)使用客户端连接mysql服务器

3)发送sql语句到mysql服务器,执行

1.2 什么是JDBC?

使用java程序发送sql语句到数据库服务器端执行,这叫用到了JDBC技术!!!!

dbc是Oracle-Sun公司设计的一套专门用于java程序操作数据库的接口。

1.3 使用jdbc发送sql条件

连接mysql数据库:

数据库主机

端口

数据库用户名

数据库密码

连接的数据库

1.4JDBC的核心API

Connection接口:与具体的数据库的连接对象。

StatementcreateStatement()    创建一个静态sql语句对象

PreparedStatementprepareStatement(String sql)  创建预编译的sql语句对象

CallableStatementprepareCall(String sql)   创建存储过程的sql语句对象

Driver接口:数据库驱动程序的接口,所有具体数据库厂商需要的驱动程序需要实现此接口。

Connectionconnect(String url, Properties info)  用于获取数据库连接

案例:演示三种连接数据库的方式

在写程序之前,先要导入jar包;

步骤:

1.在project中创建一个文件夹lib

2.把jar包复制放入lib

3.在要导入的jar包点右键,build path --> Configure Build Path

public class DriverDemo {private static String url = "jdbc:mysql://localhost:3306/homework";private static String user = "root";private static String password = "root";public static void main(String[] args) throws Exception {conn1();conn2();conn3();}private static void conn3() throws Exception {//mysql驱动程序的driver实现类对象的静态代码块中已经注册了驱动//将Driver实现类对象加载到内存中,即可以完成注册Class.forName("com.mysql.jdbc.Driver");//获取连接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);}private static void conn2() throws Exception {Driver driver = new com.mysql.jdbc.Driver();//注册驱动DriverManager.registerDriver(driver);//获取链接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);}private static void conn1() throws Exception {//创建一个驱动类对象DriverDriver driver = new com.mysql.jdbc.Driver();Properties prop = new Properties();prop.setProperty("user", user);prop.setProperty("password", password);Connection conn = driver.connect(url, prop);System.out.println(conn);}
}

Statement接口:用于执行静态 SQL 语句

nt executeUpdate(String sql)  执行更新操作的sql语句                                                                                                                                                                           (create/alter/drop) DDL语句

public class Demo1 {private static String url = "jdbc:mysql://localhost:3306/homework";private static String user = "root";private static String password = "root";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {//注册驱动Class.forName("com.mysql.jdbc.Driver");//获取连接conn = DriverManager.getConnection(url, user, password);//创建语句执行者stmt = conn.createStatement();String sql = "CREATE TABLE student("+"id INT,"+"NAME VARCHAR(20),"+"age INT"+");";//执行sql语句int count = stmt.executeUpdate(sql);System.out.println(count);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

(insert/update/delete)DML语句

为了使代码更加简洁,我们先写一个JDBCUtil类,供我们使用

public class JDBCUtil {private static String url = "jdbc:mysql://localhost:3306/homework";private static String user = "root";private static String password = "root";static{try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//获取连接public static Connection getConn(){try {Connection conn = DriverManager.getConnection(url, user, password);return conn;} catch (Exception e) {e.printStackTrace();throw new RuntimeException();}}//释放资源public static void close(Connection conn,Statement stmt,ResultSet rs){if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}       }
}

DML语句演示:

public class Demo2 {public static void main(String[] args) {testInsert();testUpdate();testDelete();}private static void testDelete() {Connection conn = null;Statement stmt = null;try {//获取连接对象conn = JDBCUtil.getConn();//定义sqlString sql = "delete from student where id=1";//获取语句执行者stmt = conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException();}finally{JDBCUtil.close(conn, stmt, null);}}private static void testUpdate() {Connection conn = null;Statement stmt = null;try {//创建连接对象conn = JDBCUtil.getConn();//定义sqlString sql = "update student set name='Hins Chueng' where id=1";//获取语句执行者stmt = conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException();}finally{//释放资源JDBCUtil.close(conn, stmt, null);}}private static void testInsert(){Connection conn = null;Statement stmt = null;//获取连接对象try {conn = JDBCUtil.getConn();//定义sqlString sql = "insert into student values(1,'Hins',33)";//获取语句执行者stmt = conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException();}finally{JDBCUtil.close(conn, stmt, null);}}
}

ResultSet executeQuery(String sql)  执行查询操作的sql语句(select)(DQL查询语句)

演示:

public class Demo3 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {//获取连接对象conn = JDBCUtil.getConn();//定义sqlString sql = "select * from student";//获取语句执行者对象stmt = conn.createStatement();rs = stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getInt("ID")+"--"+rs.getString("name")+"--"+rs.getInt("age"));}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{JDBCUtil.close(conn, stmt, rs);}}
}

这里executeQuery()的返回值是ResultSet (类似迭代器),通过ResultSet.next()判断是否存在数据,Result.getInt(),或者get其他类型的数据,传入改字段的名称,即可返回该该行对应的查询值;

PreparedStatement接口:用于执行预编译的 SQL语句(是Statement的子接口)

intexecuteUpdate()  执行更新操作的sql语句

ResultSetexecuteQuery()  执行查询操作的sql语句

演示:

public class Demo {public static void main(String[] args) {
//      testInsert();
//      testUpdate();
//      testDelete();testSelect();}private static void testSelect() {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {conn = JDBCUtil.getConn();String sql = "select * from student where id=?;";stmt = conn.prepareStatement(sql);stmt.setInt(1, 1);rs = stmt.executeQuery();while (rs.next()) {System.out.println(rs.getInt("id")+"--"+rs.getString("name")+"--"+rs.getInt("age"));}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{JDBCUtil.close(conn, stmt, rs);}}private static void testDelete() {Connection conn = null;PreparedStatement stmt = null;try {//创建连接对象conn = JDBCUtil.getConn();//定义sqlString sql = "delete from student where id=?;";//创建语句执行者对象stmt = conn.prepareStatement(sql);stmt.setInt(1, 2);stmt.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{JDBCUtil.close(conn, stmt, null);}}private static void testUpdate() {Connection conn = null;PreparedStatement stmt = null;try {//创建连接对象conn = JDBCUtil.getConn();//定义sqlString sql = "update student set name=? where id=?";//创建语句执行者对象stmt = conn.prepareStatement(sql);stmt.setString(1, "Jacky Chueng");stmt.setInt(2,2);stmt.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{JDBCUtil.close(conn, stmt, null);}}private static void testInsert() {Connection conn = null;PreparedStatement stmt = null;try {//创建连接对象conn = JDBCUtil.getConn();//定义sqlString sql = "insert into student values(?,?,?);";//创建语句执行者对象stmt =  conn.prepareStatement(sql);stmt.setInt(1, 2);stmt.setString(2, "Hins Chueng");stmt.setInt(3, 33);stmt.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{JDBCUtil.close(conn, stmt, null);}      }
}

利用数据库完成登陆案例:

public class Login {private static String user = "uu";private static String password = "123456";public static void main(String[] args) {//用Statement做Login1();//用PreparedStatement做Login2();}private static void Login2() {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {conn = JDBCUtil.getConn();String sql = "select * from user where name=? and password=?";stmt = conn.prepareStatement(sql);stmt.setString(1, user);stmt.setString(2, password);rs = stmt.executeQuery();if(rs.next()){System.out.println("登陆成功");}else{System.out.println("登陆失败");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{JDBCUtil.close(conn, stmt, rs);}}private static void Login1() {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {//创建连接对象conn = JDBCUtil.getConn();//设置sql语句String sql = "select * from user where name='"+user+"' and password='"+password+"'";//创建语句执行者stmt = conn.createStatement();rs = stmt.executeQuery(sql);if(rs.next()){System.out.println("登陆成功");}else{System.out.println("登陆失败");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{JDBCUtil.close(conn,stmt,rs);}      }
}

这里使用了PreparedStatement 和 Statement 两种方法来完成这个功能,但是如果使用Statement 验证登陆的话,会出现不安全的情况,就是在修改输入的用户名,在用户名后加入 ' OR 1=1 --  ,就会使代码恒成立,即当user表中有数据时,即使用户名和密码都错误,也可以完成登陆;

CallableStatement接口:用于执行 SQL 存储过程的接口(是PreparedStatement的子接口)

ResultSet  executeQuery()  执行存储过程的sql语句

案例演示:

public class Demo {public static void main(String[] args) {//执行带输入输出参数的存储过程test();}private static void test() {// TODO Auto-generated method stubConnection conn = null;CallableStatement stmt = null;ResultSet rs = null;try {conn = JDBCUtil.getConn();String sql = "call Pro_NameById(?,?);";stmt = conn.prepareCall(sql);//给问号赋值stmt.setInt(1, 1);//如果存储过程带有输出参数的时候,首先需要注册,输出参数的类型stmt.registerOutParameter(2, java.sql.Types.VARCHAR);//发送并执行SQLstmt.executeQuery();System.out.println(stmt.getString(2));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{JDBCUtil.close(conn, stmt, rs);}     }
}

ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。

booleannext() : 把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数据,返回false。

getXXX(列索引|列字段名称): 获取字段的数据

图解:

使用方法类似迭代器,获取数据时时通过getInt getBoolean 等方法获取该字段数据;

MySQL学习笔记_03相关推荐

  1. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...

  2. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  3. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  4. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  5. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

最新文章

  1. scrum敏捷开发工具实践分享
  2. 年运行10万台服务器数据中心方案设计公示
  3. 阿里云人脸识别公测使用说明
  4. eclipce 快捷键
  5. Docker 容器的运行(八)
  6. POJ-3660.Cow Contest(有向图的传递闭包)
  7. kali字典暴力破解教程
  8. 【windows】Windows电脑怎么卸载服务/删除服务?
  9. macos显卡测试软件,GpuTest显卡测试软件 for Mac 64位
  10. Android面试准备复习之Android知识点大扫描
  11. 基于matlab水轮机期刊,四川紫坪铺电站水轮机综合特性三维建模
  12. 8乘8led点阵显示数字_8乘以8点阵显示依次从左往右全部点亮,有老哥有51编程语言吗?...
  13. XUPT 寒假算法集训第三周
  14. 手机扫码传文件免安装免流工具教程
  15. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍
  16. linux web 网站搭建
  17. 蚂蚁金服、滴滴们掀起A/H上市潮,它们能打破折溢价的烦恼吗?
  18. Linux定时器一(最小堆)
  19. SparkSession简单介绍
  20. 计算机视觉——张正友棋盘格标定法

热门文章

  1. 计算机磁盘管理和容量不一致,官方数据:为什么硬盘可用容量显示错误,以及硬盘容量与实际情况不符的原因...
  2. 花千骨歌曲大全 附简谱
  3. 创维智能电视(SKYWORTH)如何开启U盘安装(酷开系统)
  4. 吹爆这个Java 结构化数据处理开源库 SPL
  5. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java面向新手投资者的虚拟股票交易系统h1o29
  6. 信息安全产品体系的介绍
  7. Cycle3-Group1
  8. PostgreSQL变更表Owner
  9. 为你留存最美好的岁月——汉印CP4000L体验评测
  10. 京东开源人脸识别项目faceX-zoo