一:数据库概述,SQLite数据库。
数据库(database)是按照数据结构来组织,存储、和管理数据的仓库,随着信息技术和市场的发展,数据库不再仅仅用来存储和管理数据,而是提供用户所需的各种数据管理方式。
数据库的特点:
数据结构化、数据的共享性高、冗余度低,易于扩展,数据的独立性高、数据由DBMS同意管理和控制。
常见的关系型数据库管理系统:Oracle,DB2,SQLServer,MySQL等
DBMS必须提供的数据控制功能:
数据的安全性(保护)、数据的完整性(检查),并发性(多个用户同时访问)、数据库的回复功能。
结构化查询语言,SQL:用于存取数据、查询、更新和管理关系型数据库
SQLite数据库。轻型的关系型数据管理系统,设计目标是嵌入式环境,
占用资源非常低,
二:基本SQL语句。
数据类型和约束:
SQLite采用动态数据类型,可以对字段不指定任何数据类型,SQLite会根据存入值自动判断。
数据类型:NULL空值、INTEGER带符号的整形,相当于Java中的Int型、REAL:浮点数字,相当于Java中的float/double型 TEXT/VARCHAR字符串文本,相当于Java中的String类,BLOB:二进制对象,相当于Java中的byte数组。
约束:数据表存储数据,有一些数据由明显的约束条件,如老师年龄>20;
CREATE TEBLE 创建时,应该将每个字段的约束条件进行说明,以后往表里天剑数据,系统会自动检查是否满足条件,不满足报错。
约束语句,NOT NULL 非空
UNIQUE 唯一 PRIMARY KEY 主键
FORFIGN KEY 外键。 CHECK 条件检查 DEFAULT默认
创建表:
create table tablename(col1 type1[not null][primarykey],col2 type2…)
create table tablename(表名)(col1(行名) type1(行数据的类型)[not null](限制语句)[primarykey],col2 type2…)
Insert语句:
insert into student (name,cid,gender,age,score)value(‘tom’,1,1,20,80.2);
Update语句:
update student set name=’jack’ where name=’tom’;
Select语句:
查询语句:select * from 表名;
查询ID为1的信息,select * from student where id=1;
*号代表要查询的信息,eg:
select id,name,score from student;查询id,name ,score 的所有信息
Delete语句:
有条件的删除:
delete from student where score<60;
drop table 表名;删除表。
两个表联查,不用外键。
select * from student1 a,employee b where(a.[id]=b.[id]) and( a.name=’song’)
三:JDBC API,Java程序访问数据库
JDBC 概念:是用于执行SQL语句的API,可以为多种关系型数据库提供统一访问,由一组Java语言编写的类和接口。
JDBC驱动的分4中类型:
1、JDBC——ODBC桥
把所有的JDBC的调用传递给ODBC,再让后者调用数据库文本驱动代码
2、本地API驱动:
通过客户端加载数据库厂商提供的本地代码库来访为数据库,而在驱动程序中包含了Java代码。
3、网络协议驱动:
给客户端提供一个网络API,客户端上的JDBC驱动程序使用套接字Socket来调用服务器上的中间件程序,后者将其请求转化为所需的具体API调用。
4、本地协议:
使用Socket,直接在客户端和数据库间通信。
JDBC的三件事: 与数据库连接、发送操作数据库的SQL语句,返回结果,
创建数据库的连接:
Java程序中完成以下两个操作获得与数据库的connection连接对象:
第一步:加载数据库驱动程序;
Class.forName(“org.sqlite.JDBC”);
第二部:建立连接:
Connection conn = DriverManager.getConnection(“jdbc:sqlite:d:/stu.db”,”“,”“);
参数说明;第一个为协议url,假定连接到D盘下的stu数据库;第二个为用户名,第三个为密码,
发送操作数据库的SQL语句,
JDBC提供了三个类用于向数据库发送SQL语句,
connection接口中的三个方法可用于常见这些类的实例
Statement:由Connection对象的createStatement方法创建Statement对象用于简单的SQL语句
PreparedStatement:由prepareStatement方法创建PreparedStatement对象,用来发送带有输入参数的SQL语句。
CallableStatement: 由prepareCall方法创建CallableStatement对象用于执行SQL存储过程。
处理结果:
完成向数据库发送操作语句后,数据库引擎执行完后返回一个结果,结果主要有两种形式:
对于更新语句:完成后返回一个受操作影响的行数。
对于查询语句: 返回查询结果集ResultSet
1、ResultSet的next()方法下移结果集中记录指针并判断当前记录指针是否为空。、
2、ResultSet中的getxxx()方法读取结果集中当前记录的字段信息。
eg:
package com.tian.sqlite;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class SqliteDemo {
public static void main(String[] args) {
List list = fetchData();
for(Employee e:list){
System.out.println(e);
}
Employee employee = login("tian","1234");
if(employee!=null){
System.out.println("登录成功"+" 欢迎:"+employee.getName());
}else{
System.out.println("登录失败"+" 请重新登录。");
}
Employee employee1 = login("song","5678");
if(employee1!=null){
System.out.println("登录成功"+" 欢迎:"+employee1.getName());
}else{
System.out.println("登录失败"+" 请重新登录。");
}
}
//实现读取数据库中某一个数据的全部信息。
public static Employee login(String name,String pwd){
Employee employee = null;
Connection conn=null;
//加载数据库驱动程序。
try {
Class.forName(“org.sqlite.JDBC”);
//建立连接。
conn = DriverManager.getConnection(“jdbc:sqlite:d:/company.db”);
//创建preparedStatement对象,接受带参数的SQL语句。
PreparedStatement ps = conn.prepareStatement(“select * from employee where name=? and pwd=?”);
ps.setString(1, name);
ps.setString(2, pwd);
ResultSet rs = ps.executeQuery();
while(rs.next()){
employee = new Employee(rs.getLong(1),rs.getString(2),rs.getString(3),rs.getInt(4));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return employee;
}
//读取数据库中的数据的函数,
public static List fetchData(){
Employee employee;
//定义一个List对象,
List list = new ArrayList();
//创建连接对象。
Connection conn = null;
try {
//加载数据库驱动程序。
Class.forName(“org.sqlite.JDBC”);
//建立连接。
conn = DriverManager.getConnection(“jdbc:sqlite:d:/company.db”);
//建立发送SQL语句的对象,
Statement state = conn.createStatement();
//赋值SQL语句,把SQL语句打包成一个String类型的变量。
String string = “Select * from employee”;
//利用Statement对象中的函数,发送SQL语句,并得到ResultSet类的一个对象
ResultSet set = state.executeQuery(string);
//利用next函数和get函数,赋值到Employee对象中,并加入到列表。
while(set.next()){
employee = new Employee(set.getLong(1),set.getString(2),set.getString(3),set.getInt(4));
list.add(employee);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (conn!= null) {
try {
//数据库连接为空时。关闭数据库连接conn.
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
}
java数据库基础
发表于:2017-08-08
作者:网络转载
来源:
 相关文章
前端到底是“技术深度”重要还是“技... 悟透一个小窍门,你就能举一反三掌握... 聊聊架构设计流程:设计备选方案 Java中的并发编程模型及其应对策略 掌握Java并发编程,避免无处不在的竞态条件 2024年,五个Java开发者应该关注的编程趋势- 周排行
- 月排行
-   缓存技术:加速应用,提高用户体验
-   六个好用的在线代码编辑器,你选哪个?
-   C++简单String类的实现
-   适合Java开发者学习的Python入门教程
-   在软件开发中实施AI与敏捷管理的九点建议
-   快速提升 UI 设计效果的 6 个小技巧
-   如何将SAST融入DevSecOps流程中?
-   微服务架构:构建高灵活性的分布式系统
-   这 14 个 VSCode 插件,让你写代码如同神一般
-   最全的C++资源大全,纯干货!
-   智能可穿戴设备的主要测试步骤
-   衡量软件产品质量的 14 个指标
-   自动化神器AutoIt,告别重复劳动
-   缓存技术:加速应用,提高用户体验