2015/8/10/数据库基本操作/单例

数据库中的基本操作

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)表是否存在,如果不存在就创建
database

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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值