创建表
格式:
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开发步骤
注册驱动.
通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。
如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。
Class.forName("com.mysql.jdbc.Driver");
获得连接
获取连接需要方法 DriverManager.getConnection(url,username,password),三个参数分别表示
Connection con = DriverManager.getConnection (“jdbc:mysql://localhost:3306/mydb”,”username”,”password”);
获得语句执行平台
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.
执行sql语句
处理结果
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据。
re.next(); //指向第一行 rs.getInt(1); //获取第一行第一列的数据
释放资源
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文件,此文件我们将做如下要求:
- 文件位置:任意,建议src下
- 文件名称:任意,扩展名为properties
- 文件内容:一行一组数据,格式是“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;
}
}