jdbc语句比较mysql_MySql (sql语句+jdbc)

一、基础sql语句

创建库

/* 指定编码 */

CREATE DATABASE IF NOT EXISTS Web_Data CHARACTER SET utf8;

/* 默认编码 */

CREATE DATABASE IF NOT EXISTS Web_Data;

查询已存在的数据库

SHOW DATABASES;

切换到指定的数据库

USE Web_Data;//切换到Web_Data数据库

查看当前正在操作的数据库

SELECT database();

创建表

CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY

AUTO_INCREMENT,name VARCHAR(20),password VARCHAR(100));

列出数据库中已存在的表

SHOW TABLES;

显示创建数据库的语句

SHOW CREATE DATABASE 数据库名

显示创建表的语句

SHOW CREATE TABLE 表名;

查看表结构

DESC 表名;

删除数据库

DROP DATABASE 数据库名;

删除表

DROP TABLE 表名;//删除表数据及表结构

DELETE FROM 表名;//删除表数据

TRUNCATE TABLE 表名;//摧毁表结构,重建。auto_increment将被重置,从0开始

如果此时想删除表中所有记录,使用TRUNCATE TABLE还是DELETE FROM

//--- 删除方式 ---

delete一条一条删除,不会重置auto_increment

truncate是直接将表删除(摧毁),重建一张一模一样的表。auto_increment被重置为0

//--- 事务方面 ---

delete删除的数据如果是在一个事务中,可以找回

truncate删除的数据无法找回

修改表

ALTER TABLE user MODIFY name VARCHAR(50);//修改name的长度

ALTER TABLE user ADD sex VARCHAR(20);//增加sex列

ALTER TABLE user DROP text;//删除text一列

ALTER TABLE user CHARACTER SET utf8;//修改表编码

修改表名

RENAME TABLE 表名 TO 新表名;

外键

ALTER TABLE product ADD FOREIGN KEY (category_id) REFERENCES category (cid);

二、多表查询

交叉连接查询

基本不会使用,得到的是两个表的乘积

语法:select * from A,B;

内连接查询

使用关键字inner join,inner可以省略

隐式内连接

select * from A,B where 条件;

显式内连接

select * from A inner join B on条件.

外连接查询

使用关键字outer join,outer可以省略

左外连接:left outer join

select * from A left outer join B on 条件;

右外连接:right outer join

select * from A right outer join B on 条件;

内连接和外连接区别

左外连接:查询左表的全部数据,以及两个表的交集

内连接:查询两个表的交集

右外连接:查询右表的全部数据,以及两个表的交集

子查询

子查询:一条select语句的结果作为另一条select语句的一部分(查询条件,查询结果,表等).

三、JDBC开发步骤

注册驱动

分析步骤1

JDBC规范定义驱动接口:java.sql.Driver,mysql驱动包提供了实现类:com.mysql.jdbc.Driver

分析步骤2

DriverManager工具类提供注册驱动的方法:registerDriver();参数:java.sql.Driver,所以可以通过DriverManager.registerDriver(new com.mysql.jdbc.Driver)进行注册

不足:硬编码,后期不易于程序维护和扩展

不足:驱动被注册两次

分析步骤3

如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行,com.mysql.jdbc.Driver源码中,会主动进行Driver注册

package cn.xjw.jdbc_demo.utils;

import java.sql.Connection;

import java.sql.Driver;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.logging.Logger;

/**

* JDBC开发步骤

*

* @author xjw

*

* 拷贝驱动,添加到构建路径中

* 1.注册驱动

* 2.获取连接

* 3.获得sql语句的执行对象

* 4.[为预编译对象的sql语句的占位符参数赋值]

* 5.执行对象执行sql

* 6.处理结果集,如果有

* 7.释放资源

*

* 开发通常使用Class.forName()加载一个使用字符串描述的驱动类

* Class.forName("com.mysql.jdbc.Driver");

* 如果Class.forName()将类加载到内存,该类的静态代码将自动执行com.mysql.jdbc.Driver源码中会自动进行Driver注册

*

*/

public class JDBCUtils {

private static String user = "";

private static String pswd = "";

private static String url = "";

private static String driver = "";

static{

/**

* 配置文件:.properties

* 获取各种数据

*/

ResourceBundle rb = ResourceBundle.getBundle("cn.xjw.jdbc_demo.utils.MyDB");

user = rb.getString("user");

pswd = rb.getString("password");

url = rb.getString("url");

driver = rb.getString("driver");

try {

Class.forName(driver);

} catch (ClassNotFoundException e) {

e.printStackTrace();

System.out.println("can not register driver");

}

}

public static Connection getCon() throws SQLException{

return DriverManager.getConnection(url, user, pswd);

}

public static void myRelease(Connection con, ResultSet rs, PreparedStatement ps){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

rs = null;

if(ps != null){

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

ps = null;

if(con!=null){

try {

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

con = null;

}

}

public static void main(String[] args){

String name = "tony";

String pswd = "tony123321";

String sql = "select * from user where sname=? and pid=?";

try {

Connection con = JDBCUtils.getCon();

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, name);

ps.setString(2, pswd);

ResultSet rs = ps.executeQuery();

User u = null;

if(rs != null && rs.next()){

u = new User();

u.name = rs.getString("sname");

}

JDBCUtils.myRelease(con, rs,ps);

if(u!=null){

System.out.println(u.name);

}

} catch (SQLException e) {

e.printStackTrace();

System.out.println("can not get con");

}

}

批量操作

private static void method02(List beanList) {

try {

Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/web09", "username", "password");

String sql = "inset into user(sname) values(?);";

PreparedStatement ps = con.prepareStatement(sql);

for(User bean:beanList){

ps.setString(1, bean.name);

ps.addBatch();

}

ps.executeBatch();

if (ps != null) {

ps.close();

}

if (con != null) {

con.close();

}

} catch (ClassNotFoundException | SQLException e) {

e.printStackTrace();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值