JDBC基础
1.JDBC(Java Database Connectivity)是
-
一个独立于特定数据库管理系统、通用的 SQL 数据库存取和操作的公共接口(一组 API),
-
定义了用来访问数据库的标准 Java 类库
-
使用这个类库可以以一种标准的方法、方便地访问数据库资源
2 访问数据库
1.数据库连接被用于
向数据库服务器发送命令和 SQL 语句
在连接建立后,需要对数据库进行访问,执行 sql 语句
- 在 java.sql 包中有 3 个接口:
Statement
PrepatedStatement
CallableStatement
数据库操作
数据库的指令操作
1. 查看全部数据库:show databases; (记得每条MySQL语句后面一定带上分号)
如果你是第一次查看你应该只有红框这四项,记得一定不要取改动删除他们
2. 创建数据库:create database mydb1;
3. 查看当前数据库创建语句:**show create database mydb1;
**
4. 修改数据库:alter database mydb1 character set gbk; character set:指定数据库采用的字符集
可以看到输入修改语句后我们的字符集从utf8变成了gbk
5.使用数据库:use database_name; 眨眼一看啥意思呢!其实不然,当我们要创建表是就要特别到数据库里面来创建,不然谁知道你的表要放哪呢
6. 查看当前使用的数据库:**select database();
**
7.删除数据库:drop database mydb1;
表的常用指令操作
1.创建表,下面在mydb01中创建user表为例
首先选择mydb01数据库:use mydb01; 在创建user表
[](javascript:void(0)😉
create table user(
id int,
name varchar(10),
password varchar(15),
birthday date
);
[](javascript:void(0)😉
2.查询表结构:desc user; 如下图:**
**
3.查看当前数据库中所有表:show tables;
4. 查看当前表的创建语句:show create table user;
5. 修改表
添加字段:alter table user add image blob;
修改字段:alter table user modify password varchar(60);
删除字段:alter table user drop birthday;
修改表名:rename table user to emp;
这个时候再去查询表就应该换名字了,不然会报错如图:
jdbc eclipse操作
1.新建一个项目
2.右键->Properties->Project Facets->java(数值改成1.8)
3.右键新建一个lib文件夹黏贴jar包,build path导入包
4.新建类jdbc
package jdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");//初始化给定的类,注册一下驱动
String url = "jdbc:mysql://localhost:3306/mytest";//数据库地址
Connection conn = DriverManager.getConnection(url, "root", "187365");//链接数据库,地址,用户名,密码
System.out.println("联接成功");
Statement st = conn.createStatement();//获取一个执行sql语句的对象
String sql = "select * from myrevise";
ResultSet re = st.executeQuery(sql);//执行sql语句
while(re.next()) {
System.out.println(re.getInt("id") + re.getString("name"));
}
re.close();//关闭连接
st.close();
}
}
PreparedStatement
创建对象
Connection.preparedStatement(sql)
sql 语句中,使用?代替实际的值
使用对象的 setXXX()方法,设置每一个值
参数序号从 1 开始
再执行即可
package jdbc1;
import java.sql.*;
import java.util.*;
public class PreparedStatementTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String add = "jdbc:mysql://localhost:3306/mytest";
Connection conn = DriverManager.getConnection(add, "root", "187365");
//查询指定行内容
String sql0 = "select * from love where id like ?";//执行语句
PreparedStatement ps = conn.prepareStatement(sql0);//
System.out.println("请输入查询的id:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ps.setInt(1, n);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("第"+rs.getInt("id") + "行");
System.out.println("姓名:"+rs.getString("name"));
System.out.println("年龄:"+rs.getInt("year"));
System.out.println("学业:"+rs.getString("studty"));
}
//插入新的内容
String sql2 = "insert into love(id, name, year, studty)";
sql2 += "select ifnull((select max(id) from love),0) + 1, ?, ?, ?";
PreparedStatement ps2 = conn.prepareStatement(sql2);
System.out.println("请输入姓名:");
Scanner sc2 = new Scanner(System.in);
String name = sc2.next();
System.out.println("请输入年龄:");
Scanner sc3 = new Scanner(System.in);
int year = sc3.nextInt();
System.out.println("请输入学业:");
Scanner sc4 = new Scanner(System.in);
String studty = sc4.next();
ps2.setString(1, name);
ps2.setInt(2, year);
ps2.setString(3, studty);
ps2.executeUpdate();//执行更新
System.out.println("添加成功!");
//查询表中全部内容
String sql1 = "select * from love";
PreparedStatement pst = conn.prepareStatement(sql1);
ResultSet rs1 = pst.executeQuery();
while (rs1.next()) {
System.out.print(rs1.getInt("id") + "---");
System.out.print(rs1.getString("name")+"---");
System.out.print(rs1.getInt("year")+"---");
System.out.println(rs1.getString("studty"));
}
rs1.close();
rs.close();
conn.close();
}
}
PreparedStatement vs Statement区别:
代码的可读性和可维护性.
PreparedStatement 能最大可能提高性能:
PreparedStatement 可以防止 SQL 注入