java数据库基础

Java数据库基础:
一:数据库概述,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;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值