20数据库操作
20.1数据库基本知识
20.1.1什么是数据库
- 数据库是一种存储结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据的时候重新输入他们。
- 特点:
- 实现数据共享
- 减少数据的冗余度
- 数据的独立性
- 数据实现集中控制
- 数据一致性和可维护性
- 安全性控制、完整性控制、并发控制、故障的发现和恢复
- 是数据管理的高级阶段,由文件管理系统发展起来
- 基本结构分为三个层次:
- 物理数据层
- 概念数据层
- 逻辑数据层
20.1.2数据库的种类及功能
- 层次型:对数据的各项操作都很困难
- 网状型:容易实现多对多的联系
- 对象模型数据库:建立在面向对象模型基础上
- 关系数据库:最流行,基于关系模型建立,关系模型由一系列表格组成
MySQL,DBMS
20.1.3SQL语言
- Structure Query Language
- 组成:
- 数据定义语言DDL
- 数据操纵语言DML
- SELECT语句
select name,age from tb_emp where sex ='女' order by age;
- INSERT语句
insert into tb_emp value2(2,'lili','女','销售部');
- UPDATE语句
update tb_emp set age = 24 where id = 2;
- DELETE语句
delete from tb_emp where id = 1024;
- 数据控制语言DCL
- 事务控制语言
20.2JDBC概述
- 连接数据库和Java应用程序的一个纽带
20.2.1JDBC-ODBC桥
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc.odbc:tom","","");
Statement sql=conn.creatStatement();
20.2.2JDBC技术
- Java DataBase Connectivity 面向对象的应用程序接口
- JDBC技术主要完成以下几个任务
- 与数据库建立一个连接
- 向数据库发送SQL语句
- 处理从数据库返回的结果
- 并不能直接访问数据库,依赖于数据库厂商提供的JDBC驱动程序
20.2.3JDBC驱动程序的类型
- JDBC总体结构:应用程序、驱动程序管理器、驱动程序和数据源
- JDBC驱动分为:
- JDBC-ODBC桥
- 本地API一部分用Java编写的驱动程序
- JDBC网络驱动
- 本地协议驱动
- JDBC网络驱动和本地协议驱动是JDBC访问数据库的首选
20.3JDBC中常用的类和接口
20.3.1Connection接口
- Connection接口代表与特定的数据库的连接
20.3.2Statement接口
- 在已经建立连接的基础上向数据库发送SQL语句
- 三种Statement对象
- Statement:执行不带参数的简单的SQL语句
- PreparedStatement:继承Statament,执行动态的SQL语句
- CallableStatement:继承了PreparedStatement,执行对数据库的存储过程的调用。
20.3.3PreparedStatemengt接口
20.3.4DriverManager类
- 管理数据库中的所有驱动程序。
- JDBC的管理层,作用域用户和驱动程序之间。
20.3.5ResultSet接口
- 类似于一个临时表,暂时存放数据库查询操作所获得的结果集。
- Result实例具有指向当前数据行的指针,指针开始的位置在一条记录的前面,通过next()方法可将指针向下移。
20.4数据库操作
20.4.1连接数据库
- 加载数据库的驱动程序(只需要在第一次访问数据库时加载一次)
- 每次访问创建一个Connection对象
- 之后执行操作数据库的SQL语句
- 最后完成数据库操作销毁前面创建的Connection对象,释放与数据库的连接
package com.ShuJuKu;
import java.sql.*;
public class Conn {
Connection con;
public Connection getConnection(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch (ClassNotFoundException e){
e.printStackTrace();
}
try{
con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName" +
"=test", "sa","123456");
//con=DriverManager.getConnection("jdbc:mysql" +
// "://localhost:1433/XX","DESETOP-Q7ASRR7",
// "XXXX");jdbc:sqlserver://localhost:1433; DatabaseName=test
System.out.println("数据库连接成功");
Statement sql=con.createStatement();
}catch (SQLException e){
e.printStackTrace();
}
return con;
}
public static void main(String[] args) {
Conn c=new Conn();
c.getConnection();
}
}
- 连接数据库费了很大劲,昨天晚上11点半才连接成功,
- 没有安装数据库;去CSDN找相应的安装教程
- 没有安装相应的JDBC;去CSDN找相应的配置教程
- 按照教程配置完后报错:No Suitable Driver Found For Jdbc
- 这种情况的原因有四个:
/*1, 连接URL格式出现了问题,书上格式不对,正确格式为:con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test,"xxxx","xxxx");当然我的数据库的账号密码不能告诉你们。
2, 驱动字符串出错,正确格式为:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
3, Classpath中没有加入合适的mysql_jdbc驱动。没看懂这点说的什么意思,其实做完第四点我的并不能用,又鼓捣了几下,不知道什么操作,后来改了一下URL格式成功解决。
4, 尝试着将mysql-connector-java-5.1.34-bin.jar的jar包加入C:\Program Files\Java\jre1.6.0_02\lib\ext文件夹下(或者直接导入项目中),问题解决
- 无法打开登录所请求的数据库,登录失败
%252522%25257D&request_id=161133057416780271540844&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-42874989.pc_search_result_no_baidu_js&utm_term=IDEA%20%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E7%99%BB%E5%BD%95%E6%89%80%E8%AF%B7%E6%B1%82%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93
- 。另外还要确保你的用户名和密码是对的,然后你确实创建了一个数据库,我就是没有创建数据库就要连接数据库,导致一直连接不上。
昨晚配置数据库配置的我怀疑人生,我发现每次遇到故障,查遍CSDN也解决不了,认为自己的故障是独一无二的,是不可解决的,是老天的故意刁难,其实你没有那么特殊,CSDN上这么多人,你的故障不可能是第一次出现,一个编程小白,最大的可能就是你自己的水平不够。之所以解决不了是因为你没有完全理解完全看懂别人的博文,操作有瑕疵才导致的不好用。
所以说遇到故障(bug)还是得保持一个平和的心态,冷静的大脑,耐耐心心地把别人地博文看懂,这样才能事半功倍,这样自己才能成长。 - 到此,数据库就基本配置完成了,进入接下来的操作阶段。
20.4.2向数据库发送SQL语句
20.4.3处理查询结果集
20.4.4顺序查询
20.4.5模糊查询
20.4.6预处理语句
20.4.7添加、修改、删除记录
直接做了最后的案例
package com.ShuJuKu;
import java.sql.*;
public class Renewal {
static Connection con;
static PreparedStatement sql;
static ResultSet res;
public Connection getConnection(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch (ClassNotFoundException e){
e.printStackTrace();
}
try{
con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName" +
"=test", "xxx","xxxx");
System.out.println("数据库连接成功");
Statement sql=con.createStatement();
}catch (SQLException e){
e.printStackTrace();
}
return con;
}
public static void main(String[] args) {
Renewal c=new Renewal();
con=c.getConnection();
try{
sql=con.prepareStatement("select*from table_1");
res=sql.executeQuery();
System.out.println("执行增加、修改、删除前数据:");
/*while(res.next()){
String id=res.getString(1);
String name=res.getString("name");
String sex=res.getString("sex");
String birthday=res.getString("birthday");
System.out.println("编号:"+id);
System.out.println("姓名:"+name);
System.out.println("性别:"+sex);
System.out.println("生日:"+birthday);
}*/
sql=con.prepareStatement("insert into table_1 values(?," +
"?,?,?)");
sql.setInt(1,10);
sql.setString(2,"张宏");
sql.setString(3,"女");
sql.setString(4,"1993-10-20");
sql.executeUpdate();
sql=con.prepareStatement("insert into table_1 values(?," +
"?,?,?)");
sql.setInt(1,10);
sql.setString(2,"焦某");
sql.setString(3,"男");
sql.setString(4,"1998-08-24");
sql.executeUpdate();
sql=con.prepareStatement("update table_1 set birthday = " +
"? where id = ?");
sql.setString(1,"1994-11-02");
sql.setInt(2,2);
sql.executeUpdate();
/*sql=con.prepareStatement("delete from table_1 where
" +
"id =" +
" ?");
sql.setInt(1,1);
sql.executeUpdate();*/
sql=con.prepareStatement("select * from table_1");
res=sql.executeQuery();
System.out.println(" 执行增加、修改、删除后的数据:");
while(res.next()){
String id=res.getString(1);
String name=res.getString("name");
String sex=res.getString("sex");
String birthday=res.getString("birthday");
System.out.println("编号:"+id);
System.out.println("姓名:"+name);
System.out.println("性别:"+sex);
System.out.println("生日:"+birthday);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
仅限于运行成功,由于对数据库的知识太过缺乏,玩不太转。
数据库入门到此为止,只是简单地了解了一下。
今天 休息了一天,明天开始刷leetcode和看数据结构。