数据库的创建与连接
连接数据库,首先要创建数据库和表
创建数据库的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("账户与密码格式不正确");
}