JDBC-用Java语句操作数据库

JDBC

1. Jdbc概述

问题:实际开发中,不可能用工具或者命令行操作数据库,数据库表中的数据最终要使用Java程序来操作,那么Java中如何操作数据库中的数据呢?

答 : 在Java语言中,有一个专门连接数据库的规范(JDBC),专门负责连接数据库进行数据操作的规范

JDBC只是SUN编写的一堆接口(规范的体现),SUN公司自己并没有实现

问题 : 为什么SUN只定义一个JDBC规范,而不实现呢?

答 : 因为市面上的数据库很多,每个数据库内部接口不会向外暴露,而且即便是暴露让SUN去实现,市面上很多数据库全部要SUN来实现不现实

实际中哪个数据库需要支持JAVA语言,就需要自己实现Java的JDBC规范,因为实现了JDBC很多接口,那么就会有很多实现类,而很多实现类在java中会使用一个专门的包封装起来,叫做jar包(在JDBC中叫做驱动包),各大数据库产商实现JDBC规范以后都会把他们jar包放在官网上以供开发者下载使用

1.1. JDBC

JDBC(Java DataBase Connectivity):

是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基

JDBC规范对应的api包

2.java连接数据库

以连接mysql为例

2.1. 创建普通java项目

2.2. 在项目下面新建一个lib目录

2.3. 将MySQL驱动包拷贝到项目中并添加依赖

2.5 获取数据库连接对象

准备:

1.拷贝MySQL的驱动包到项目中去:mysql-connector-java-5.1.x-bin.jar

2.build path,告速项目去哪里去找字节码文件.

--------------------------------------------------------------------------------

操作JDBC的第一步,获取JDBC的连接对象.:Connection.

步骤:

1.加载注册驱动.

就是把驱动中的Driver字节码加载到JVM中.

Class.forName("com.mysql.jdbc.Driver");

为什么这句话就可以加载注册驱动?

第一步:把com.mysql.jdbc.Driver.class这份字节码加载到JVM中.

第二步:当一份字节码被加载进JVM,马上就会执行该字节码中的静态代码块.

第三步:该静态代码中,就在完成,先创建驱动对象,再注册.

2.通过DriverManager获取连接对象.

public static Connection getConnection(String url,String user,String password)

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName","root","admin");

jdbc:mysql://localhost:3306/dbName

jdbc:mysql:// :连接MySQL数据库的协议,不同数据库协议不一样

localhost:3306 :数据库软件的主机和端口

dbName : 具体要连接数据库

若数据库安装在本机,并且端口是默认的3306,则可以简写:

Connection conn = DriverManager.getConnection("jdbc:mysql:///dbName","root","admin");

验证已经获取连接:可以在MySQL控制台,使用命令:show processlist; 查看MySQL运行进程.

 1 public class GetConnectionDemo {
 2     public static void main(String[] args) throws Exception {
 3
 4         //1.加载注册驱动 : 把当前类对应的字节码加载到JVM中
 5         Class.forName("com.mysql.jdbc.Driver");
 6         //2.获取数据库连接
 7         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
 8         System.out.println(conn);
 9
10     }
11 }

3. 创建表-DDL操作

在其他操作之间先要把数据库表要创建出来

/贾琏欲执事

创建一张t_student表:

id:

name:

