创建表

格式:

create table 表名(

   字段名 类型(长度) 约束,

   字段名 类型(长度) 约束
);

主键约束

主键是用于标识当前记录的字段。它的特点是非空,唯一。在开发中一般情况下主键是不具备任何含义,只是用于标识当前记录。

格式:

1、在创建表时创建主键,在字段后面加上 primary key.

create table tablename(
id int primary key,
.......
)

2、在创建表时创建主键,在表创建的最后来指定主键

create table tablename(

id int.......,

primary key(id)

)

3.删除主键:alter table 表名 drop primary key;

alter table sort drop primary key;

4.主键自动增长:一般主键是自增长的字段,不需要指定。

实现添加自增长语句,主键字段后加auto_increment(只适用MySQL)

插入表记录:

insert into 表 (列名1,列名2,列名3..) values  (1,2,3..); -- 向表中插入某些列

insert into 表 values (1,2,3..); --向表中插入所有列

更新表记录:

update 表名 set 字段名=,字段名=;

update 表名 set 字段名=,字段名=值 where 条件;

删除记录:delete

delete from 表名 [where 条件];
或者
truncate table 表名;

查询的语法:

查询指定字段信息

select 字段1,字段2,...from 表名;

例如:

select id,name from zhangwu;

查询表中所有字段

select * from 表名;

例如:

select * from zhangwu;

distinct用于去除重复记录

select distinct 字段 from 表名;

where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。

select 字段  from 表名  where 条件;

JDBC概述

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

mysql的驱动mysql-connector-java-5.1.39-bin.jar

JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!

JDBC开发步骤

  1. 注册驱动.

    通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。

    如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。

    Class.forName("com.mysql.jdbc.Driver");
    
  2. 获得连接

    获取连接需要方法 DriverManager.getConnection(url,username,password),三个参数分别表示

    Connection con = DriverManager.getConnection
    (“jdbc:mysql://localhost:3306/mydb”,”username”,”password”);
    
  3. 获得语句执行平台

    String sql = "某SQL语句";
    获取Statement语句执行平台:Statement stmt = con.createStatement();
    
    
    int executeUpdate(String sql); //--执行insert update delete语句.
    ResultSet executeQuery(String sql); //--执行select语句.
    boolean execute(String sql); //--执行select返回true 执行其他的语句返回false.
    
  4. 执行sql语句

  5. 处理结果

    ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据。

    re.next();		//指向第一行
    rs.getInt(1);	//获取第一行第一列的数据
    
  6. 释放资源

    rs.close();		//使用后的东西都要关闭!!!先得到的后关闭。
    stmt.close();
    con.close();
    

预处理对象

使用PreparedStatement预处理对象时,每条sql语句所有的实际参数,都使用逗号分隔。

String sql = "insert into sort(sid,sname) values(?,?)";  //?是占位符

PreparedStatement psmt = conn.prepareStatement(sql);

执行SQL语句的方法:

int executeUpdate(); //--执行insert update delete语句.
ResultSet executeQuery(); //--执行select语句.
boolean execute(); //--执行select返回true 执行其他的语句返回false.

设置实际参数

void setXxx(int index, Xxx xx) //将指定参数设置为给定Java的xx值。  index 是?的位置

封装JDBC工具类

“获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的方法,从而达到代码的重复利用。

public class JDBCUtils {
	public static final  String DRIVERNAME = "com.mysql.jdbc.Driver";
	public static final  String URL = "jdbc:mysql://192.168.6.127:3306/mydb";
	public static final  String USER = "root";
	public static final  String PASSWORD = "123456";

	static {
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {
			System.out.println("数据库驱动注册失败!");
		}
	}
	//提供获取连接的方法
	public static Connection getConn() throws Exception {
		// 2. 获得连接
		Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
		// 返回连接
		return conn;
	}
}

properties配置文件

使用properties配置文件

开发中获得连接的4个参数(驱动、URL、用户名、密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可。

通常情况下,我们习惯使用properties文件,此文件我们将做如下要求:

  1. 文件位置:任意,建议src下
  2. 文件名称:任意,扩展名为properties
  3. 文件内容:一行一组数据,格式是“key=value”.

1、输入“db.properties”文件名

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.6.129:3306/mydb
user=root
password=123456

2、加载配置文件:Properties对象

对应properties文件处理,采用加载properties文件获得流,然后使用Properties对象进行处理。

这里就可以优化上面的JDBCUtil文件~~~

public class JDBCUtils {

	private static String driver;
	private static String url;
	private static String user;
	private static String password;
	// 静态代码块
	static {
		try {
			// 1 使用Properties处理流
			// 使用load()方法加载指定的流
			Properties props = new Properties();
			Reader is = new FileReader("db.properties");
			props.load(is);
			// 2 使用getProperty(key),通过key获得需要的值,
			driver = props.getProperty("driver");
			url = props.getProperty("url");
			user = props.getProperty("user");
			password = props.getProperty("password");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 获得连接
	 */
	public static Connection getConnection() {
		try {
			// 1 注册驱动
			Class.forName(driver);
			// 2 获得连接
			Connection conn = DriverManager.getConnection(url, user, password);
			return conn;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

DBUtils

DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

Dbutils三个核心功能介绍

1、QueryRunner中提供对sql语句操作的API.

2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集.

3、DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

QueryRunner核心类

update(Connection conn, String sql, Object... params) //用来完成表数据的增加、删除、更新操作
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)	//用来完成表数据的查询操作

代码如下:

值得注意的是,这里params使用的是一个Object类的数组,因为你不知到你传递的是什么类型的数据。

//这里就看看添加的代码
public void insert(){
	try {
		//获取一个用来执行SQL语句的对象   QueryRunner
		QueryRunner qr = new QueryRunner();

		String sql = "INSERT INTO YYYY(XXX,XXX,XXX) VALUES(?,?,?)";
		Object[] params = {"000", 000, "000"};
		Connection conn = JDBCUtils.getConnection();
		int line = qr.update(conn,sql,params);// 用来完成表数据的增加、删除、更新操作
		//结果集处理
		System.out.println("line = " + line);

	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
}

ResultSetHandler结果集处理类

这里的额话呢,结果集的选择就是值得考虑的问题,要看不同的需求。

这里的JavaBean是一个封装数据的类,提供了getter和setter方法,并且提供了private私有字段。

连接池

个人觉得他跟线程池差不多,也就是避免资源的浪费,提高复用性。

DBCP连接池

DataSource : 它是java中提供的连接池,作为 DriverManager 工具的替代项。

public class JDBCUtils {
	public static final String DRIVER = "com.mysql.jdbc.Driver";
	public static final String URL = "jdbc:mysql://192.168.6.129:3306/daydb";
	public static final String USERNAME = "root";
	public static final String PASSWORD = "123456";
	/*
	 * 创建连接池BasicDataSource
	 */
	public static BasicDataSource dataSource = new BasicDataSource();
	//静态代码块
	static {
		//对连接池对象 进行基本的配置
		dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
		dataSource.setUrl(URL); //指定要连接的数据库地址
		dataSource.setUsername(USERNAME); //指定要连接数据的用户名
		dataSource.setPassword(PASSWORD); //指定要连接数据的密码
	}
	/*
	 * 返回连接池对象
	 */
	public static DataSource getDataSource(){
		return dataSource;
	}
}
11-30 08:22