Java学习之路0810(建立与数据库的连接)

数据库的创建与连接

连接数据库,首先要创建数据库和表
创建数据库的SQL语句如下:CALZZ为数据库的名称

CREATE DATABASE CALZZ

创建表的SQL语句:create table 表名(字段名,字段类型(字段长度))
student为表的名字(属性 主键(一个Table中只能有一个主键,使用这个值唯一标示一条数据),如:id。属性名字,属性类型(长度)是否允许为空 是否为主键PRIMARY KEY,是否自增长AUTO_INCREMENT,是否忽略大小写,SQL语句默认为忽略大小写)(允许拥有别的表中的主键,即外键)

CREATE TABLE student (id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,name varchar(20) NOT NULL BINARY,sex int(1) BINARY,age int (3) BINARY)

SQL语句的增、删、改、查。

增insert语句:

insert into 表名(字段名1,字段名2,···) value (属性值1,属性值2,···)
例如:insert into student(name,sex,age)values(‘张三’,1,18)

删delect语句:

delect from 表名 where 条件表达式
例如:delete from student where id=8

改update语句

update 表名 set 字段名=新的字段值 where 条件表达式
例如:update student set name=’王五’ where id=7

查select语句

select 所选字段列表 from 数据表明 where 条件表达式 Group by 字段名 having 条件表达式(指定分组的条件) order by 字段名[asc|desc]
例如:SELECT * FROM USER WHERE name=’LISI’ and password=’123456’

连接数据库的时候,需要将SQL的jar包导入

这里写图片描述
数据库名,用户名,密码
这里写图片描述连接数据驱动
连接数据驱动

**
 * 建立于数据库的连接
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.xml.transform.Result;

import jie0805.Consumer;