age:
 1 //DML : 对表数据的增删改操作
 2 public class DMLDemo {
 3
 4     /*
 5      * 向 t_student表中插入一条数据
 6      * sql : insert into t_student(name,age) values (‘乔峰‘,30)
 7      */
 8     @Test
 9     public void testInsert() throws Exception {
10         String sql = "insert into t_student(name,age) values (‘乔峰‘,30)";
11
12         // 1.加载注册驱动
13         Class.forName("com.mysql.jdbc.Driver");
14
15         // 2.获取数据库连接对象
16         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
17         // 3.创建语句对象
18         Statement st = conn.createStatement();
19
20         // 4.执行SQL语句
21         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
22         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
23         int rows = st.executeUpdate(sql);
24         System.out.println(rows);
25         //5.释放资源(先开后关)
26         st.close();
27         conn.close();
28
29     }
30     /*
31      * 删除操作: 删除t_student表中的某一条数据
32      * SQL :delete from t_student where id = 2
33      */
34     @Test
35     public void testDelete() throws Exception {
36         String sql = "delete from t_student where id = 2";
37
38         // 1.加载注册驱动
39         Class.forName("com.mysql.jdbc.Driver");
40
41         // 2.获取数据库连接对象
42         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
43         // 3.创建语句对象
44         Statement st = conn.createStatement();
45
46         // 4.执行SQL语句
47         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
48         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
49         int rows = st.executeUpdate(sql);
50         System.out.println(rows);
51         //5.释放资源(先开后关)
52         st.close();
53         conn.close();
54     }
55     /*
56      * 修改操作 : 修改t_student表中的某一条数据
57      * SQL : update t_student set name = ‘虚竹‘,age = 50 where id = 3
58      */
59     @Test
60     public void testUpdate() throws Exception {
61         String sql = "update t_student set name = ‘虚竹‘,age = 50 where id = 3";
62
63         // 1.加载注册驱动
64         Class.forName("com.mysql.jdbc.Driver");
65
66         // 2.获取数据库连接对象
67         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
68         // 3.创建语句对象
69         Statement st = conn.createStatement();
70
71         // 4.执行SQL语句
72         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
73         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
74         int rows = st.executeUpdate(sql);
75         System.out.println(rows);
76         //5.释放资源(先开后关)
77         st.close();
78         conn.close();
79     }
80 }

4.DML操作-表数据的增删改

 1 //DML : 对表数据的增删改操作
 2 public class DMLDemo {
 3
 4     /*
 5      * 向 t_student表中插入一条数据
 6      * sql : insert into t_student(name,age) values (‘乔峰‘,30)
 7      */
 8     @Test
 9     public void testInsert() throws Exception {
10         String sql = "insert into t_student(name,age) values (‘乔峰‘,30)";
11
12         // 1.加载注册驱动
13         Class.forName("com.mysql.jdbc.Driver");
14
15         // 2.获取数据库连接对象
16         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
17         // 3.创建语句对象
18         Statement st = conn.createStatement();
19
20         // 4.执行SQL语句
21         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
22         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
23         int rows = st.executeUpdate(sql);
24         System.out.println(rows);
25         //5.释放资源(先开后关)
26         st.close();
27         conn.close();
28
29     }
30     /*
31      * 删除操作: 删除t_student表中的某一条数据
32      * SQL :delete from t_student where id = 2
33      */
34     @Test
35     public void testDelete() throws Exception {
36         String sql = "delete from t_student where id = 2";
37
38         // 1.加载注册驱动
39         Class.forName("com.mysql.jdbc.Driver");
40
41         // 2.获取数据库连接对象
42         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
43         // 3.创建语句对象
44         Statement st = conn.createStatement();
45
46         // 4.执行SQL语句
47         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
48         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
49         int rows = st.executeUpdate(sql);
50         System.out.println(rows);
51         //5.释放资源(先开后关)
52         st.close();
53         conn.close();
54     }
55     /*
56      * 修改操作 : 修改t_student表中的某一条数据
57      * SQL : update t_student set name = ‘虚竹‘,age = 50 where id = 3
58      */
59     @Test
60     public void testUpdate() throws Exception {
61         String sql = "update t_student set name = ‘虚竹‘,age = 50 where id = 3";
62
63         // 1.加载注册驱动
64         Class.forName("com.mysql.jdbc.Driver");
65
66         // 2.获取数据库连接对象
67         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
68         // 3.创建语句对象
69         Statement st = conn.createStatement();
70
71         // 4.执行SQL语句
72         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
73         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
74         int rows = st.executeUpdate(sql);
75         System.out.println(rows);
76         //5.释放资源(先开后关)
77         st.close();
78         conn.close();
79     }
80 }

5. DQL操作-查询操作

