数据时代
一、简介
1、什么是数据库?
数据库是一种存储结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据时重新输入。
特点:
实现数据共享
减少数据冗余
数据独立性
数据实现集中控制
数据的一致性和可维护性
2、数据库内容:
DATABASE(库)
TABLE(表)
字段 属性 主键:一个TABLE中不能重复,能用这个值确定唯一的一条数据
外键:一个表中的数据持有的别的表的主键。
mySQL忽略大小写 auto_increment 自增长
3、使用数据库进行增(insert)删(delete)改(update)查(select)
String insert = "insert intostudent(stu_name,sex,age)value('李四',1,20)";//增加
state.execute(insert);
String delete = "delete from student where sex=0 ";//删除
state.execute(delete);
String update = "update student set age=18 wherestu_name='李四'";//更改
state.execute(update);
String select = "select * from student";// 查找
ResultSet set = state.executeQuery(select);
set.first();// 先把游标移动到第一位
while (!set.isAfterLast()) {// 当游标不是在最后一个
String name = set.getString("stu_name");
System.out.println(name);
set.next();// 游标指向下一个位置
4、常用知识点说明
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’
— 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
二、用户注册登陆系统
1、首先新建一个User库
public class DatabaseTest {
public static void main(String[] args) {
// 导入数据库jar的驱动
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名
String url = "jdbc:mysql://localhost:3306/clazz";
// mysql配置时的用户名
String user = "root";
// Java连接mysql配置时的密码
String password = "123456";
try {
Class.forName(driver);// 加载驱动
Connection con = DriverManager.getConnection(url, user, password);// 与数据库建立连接
if (!con.isClosed()) {
Statement state = con.createStatement();
String table = "CREATE TABLE if not exists user(id int(12) NOT NULL primary key auto_increment ,user_name varchar(30) not null,password varchar(30) not null)";
state.execute(table);
}
System.out.println("执行完成");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2、单例设计模式:
首先将修饰符改为private 构造器
公有的静态的方法
public class SQLManager {
private Statement statement;
public Statement getStatement() {
return statement;
}
public void setStatement(Statement statement) {
this.statement = statement;
}
private static SQLManager manager;
public static synchronized SQLManager newInstance() {
if (manager == null) {
manager = new SQLManager();
}
return manager;
}
private SQLManager() {
// 导入数据库jar的驱动
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名
String url = "jdbc:mysql://localhost:3306/clazz";
// mysql配置时的用户名
String user = "root";
// Java连接mysql配置时的密码
String password = "123456";
try {
Class.forName(driver);// 加载驱动
Connection con = DriverManager.getConnection(url, user, password);// 与数据库建立连接
// 数据库操作类
statement = con.createStatement();
System.out.println("执行完成");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、用户注册界面的实现:
btnNewButton = new JButton("提交");//提交按钮
btnNewButton.setBounds(103, 170, 93, 23);
btnNewButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String Username = textFieldUserName.getText();
String password = textFieldPassword.getText();
Statement state = SQLManager.newInstance().getStatement();
String sql = "select * from user where user_name='" + Username + "'";
try {
ResultSet set = state.executeQuery(sql);//运行给定的 sql 语句并返回单一的 ResultSet 对象。
set.last();//游标移到最后一行
int num = set.getRow();//得到Username的行号
if (num > 0) {
System.out.println("已存在");
} else {
String login = "insert into user(user_name,password)value('" + Username + "','" + password
+ "')";
state.execute(login);
System.out.println("注册成功");
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
contentPane.add(btnNewButton);
JLabel label = new JLabel("\u7528\u6237\u540D");//用户名
label.setBounds(34, 66, 54, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("\u5BC6\u7801");//密码
label_1.setBounds(37, 122, 54, 15);
contentPane.add(label_1);
}
}
5、完整的用户登陆程序
public class UserLogin extends JFrame {
private JPanel contentPane;
private JTextField textFieldUsername;
private JTextField textFieldPassword;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UserLogin frame = new UserLogin();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public UserLogin() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 325, 316);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
/**
用户名窗口的设计
*/
textFieldUsername = new JTextField();
textFieldUsername.setBounds(111, 64, 107, 29);
contentPane.add(textFieldUsername);
textFieldUsername.setColumns(10);
/**密码窗口的设计*/
textFieldPassword = new JTextField();
textFieldPassword.setBounds(111, 118, 107, 29);
contentPane.add(textFieldPassword);
textFieldPassword.setColumns(10);
JButton btnNewButton = new JButton("确认");//按钮
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String Username = textFieldUsername.getText();//得到写入的用户名
String password = textFieldPassword.getText();//得到写入的密码
Statement state = SQLManager.newInstance().getStatement();
String sql="select * from user where user_name='"+Username+"' and password='"+password+"'";
try {
ResultSet set = state.executeQuery(sql);
set.last();//游标移到最后一行
int num = set.getRow();
System.out.println(num);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnNewButton.setBounds(111, 178, 93, 23);
contentPane.add(btnNewButton);
JLabel lblNewLabel = new JLabel("\u7528\u6237\u540D");
lblNewLabel.setBounds(48, 67, 54, 15);
contentPane.add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("\u5BC6\u7801");
lblNewLabel_1.setBounds(48, 121, 54, 15);
contentPane.add(lblNewLabel_1);
}
}