数据库中的基本操作
java中对数据库操作的方法
单例设计模式
应用实例
数据库的最基本的语句
1.CREATE DATABASE clazz //创建一个数据库语句
2.CREATE TABLE student(id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,
stu_name varchar(30) BINARY NOT NULL ,
sex int(1),
age int(3))
//创建一个表,名称为table 其中 有属性id 设置为int类型 不允许为空(not null)设置为主键(primary key)设置为自增长模式(atuo_increment)另一个属性为stu_name 设置为varchar类型,长度为30个字节 binary (区分大小写)不允许为空,还有属性 sex 类型为int属性age 类型为int
3.insert into student (stu_name,sex,age)values(‘张三’,0,23)
在student表中插入(属性列表)values(值列表)
4.update student set age=22,sex=0 where id=2
在student表中更新(set)属性 age 和sex 在(where)id=2的对象上
5.select stu_name,age from student where stu_name=’ZHANG’
在student表中查询(属性stu_name,age )在(where)stu_name=’ZHANG’的条件下寻找
6.delete from student where id=1
在student表中删除(delete)在(where)id=1所指的对象上
7.CREATE TABLE IF NOT EXISTS teacher (id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,
stu_name varchar(30) BINARY NOT NULL ,
sex int(1),
age int(3))
重新创建一个名为teacher的表 首先判断(if not exists)表是否存在,如果不存在就创建
java中调用数据库的方法步骤
1.首先导入jdbc(java中数据库连接处理技术)jar包
String driver=”com.mysql.jdbc.Driver”; //连接数据库驱动
String url=”jdbc:mysql://localhost:3306/clazz”; //URL指向要访问的数据库名
String user=”root”; //MySQL配置时的用户名
String password=”123456”; //java连接mySQL配置时的密码
2.加载驱动Class.forName(driver);
3.连接数据库Connection conn=DriverManager.getConnection(url,user,password);
4.对数据库进行操作
java程序
package com.baidu.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
String driver="com.mysql.jdbc.Driver"; //连接数据库驱动
String url="jdbc:mysql://localhost:3306/clazz"; //URL指向要访问的数据库名
String user="root"; //MySQL配置时的用户名
String password="123456"; //java连接mySQL配置时的密码
try {
Class.forName(driver); //加载驱动
Connection conn=DriverManager.getConnection(url,user,password); //与数据库建立连接
if (!conn.isClosed()) { //判断数据库是否关闭
Statement state=conn.createStatement(); //数据库操作类
// String insert="insert into student (stu_name,sex,age)values('琪琪',0,25)";
// String update="update student set age=18 where id=4";
// String delete="delete from student where id=5";
// state.execute(update);
// 创建一个新的表
// String creatTable="create table user(id int(11) not null primary key auto_increment,user_name varchar(30) not null,password varchar(30) not null)";
// state.execute(creatTable);
String select="select * from student";
ResultSet set=state.executeQuery(select);
set.first();
while(!set.isAfterLast()){
String s=set.getString("stu_name");
System.out.println(s);
set.next();
}
System.out.println("执行成功");
}else{
System.out.println("请打开数据库");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
单例设计模式的创建方法
1.首先在一个类中写一个私有的构造器,
2.声明一个私有的、静态的对象(该类的对象)
3.创建一个共有的、静态的、带锁的、(防止多线程同时调用)的方法,在这个方法里利用创建的对象创建一个实例(这个实例就是调用了写有方法的构造器)然后return这个实例
单例设计模式的作用
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例
程序例子
注册用户
package com.baidu.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLManger {
/***
* 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,即无论多个线程还是多个新建的对象,都只有同一个对象
*
*/
private Statement statement;
public Statement getStatement() {
return statement;
}
public void setStatement(Statement statement) {
this.statement = statement;
}
private static SQLManger manger; //创建一个私有的属性
public static synchronized SQLManger newInstance(){ //创建一个私有的带有线程锁的静态方法,来保证只能创建一个实例
if (manger==null) { //如果manger为空,那么就创建一个对象
manger=new SQLManger();
}
return manger;
}
// 建立一个私有的构造器
private SQLManger(){
String driver="com.mysql.jdbc.Driver"; //连接数据库驱动
String url="jdbc:mysql://localhost:3306/clazz"; //URL指向要访问的数据库名
String user="root"; //MySQL配置时的用户名
String password="123456"; //java连接mySQL配置时的密码
try {
Class.forName(driver); //加载驱动
Connection conn=DriverManager.getConnection(url,user,password); //与数据库建立连接
if (!conn.isClosed()) { //判断数据库是否关闭
statement=conn.createStatement(); //数据库操作类
String creatTable="create table if not exists user(id int(11) not null primary key auto_increment ,user_name varchar(30) BINARY not null,password varchar(30) BINARY not null)";
// binary的作用是区分大小写 if not exists是判断名字为user的表是否存在
statement.execute(creatTable);
System.out.println("执行成功");
}else{
System.out.println("请打开数据库");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class MangerTest {
public static void main(String[] args) {
/***
* 验证单例设计模式是否是唯一的实例
* 返回的值指向同一个地址的话就说明只创建了一个实例
*/
SQLManger manger1=SQLManger.newInstance();
SQLManger manger2=SQLManger.newInstance();
System.out.println(manger1);
System.out.println(manger1);
}
}
需要调用上面的SQLManger
package com.baidu.sql;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.ActionEvent;
public class Registered extends JFrame {
private JPanel contentPane;
private JTextField textFieldUserName;
private JTextField textFieldPassWord;
private Statement state;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Registered frame = new Registered();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Registered() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 291, 277);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textFieldUserName = new JTextField();
textFieldUserName.setBounds(97, 45, 115, 36);
contentPane.add(textFieldUserName);
textFieldUserName.setColumns(10);
textFieldPassWord = new JTextField();
textFieldPassWord.setBounds(101, 98, 111, 36);
contentPane.add(textFieldPassWord);
textFieldPassWord.setColumns(10);
JButton btnNewButton = new JButton("确定");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String userName=textFieldUserName.getText(); //得到用户名
String passWord=textFieldPassWord.getText(); //得到passWord
state=SQLManger.newInstance().getStatement(); //连接数据库
String sql="select * from user where user_name='"+userName+"'"; //判断
try {
ResultSet set=state.executeQuery(sql); //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用
set.last(); //将游标放到最后
int num=set.getRow(); //获取当前行的标号
if (num>0) {
System.out.println("该用户已创建");
}else{
String register="insert into user(user_name,password) values('"+userName+"','"+passWord+"')";
state.execute(register); //执行方法找到一个与 methodName 属性同名的方法,并在目标上调用该方法
System.out.println("创建成功");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
btnNewButton.setBounds(97, 151, 115, 36);
contentPane.add(btnNewButton);
JLabel label = new JLabel("用户名");
label.setBounds(23, 55, 54, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("密码");
label_1.setBounds(23, 101, 54, 15);
contentPane.add(label_1);
JButton btnNewButton_1 = new JButton("退出");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
btnNewButton_1.setBounds(101, 206, 111, 33);
contentPane.add(btnNewButton_1);
}
}
登录
package com.baidu.sql;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.ActionEvent;
public class SingIn extends JFrame {
private JPanel contentPane;
private JTextField textFieldUserName;
private JTextField textFieldPassWord;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SingIn frame = new SingIn();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public SingIn() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 253, 332);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textFieldUserName = new JTextField();
textFieldUserName.setBounds(93, 78, 93, 23);
contentPane.add(textFieldUserName);
textFieldUserName.setColumns(10);
textFieldPassWord = new JTextField();
textFieldPassWord.setBounds(93, 137, 93, 23);
contentPane.add(textFieldPassWord);
textFieldPassWord.setColumns(10);
JButton btnNewButton = new JButton("登录");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String userName=textFieldUserName.getText();
String passWord=textFieldPassWord.getText();
Statement state=SQLManger.newInstance().getStatement();
String sql="select * from user where user_name='"+userName+"' and password='"+passWord+"'";
String sql1="select * from user where user_name='"+userName+"'";
String sql2="select * from user where user_name='"+passWord+"'";
try {
ResultSet set=state.executeQuery(sql);
set.last();
int num=set.getRow();
set.close();
ResultSet set1=state.executeQuery(sql1);
set1.last();
int num1=set1.getRow();
set1.close();
ResultSet set2=state.executeQuery(sql2);
set2.last();
int num2=set2.getRow();
set2.close();
System.out.println(num);
if (num==1){
System.out.println("登录成功");
num=0;
}
else if(num1==0){
System.out.println("该用户未注册,请先注册");
}
else if(num1==1&&num2==0){
System.out.println("密码不正确,请重新输入");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
btnNewButton.setBounds(93, 206, 93, 23);
contentPane.add(btnNewButton);
JLabel label = new JLabel("用户名");
label.setBounds(21, 81, 54, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("密码");
label_1.setBounds(21, 140, 54, 15);
contentPane.add(label_1);
JButton button = new JButton("关闭");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
button.setBounds(93, 261, 93, 23);
contentPane.add(button);
}
}