5.1. 查询操作的分析

5.2 查询具体操作

结果集的列的位置

1.使用 rs.next() 偏移光标,循环指定具体的某一行

获取数据的具体方法


Object


getObject(int columnIndex) 
 columnIndex : 通过结果集的位置(1开始)获取对应的数据


Object


getObject(String columnLabel) 
columnLabel : 通过结果集的 列名获取对应的数据

  1 package cn.sxt.jdbc._01connection;
  2
  3
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.ResultSet;
  7 import java.sql.Statement;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10
 11 import org.junit.Test;
 12
 13 //DQL :查询操作
 14 public class D_DQLDemo {
 15
 16     /*
 17      * 多行查询 :查询t_student表中的所有数据
 18      * SQL : select * from t_student
 19      */
 20     @Test
 21     public void testList() throws Exception {
 22         String sql = "select * from t_student";
 23
 24         // 1.加载注册驱动
 25         Class.forName("com.mysql.jdbc.Driver");
 26
 27         // 2.获取数据库连接对象
 28         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
 29         // 3.创建语句对象
 30         Statement st = conn.createStatement();
 31
 32         // 4.执行SQL语句
 33         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
 34         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
 35         ResultSet rs = st.executeQuery(sql);
 36
 37
 38         //创建list集合用于封装Student对象
 39         List<Student> stus = new ArrayList<>();
 40
 41         while(rs.next()) {
 42             //1.通过结果集的位置获取对应的数
 43             /*Object id = rs.getObject(1);
 44             Object name = rs.getObject(2);
 45             Object age = rs.getObject(3);*/
 46
 47             //2.通过结果集的 列名获取对应的数据
 48             /*Object id = rs.getObject("id");
 49             Object name = rs.getObject("name");
 50             Object age = rs.getObject("age");*/
 51             //3.通过数据库数据和Java对应的数据类型获取对应的只
 52             int id = rs.getInt("id");
 53             String name = rs.getString("name");
 54             int age = rs.getInt("age");
 55             //System.out.println(id+","+name+","+age);
 56
 57             //将获取的数据封装成对应的Student对象
 58             Student stu = new  Student(id, name, age);
 59
 60             //将一个个Student对象添加到list集合中
 61             stus.add(stu);
 62         }
 63
 64         for (Student student : stus) {
 65             System.out.println(student);
 66         }
 67         //5.释放资源(先开后关)
 68         rs.close();
 69         st.close();
 70         conn.close();
 71     }
 72
 73
 74     /*
 75      * 单行查询: 查询出t_student 指定id的信息
 76      * SQL : select * from t_student where id = 1;
 77      */
 78     @Test
 79     public void testGetOne() throws Exception {
 80         String sql = "select * from t_student where id = 2";
 81
 82         // 1.加载注册驱动
 83         Class.forName("com.mysql.jdbc.Driver");
 84
 85         // 2.获取数据库连接对象
 86         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
 87         // 3.创建语句对象
 88         Statement st = conn.createStatement();
 89
 90         // 4.执行SQL语句
 91         // int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
 92         // ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
 93         ResultSet rs = st.executeQuery(sql);
 94
 95         if(rs.next()) {
 96             //1.通过结果集的位置获取对应的数
 97             /*Object id = rs.getObject(1);
 98             Object name = rs.getObject(2);
 99             Object age = rs.getObject(3);*/
100
101             //2.通过结果集的 列名获取对应的数据
102             /*Object id = rs.getObject("id");
103             Object name = rs.getObject("name");
104             Object age = rs.getObject("age");*/
105             //3.通过数据库数据和Java对应的数据类型获取对应的只
106             int id = rs.getInt("id");
107             String name = rs.getString("name");
108             int age = rs.getInt("age");
109             //System.out.println(id+","+name+","+age);
110
111             //将获取的数据封装成对应的Student对象
112             Student stu = new  Student(id, name, age);
113             System.out.println(stu);
114         }
115         //5.释放资源(先开后关)
116         rs.close();
117         st.close();
118         conn.close();
119     }
120 }

