您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

java数据库基础

发表于:2017-08-08 作者:网络转载 来源:

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