本关任务:使用jdbc连接数据库
DriverManager:此类管理数据库驱动程序列表。可在JDBC下识别某个子协议的第一个驱动程序,用于建立数据库连接。
Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。
Connection:此接口具有用于联系数据库的所有方法。 Connection对象表示通信上下文,即与数据库的所有通信仅通过连接对象。
Java加载数据库驱动通常是使用Class类的静态方法forName(),语法格式如下: Class.forName(String driverManager)
示例:
try
{
Class.forName("com.mysql.jdbc.Driver" );
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
成功加载完数据库驱动后,就可以建立数据库的连接了,使用DriverManager
的静态方法getConnection()
来实现。如下:
Connection conn = DriverManager.getConnection(url, user, password);
url
用于标识数据库的位置,通过url地址告诉JDBC程序连接信息。
user
是建立的数据库的用户名。
passwrod
是数据库的密码。
示例(本数据库的信息情况):
String url = "jdbc:mysql://localhost:3306/";
String user = "root";
String password = "123123";
Jdbc程序运行完后,切记要释放程序在运行过程中创建的那些与数据库进行交互的对象,这些对象通常是ResultSet
, Statement
和Connection
对象。
特别是Connection
对象,它是非常稀有的资源,用完后必须马上释放,如果Connection
不能及时、正确的关闭,极易导致系统宕机。
Connection
的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码一定要放在finally
语句中。
根据提示,在右侧编辑器补充代码: 加载驱动,连接数据库
平台会对你编写的代码进行测试:
测试输入:无;
预期输出:
Stuid INT(10)
name VARCHAR(20)
sex VARCHAR(4)
age INT(10)
数据库连接成功!
实现如下:
package JDBCcon;
import java.sql.*;
public class jdbccon
{
public static void getConn()
{
//forName加载驱动
/********* Begin *********/
try
{
Class.forName("com.mysql.cj.jdbc.Driver");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
/********* End *********/
Connection conn = null;
Statement statement = null;
// 定义连接信息, "root"和"123123"是针对MySQL设置了用户名(root)和密码(123123)的情况
// localhost:3306是mysql服务器地址及端口。
// /********* Begin *********/
String URL = "jdbc:mysql://localhost:3306";
String USER = "root";
String PASSWORD = "123123";
/********* End *********/
try
{
//getConnection建立连接
/********* Begin *********/
conn = DriverManager.getConnection(URL, USER, PASSWORD);
/********* End *********/
statement = conn.createStatement();
statement.executeUpdate("drop database if exists mysql1");
statement.executeUpdate("create database mysql1");
statement.executeUpdate("use mysql1");
String sql = "create table student(" +
"Stuid int , " +
"name varchar(20), " +
"sex varchar(4), " +
"age int" +
")";
statement.executeUpdate(sql);
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if(statement!=null)
statement.close();
if(conn!=null)
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
本关任务:运用jdbc建立建立数据库和表。
本关会用到的方法:
Connetion
类主要用来链接数据库,常通过DriverManager.getConnection()
来获取一个连接对象。
Statement
对象用于执行sql语句,Statement
的常用方法:executeUpdata()
方法:运行增,删,改操作,返回更新的行数。
对Connetion
,Statement
两个对象进行初始化定义
Connection conn = null;
Statement statement = null;
连接建立完毕后,就可以使用Connection
接口的createStatement()
方法来获取Statement
对象;
statement = conn.createStatement();
并通过调用executeUpdate()
方法来执行SQL语句。
statement.executeUpdate("sql语句");
需要执行的sql语句为(本关以Mysql为例):
//判断是否存在数据库mysql1
"drop database if exists mysql1"
//创建数据库mysql1
"create database mysql1"
//选择使用mysql
"use mysql1"
//创建表student并创建表中数据
"create table student(" +
"Stuid int , " +
"name varchar(20), " +
"sex varchar(4), " +
"age int" +
")";
创建数据库mysql1
;
创建表student
。
student
表结构为:
字段名 | 类型 | 备注 | 约束 |
---|---|---|---|
id | int | 学生id | 非空 |
name | varchar(20) | 学生姓名 | 无 |
sex | varchar(4) | 学生性别 | 无 |
age | int | 学生年龄 | 无 |
平台会对你编写的代码进行测试:
测试输入:无
预期输出:
Stuid INT(10)
name VARCHAR(20)
sex VARCHAR(4)
age INT(10)
数据库表搭建成功!
实现如下:
package JDBCbuild;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbcb
{
public static void build()
{
//初始化Connection Statement值
/********* Begin *********/
Connection conn = null;
Statement statement = null;
/********* End *********/
try
{
conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/","root", "123123");
/********* Begin *********/
// 1. 执行SQL语句来创建数据库(如果数据库不存在)创建数据库 mysql1(如果不存在)
String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS mysql1";
statement = conn.createStatement();
statement.execute(createDatabaseSQL);
// 选择使用 mysql1 数据库
statement.execute("USE mysql1");
// 2. 执行SQL语句来创建表
String createTableSQL = "CREATE TABLE student (" +
"Stuid INT(10), " +
"name VARCHAR(20), " +
"sex VARCHAR(4), " +
"age INT(10)" +
")";
statement.execute(createTableSQL);
/********* End *********/
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if(statement!=null)
statement.close();
if(conn!=null)
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
本关任务:在建立的数据库表中减价数据。
Connetion
类主要用来链接数据库,常通过DriverManager.getConnection()
来获取一个连接对象。
Statement
的常用方法:executeUpdata()
方法:运行增,删,改操作,返回更新的行数。
调用execute();
执行sql语句来增添数据; 示例: statement.execute("sql语句");
增添格式为: INSERT INTO '表名' VALUES ('数据',...,'数据');
示例在student
表中添加数据: statement.execute("INSERT INTO 'student' VALUES ('101', '张三', '男');");
表中结构为:
字段名 | 类型 | 约束 |
---|---|---|
no | varchar(255) | NULL |
name | varchar(255) | NULL |
password | varchar(255) | NULL |
sex | varchar(255) | NULL |
salary | decimal(10,2) | NULL |
根据提示,在右侧编辑器补充代码,在student表中插入如下数据 no:11 name:张三 password:123 sex:男 salary:300.0 no:12 name:李四 password:123 sex:男 salary:80.0 no:21 name:王五 password:133 sex:女 salary:40.0
平台会对你编写的代码进行测试:
测试输入:无;
预期输出:
no:11 name:张三 password:123 sex:男 salary:300.0
no:12 name:李四 password:123 sex:男 salary:80.0
no:21 name:王五 password:133 sex:女 salary:40.0
增添表数据成功!
实现如下:
package JDBCadd;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.sql.ResultSet;
public class addbc
{
static final String url = "127.0.0.1:3306";
static final java.util.Properties info = new Properties();
static {
info.put("user", "root");
info.put("password", "123123");
initTableData();
}
private static void initTableData() {
Connection connection = null;
Statement statement = null;
//建立数据库
try {
connection = DriverManager.getConnection("jdbc:mysql://" + url + "/information_schema", info);
Statement createStatement = connection.createStatement();
createStatement.execute("drop database if exists tsgc");
createStatement.execute("create database tsgc");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection = DriverManager.getConnection("jdbc:mysql://" + url + "/tsgc?useUnicode=true&characterEncoding=utf-8", info);
//建立表
statement = connection.createStatement();
statement.execute("CREATE TABLE employee (no varchar(255) NULL ,name varchar(255) NULL ,password varchar(255) NULL ,sex varchar(255) NULL ,salary decimal(10,2) NULL) DEFAULT CHARSET=utf8;");
//在数据库的表中增添数据
/********* Begin *********/
// 建立表
statement.execute("CREATE TABLE student (" +
"no VARCHAR(255), " +
"name VARCHAR(255), " +
"password VARCHAR(255), " +
"sex VARCHAR(255), " +
"salary DECIMAL(10,2)" +
") DEFAULT CHARSET=utf8;");
// 插入数据
statement.addBatch("INSERT INTO student (no, name, password, sex, salary) VALUES ('11', '张三', '123', '男', 300.0)");
statement.addBatch("INSERT INTO student (no, name, password, sex, salary) VALUES ('12', '李四', '123', '男', 80.0)");
statement.addBatch("INSERT INTO student (no, name, password, sex, salary) VALUES ('21', '王五', '133', '女', 40.0)");
// 执行批处理
statement.executeBatch();
// 查询数据并输出
ResultSet resultSet = statement.executeQuery("SELECT * FROM student");
while (resultSet.next())
{
System.out.print("no:"+ resultSet.getInt(1) +"\t");
System.out.print("name:"+ resultSet.getString(2) +"\t");
System.out.print("password:"+ resultSet.getString(3) +"\t");
System.out.print("sex:"+ resultSet.getString(4) +"\t");
System.out.println("salary:"+ resultSet.getDouble(5));
}
/********* End *********/
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
本关任务:在建立的数据库表中减价数据。
Connetion
类主要用来链接数据库,常通过DriverManager.getConnection()
来获取一个连接对象。
Statement
的常用方法:executeUpdata()
方法:运行增,删,改操作,返回更新的行数。
perparedStatement();
对象用于执行带或不带参数的预编译SQL语句;
setString();`:设置代替sql语句中的问号? 格式为`void setString(int parameterIndex,String x);
1,调用PerparedStatement()
;执行sql语句来删除数据; 示例: PreparedStatement pstmt = connection.prepareStatement(sql);
然后定义sql语句, String sql ="sql语句";
2,sql删除语句 删除格式为: delete from
+表名 where
+元组中属性 =?
示例在表employee中删除数据: delete from employee where no = ?
3,调用setString();
设置?(问号为需要填充的内容)。
示例:
//将第一处的?设置成21。
pstmt.setString(1,"21");
表中结构为:
字段名 | 类型 | 约束 |
---|---|---|
no | varchar(255) | NULL |
name | varchar(255) | NULL |
password | varchar(255) | NULL |
sex | varchar(255) | NULL |
salary | decimal(10,2) | NULL |
根据提示,在右侧编辑器补充代码,在student表中删除no为21的所有数据。
平台会对你编写的代码进行测试:
测试输入:无;
预期输出:
no:11 name:张三 password:123 sex:男 salary:300.0
no:12 name:李四 password:123 sex:男 salary:80.0
删除表数据成功!
实现如下:
package JDBCdelete;
import java.sql.*;
import java.util.Properties;
public class deletebc {
static final String url = "127.0.0.1:3306";
static final java.util.Properties info = new Properties();
static {
info.put("user", "root");
info.put("password", "123123");
initTableData();
}
private static void initTableData() {
Connection connection = null;
Statement statement = null;
//建立数据库
try {
connection = DriverManager.getConnection("jdbc:mysql://" + url + "/information_schema", info);
Statement createStatement = connection.createStatement();
createStatement.execute("drop database if exists tsgc");
createStatement.execute("create database tsgc");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection = DriverManager.getConnection("jdbc:mysql://" + url + "/tsgc?useUnicode=true&characterEncoding=utf-8", info);
//建立表
statement = connection.createStatement();
statement.execute("CREATE TABLE employee (no varchar(255) NULL ,name varchar(255) NULL ,password varchar(255) NULL ,sex varchar(255) NULL ,salary decimal(10,2) NULL) DEFAULT CHARSET=utf8;");
//在数据库的表中增添数据
statement.execute("INSERT INTO `employee` VALUES ('11', '张三', '123', '男', '300.00');");
statement.execute("INSERT INTO `employee` VALUES ('12', '李四', '123', '男', '80.00');");
statement.execute("INSERT INTO `employee` VALUES ('21', '王五', '133', '女', '40.00');");
//在数据库的表中删除数据
/********* Begin *********/
// 删除数据
statement.execute("DELETE FROM employee WHERE no = '21'");
// // 查询数据并输出
// ResultSet resultSet = statement.executeQuery("SELECT * FROM employee");
// while (resultSet.next())
// {
// System.out.print("no:"+ resultSet.getInt(1) +"\t");
// System.out.print("name:"+ resultSet.getString(2) +"\t");
// System.out.print("password:"+ resultSet.getString(3) +"\t");
// System.out.print("sex:"+ resultSet.getString(4) +"\t");
// System.out.println("salary:"+ resultSet.getDouble(5));
// }
/********* end *********/
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
本关任务:在建立的数据库表中减价数据。
Connetion
类主要用来链接数据库,常通过DriverManager.getConnection()
来获取一个连接对象。
Statement
的常用方法:executeUpdata()
方法:运行增,删,改操作,返回更新的行数。
PerparedStatement
对象用于执行带或不带参数的预编译SQL语句;
setString(); `:设置代替sql语句中的问号? 格式为`void setString(int parameterIndex,String x);
ResultSet();
: 执行executeQuery()
方法后返回的结果集.
1,调用PerparedStatement()
;执行sql语句来选择表;
示例(选择employee表):
statement = conn.prepareStatement("select * from employee ");
2,调用executeQuery()
方法后返回的结果集.
示例:
ResultSet resultSet = statement.executeQuery();
3,调用next();
遍历返还的结果集。得到结果集里面的数据。 示例
while (resultSet.next())
{
//取结果集中的数据,getInt取数字,getString取字符串。
int no = resultSet.getInt(1);
}
4,打印数据。
表中结构为:
字段名 | 类型 | 约束 |
---|---|---|
no | varchar(255) | NULL |
name | varchar(255) | NULL |
password | varchar(255) | NULL |
sex | varchar(255) | NULL |
salary | decimal(10,2) | NULL |
根据提示,在右侧编辑器补充代码,查询并打印出表中所有数据。
注意:输出打印时用\t分隔。
平台会对你编写的代码进行测试:
测试输入:无;
预期输出:
no:11 name:张三 password:123 sex:男 salary:300.0
no:12 name:李四 password:123 sex:男 salary:80.0
no:21 name:王五 password:133 sex:女 salary:40.0
查询全部表数据成功!
实现如下:
package JDBCseek;
import java.sql.*;
public class jdbcseek {
public static void updateDB() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:mysql://localhost:3306/tsgc";
String user = "root";
String password = "123123";
Connection conn= null;
PreparedStatement statement = null;
try{
conn = DriverManager.getConnection (url,user,password );
/********* Begin *********/
//执行sql语句选择表
statement = conn.prepareStatement("SELECT * FROM employee");
ResultSet resultSet = statement.executeQuery();
//遍历表,在控制到打印出全部数据
while (resultSet.next())
{
System.out.print("no:"+ resultSet.getInt(1) +"\t");
System.out.print("name:"+ resultSet.getString(2) +"\t");
System.out.print("password:"+ resultSet.getString(3) +"\t");
System.out.print("sex:"+ resultSet.getString(4) +"\t");
System.out.println("salary:"+ resultSet.getDouble(5));
}
/********* End *********/
} catch (SQLException e) {
e.printStackTrace();
}
finally
{
try {
if(statement!=null)
statement.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
本关任务:在建立的数据库表中减价数据。
Connetion
类主要用来链接数据库,常通过
DriverManager.getConnection()
来获取一个连接对象。
Statement
的常用方法:executeUpdata()
方法:运行增,删,改操作,返回更新的行数。
PerparedStatement
对象用于执行带或不带参数的预编译SQL语句;
setString();`:设置代替sql语句中的问号? 格式为`void setString(int parameterIndex,String x);
调用prepareStatement();
执行sql语句来更新数据; 示例: statement=conn.prepareStatement("sql语句");
更新格式为: update
表名 set
更新元组中属性 =
‘更新属性值’ where
元组中属性 =
‘属性值’ 示例在employee表中更新数据: //更新元组中属性为‘男’的密码为222;
update employee set password = '222' where sex ='男'
最后调用 executeUpdate();
完成更新。
表中结构为:
字段名 | 类型 | 约束 |
---|---|---|
no | varchar(255) | NULL |
name | varchar(255) | NULL |
password | varchar(255) | NULL |
sex | varchar(255) | NULL |
salary | decimal(10,2) | NULL |
根据提示,在右侧编辑器补充代码,在student
表中更新性别sex
为男
员工的密码password
为222
。
平台会对你编写的代码进行测试:
测试输入:无;
预期输出:
no:11 name:张三 password:222 sex:男 salary:300.0
no:12 name:李四 password:222 sex:男 salary:80.0
no:21 name:王五 password:133 sex:女 salary:40.0
更新表数据成功!
实现如下:
package JDBCupdata;
import java.sql.*;
public class jdbcupdata {
public static void updateDB() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:mysql://localhost:3306/tsgc";
String user = "root";
String password = "123123";
Connection conn= null;
PreparedStatement statement = null;
try {
conn = DriverManager.getConnection (url,user,password );
/********* Begin *********/
//调用方法执行sql语句
statement = conn.prepareStatement("UPDATE employee SET password = '222' WHERE sex = '男'");
//更新数据
statement.executeUpdate();
/********* End *********/
} catch (SQLException e) {
e.printStackTrace();
}
try{
conn = DriverManager.getConnection (url,user,password );
//执行sql语句选择表
statement = conn.prepareStatement("select * from employee ");
ResultSet resultSet = statement.executeQuery();
//遍历表,在控制到打印出全部数据
while (resultSet.next()) {
int no = resultSet.getInt(1);
String name = resultSet.getString(2);
int pw = resultSet.getInt(3);
String sex = resultSet.getString(4);
double salary = resultSet.getDouble(5);
System.out.println("no:"+no + "\t" +"name:"+ name + "\t"+ "password:"+pw+ "\t"+"sex:"+sex + "\t" +"salary:"+ salary);
}
} catch (SQLException e) {
e.printStackTrace();
}
finally
{
try {
if(statement!=null)
statement.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!