6. 预编译语句对象PreparedStatment

问题 : 我们有了Statment对象可以执行SQL,为什么还要使用PreparedStatment?

优势

  1. SQL语句结构清晰,参数的设置和SQL语句分离
  2. 性能更高
  3. 防止SQL注入

Statement: 表示静态SQL语句对象.

PreparedStatement:Statement的子接口,表示预编译SQL语句对象. 通过占位符(?)来拼SQL.

6.1 创建PreparedStatement

创建语句对象 Statment


Statement


createStatement() 
创建一个 Statement 对象来将 SQL 语句发送到数据库。

创建预编译语句对象PreparedStatement


PreparedStatement


prepareStatement(String sql) 
创建预编译语句对象,SQL是带有占位符的SQL模板.

 

原文地址:https://www.cnblogs.com/qq308015824/p/10887586.html

时间: 2025-01-05 06:49:46

JDBC-用Java语句操作数据库的相关文章

Java数据库连接——JDBC基础知识(操作数据库:增删改查)

一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

Java程序操作数据库SQLserver详解

数据库基本操作:增删改查(CRUD) crud介绍(增.删.改.查操作) CRUD是指在做计算处理时的增加(Create).查询(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单记事的首字母简写.主要被用在描述软件系统中数据库或者持久层的基本操作功能. Create new records Rctricvc cxisting rccords Update existing records Delete existing records. 要对数据表进行增.删.

【JDBC】java PreparedStatement操作oracle数据库

************************************************************************ ****原文:blog.csdn.net/clark_xu  徐长亮的专栏 ************************************************************************ import java.sql.Connection; import java.sql.ResultSet; import java

Java原生操作数据库(不使用框架)

1.引入数据库驱动的jar包 以通过maven引入mysql driver为例 1.1 到http://mvnrepository.com 搜索 mysql 1.2 复制所需maven配置文件到工程的 pom.xml <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactI

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( id int primary keyauto_increment, username varchar(20), password varchar(20) ); 2  添加依赖的jar包 c3p0-0.9.1.2.jar mysql-connection-java-5.0.8-bin.jar commons-beanutils-1.8.0.j

用SQL语句操作数据库

—―有一天,当你发觉日子特别的艰难,那可能是这次的收获将特别的巨大.—―致那些懈怠的岁月 本章任务: 学生数据库中数据的增加.修改和删除 目标: 1:使用T-SQL向表中插入数据 2:使用T-SQL更新表中数据 3:使用T-SQL删除表中数据 首先我们来简单的介绍一下SQL及它的作用是什么 在进行数据库管理时,如果每次创建数据库.表或者从数据库中读取数据,都需要手动在SQL Server Management Studio中进行的话,不但管理不方便,而且存储在数据库中的数据也根本无法提供给程序使

安卓java层操作数据库

一.在Android中查询数据库用到两个重要的类:  1.SQLiteDatabase:用来创建,删除,执行SQL命令,并执行其他常见的数据库管理任务. 2.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 返回Cursor对象 table:数据库里边表的名称 columns:需要查询出来数据库

编写SQL语句操作数据库(慕课SQLite笔记)

安卓常用数据存储方式之一SQLite学习及操作笔记 0.视频地址:http://www.imooc.com/video/3382 1.每个程序都有自己的数据库 默认情况下是各自互不干扰 1)创建一个数据库并且打开: SQLiteDatabase db=openOrCreateDatabase("user.db",MODE_PRIVATE,null); 2)使用游标cursor相当于存储结果的集合,可理解为list: 3)结束后必须释放游标. 2.具体代码: 1 public class

day20 在php中通过php语句操作数据库

第一步:连接数据库服务器 mysql_connect("数据库服务器地址","用户名","密码") 第二步:设定跟数据库打交道的网页的编码 mysql_query("set names 编码名")  //通常就是utf8 第三步:设定要使用的数据库名: mysql_query("use 数据库名"); 第四步:执行任意sql语句: $sql="insert/update/delete/select