public class MySQLTest {
    public static void main(String[] args) {
        //链接数据库驱动
        String driver="com.mysql.jdbc.Driver";
        //URL指向要访问的数据库名
        String url="jdbc:mysql://localhost:3306/calzz";
        //MySQL配置使得用户名
        String user="root";
        //Java连接MySQL时配置的密码
        String password="2012163";
        try {
            Class.forName(driver);//加载驱动
            //与数据库建立连接
            //通过DriverManager的静态方法getConnection创建连接对象
            Connection conn=DriverManager.getConnection(url,user,password);
            if (!conn.isClosed()) {
                //数据库操作类
                //向数据库发送一个SQL语句,使用一个statement接口声明一个SQL语句对象
                //并通过刚创建的连接数据库对象的createStatement创建这个SQL对象
                Statement state=conn.createStatement();
                String sql="insert into student(name,sex,age)values('张三',1,18)";
//              state.execute(sql);
                String update="update student set name='王五' where id=7";
                state.execute(update);
                String delete="delete from student where id=8";
                //execute执行静态的SQL语句,返回多个结果集
                //executeQuery执行静态的SQL语句,返回单个结果集ResultSet对象
                state.execute(delete);
                String select="select * from student";
//              state.executeQuery(select);
                //用来暂时存放数据库查询操作的所获得结果集
                ResultSet set=state.executeQuery(select);

                //first将指针或光标一道当前记录的第一行,last将指针或光标一道当前记录的最后一行
                set.first();
                while (!set.isLast()) {
                    System.out.println(set.getString("name"));
                    //将指针或光标一道当前记录的下一行
                    //getRow查看当前行的索引号
                    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、私有静态的属性

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SQLManager {
    public Connection conn;
    public Connection getConn() {
        return conn;
    }
    public void setConn(Connection conn) {
        this.conn = conn;
    }
    public Statement state;
    public Statement getState() {
        return state;
    }
    public void setState(Statement state) {
        this.state = state;
    }
    //单例设计模式
    private static SQLManager manager;
    public static synchronized SQLManager newInstabce(){
        if (manager==null) {
            manager=new SQLManager();
        }
        return manager;
    }
    private SQLManager() {

        //链接数据库驱动
        String driver="com.mysql.jdbc.Driver";
        //URL指向要访问的数据库名
        String url="jdbc:mysql://localhost:3306/calzz";
        //MySQL配置使得用户名
        String user="root";
        //Java连接MySQL时配置的密码
        String password="2012163";
        try {
            Class.forName(driver);//加载驱动
            //与数据库建立连接
            conn=DriverManager.getConnection(url,user,password);
            if (!conn.isClosed()) {
                //数据库操作类
                state=conn.createStatement();
                String creatTable="CREATE TABLE if not exists user (id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,name varchar(20) BINARY NOT NULL,password int(6) NOT NULL )";
    state.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();
        }

    }

}

Test类

public class SQLTest {
    public static void main(String[] args) {
        SQLManager manaer1=SQLManager.newInstabce();
        SQLManager manaer2=SQLManager.newInstabce();
        SQLManager manaer3=SQLManager.newInstabce();
        System.out.println(manaer1+"\n"+manaer2+"\n"+manaer3);
    }
}

执行的结果对象只有一个:
执行成功
jie0810.SQLManager@8cf4c6
jie0810.SQLManager@8cf4c6
jie0810.SQLManager@8cf4c6

客户端直接连接数据库

/**
*主要代码,可以写在按钮事件响应里
*/
                Statement statement=SQLManager.newInstabce().getState();
                String name=textFieldName.getText();
                String password=textField_1Password.getText();
//              boolean isSignIn=SQLOperate.isSignIn(name, password);
//              if (isSignIn) {
//                  System.out.println("登陆成功");
//              }else{
//                  System.out.println("登陆失败");
//              }
                String login="select * from user where BINARY name='"+name+"'and password='"+password+"'";
                try {
                    ResultSet set=statement.executeQuery(login);
                    System.out.println(set.last());
                    int num=set.getRow();
                    System.out.println(num);
                    if (num>0) {
                        System.out.println("登陆成功");
                        textFieldName.setText("");
                        textField_1Password.setText("");
                    }else{
                        System.out.println("账号密码不正确,请重新登录");
                        textFieldName.setText("");
                        textField_1Password.setText("");
                    }
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

                String name=textFieldName.getText();
                String  regexname="\\w{1,20}";
                String password=textField_1Password.getText();
                String  regexpassword="\\w{1,6}";
                //MVC设计模式,将界面和数据操作分开
                boolean isSignIn=SQLOperate.isSignIn(name, password);
                if (isSignIn) {
                    System.out.println("登陆成功");
                }else{
                    System.out.println("登陆失败");
                }
                //防止密码后加'or 1='登录,preparedStatement进行预编译
                if (name.matches(regexname) && password.matches(regexpassword)) {
                    System.out.println("账户与密码格式正确");
                    Statement state = SQLManager.newInstabce().getState();
                    Connection coon=SQLManager.newInstabce().getConn();
                    try {
                        if (!coon.isClosed()) {
                            PreparedStatement preparedStatement=coon.prepareStatement("select *  from student where name=? and password=?");
                            preparedStatement.setString(1, name);
                            preparedStatement.setString(1, password);
                            ResultSet set=preparedStatement.executeQuery();
                            set.last();
                            int num=set.getRow();
                            System.out.println("查询的结果"+num);
                        }
                    } catch (SQLException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                    }


                    String select = "select count(*)  from student where name='" + name + "'";
                    try {
                        ResultSet set = state.executeQuery(select);
//                      set.first();
//                      int num1 = set.getInt(1);
                         set.last();
                         int num1=set.getRow();
                        if (num1 > 0) {
                            System.out.println("该用户已存在");
                        } else {
                            String register = "insert into user(name,password)values('" + name + "','" + password
                                    + "')";
                            state.execute(register);
                            System.out.println("注册成功");
                        }
                    } catch (SQLException e1) {
                        e1.printStackTrace();
                    }
                }else{
                    System.out.println("账户与密码格式不正确");
                }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章