MySql - 基础学习 - JDBC
一.为什么要学习JDBC
SUM公司为了简化开发人员的操作(对数据库的统一),提供了一个规范(Java操作数据库的规范),俗称:JDBC
这些规范的实现是由厂商们去做~
对于开发人员来说,我们只需要掌握JDBC即可。

我们如果要使用JDBC,还需要导入一个数据库驱动包(我选择maven导入):
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
编写第一JDBC程序
1.创建一个数据库测试表:
CREATE TABLE `users` ( `id` int(11) NOT NULL, `NAME` varchar(40) DEFAULT NULL, `PASSWORD` varchar(40) DEFAULT NULL, `email` varchar(60) DEFAULT NULL, `birthday` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values (1,'zhangsan','123456','zs@sina.com','1980-12-04'), (2,'lisi','123456','lisi@sina.com','1981-12-04'), (3,'wangwu','123456','wangwu@sina.com','1979-12-04');
2.导入数据库驱动:
这里我使用maven自动导入
3.在Java中代码实现
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver"); // 固定写法 ,加载驱动用
// 2.用户信息和url :useUnicode=true&characterEncoding=utf8&useSSL=true
String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";
String username="root";
String password="123456";
//3.创建连接,创建数据库对象
Connection connection = DriverManager.getConnection(url, username, password);
//4.执行sql的对象
Statement statement = connection.createStatement();
//5.使用sql对象去执行 SQL 可能存在返回,需要输出
String sql="SELECT * FROM `users`";
ResultSet resultSet = statement.executeQuery(sql);// 把查询sql命令的数据内容全部放到了 resultSet 中,返回了一个结果集
while (resultSet.next()){
System.out.println("id="+resultSet.getObject("id"));
System.out.println("name="+resultSet.getObject("NAME"));
System.out.println("password="+resultSet.getObject("PASSWORD"));
System.out.println("email="+resultSet.getObject("email"));
System.out.println("birthday="+resultSet.getObject("birthday"));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();
}
Java实现步骤:
- 加载驱动
- 连接数据库 DriverManger
- 获得执行的sql对象,statement(不安全的)
- 获得返回的结果集
- 释放链接
二。JDBC对象的解释
Driver:
Class.forName("com.mysql.jdbc.Driver"); // 固定写法 ,加载驱动用
URL:
String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";
jdbc:mysql://主机地址:端口号(3306)/数据库名?参数1&参数2&参数3
jdbc:oracle:thin:@localhost:1521:sid
DriverManager:
Connection connection = DriverManager.getConnection(url, username, password);
- connection 代表数据库
- 数据库设置的自动提交
- 事务提交
- 事务回滚
- connection.rollback()事务回滚
- connection.xommit()事务提交
- connection.setAutoCommit() 自动提交
statement:执行类 -----Preparestatement:也可以执行sql对象
执行sql的对象
statement.executeQuery();//查询操作的专用语句
statement.execute(); //可以执行所有sql,但是非常慢,因为它有个判断的过程
statement.executeUpdate();//跟新,插入,删除记录都是它,返回一个受影响的行数
ResulSet :查询语句产生的结果集(statement.executeQuery()),封装了所有的查询结果
//获得返回的数据类型
resultSet.getObject();//不知道返回类型的时候用最高级的
resultSet.getInt(); //返回值为int
resultSet.getString();//返回值为字符串
resultSet.getFloat(); //返回值为单精度浮点数
resultSet.beforeFirst(); // 指针移动到最前面
resultSet.afterLast(); //指针移动到最后面
resultSet.next(); //指针移动到下一个数据
resultSet.absolute(row);//移动到指定行
释放资源必须做;很占用资源
resultSet.close();
statement.close();
connection.close();
三.statement对象详解
executeUpdate:插入数据(insert)
public static void main(String[] args) {
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try {
conn=JdbcUtils.getConnection(); //获取数据库链接
st=conn.createStatement();// 获得SQL的执行对象
String sql="insert into `users`(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(6,'maming','1234567','1247238460@qq.com','2022-11-04')";
int i =st.executeUpdate(sql);
if(i>0)
{
System.out.println("插入成功");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
executeUpdate:删除数据(delete)
public static void main(String[] args) {
Connection conn =null;
Statement tr=null;
ResultSet rs=null;
try {
conn=JdbcUtils.getConnection();
tr=conn.createStatement();
String sql="delete from `users` where id <=6 and id>=4";
int i=tr.executeUpdate(sql);
if(i>0){
System.out.println("删除成功!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn,tr,rs);
}
}
executeUpdate:修改数据(update)
public static void main(String[] args) {
Connection conn=null;
Statement st =null;
ResultSet rs =null;
try {
conn=JdbcUtils.getConnection();
st=conn.createStatement();
String sql="update `users` set `NAME`='maming' where id=1";
int i =st.executeUpdate(sql);
if(i>0){
System.out.println("更改成功!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
executeQuery:查询数据(select)
public static void main(String[] args) {
Connection conn=null;
Statement st =null;
ResultSet rs =null;
try {
conn= JdbcUtils.getConnection();
st=conn.createStatement();
String sql="select * from `users` WHERE id=1";
rs = st.executeQuery(sql);
while (rs.next()){
System.out.println("name="+rs.getString("NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
提取工具类
public class JdbcUtils {
public static String driver =null;
private static String url =null;
private static String username =null;
private static String password =null;
static {
try{
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(in);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
// 驱动只需要要加载一次
Class.forName("driver");
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取链接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
//释放链接
public static void release(Connection conn, Statement st, ResultSet re){
if(re!=null){
try {
re.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

浙公网安备 33010602011771号