Java数据库访问-JDBC

JDBC

JDBC是Java Data Base Connection的简称,保存有Java中操作数据库的方法。以MySQL为例,访问数据库需要用到第三方的类,第三方类都被压缩在称为jar的包内。

操作数据库步骤

  1. 通过Class.forName()注册第三方包中的驱动类,将类加载到jvm中。
  2. 通过DriverManager类的getConnection方法连接数据库。
  3. 通过Statement语句类建立语句类。
  4. s.execute()执行语句。

基本操作

package com.java;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class TestSql {
public static void main(String[] args){
try{
// 注册驱动类,才能操作数据库  
Class.forName("com.mysql.jdbc.Driver");
    } 
catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
     } 
try( // 连接数据库
  Connection c = DriverManager
                  .getConnection(
                          "jdbc:mysql://127.0.0.1:3306/?characterEncoding=UTF-8",
                          "root", "admin");
// 创建语句类
Statement s = c.createStatement();
)
{

/*
* 使用execute 执行语句
* 
* */ 
s.execute("USE mywebsite");

}
catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}
}

预编译语句

使用PreparedStatement类可以创建预编译语句,相比Statement,优势在于

  1. 方便(不需要像普通执行那样写一大串)
  2. 能有效预防SQL注入
  3. 性能上比Statement好
try( 
Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/?characterEncoding=UTF-8","root", "kingyin123");
PreparedStatement ps = c.prepareStatement(sql);
){
ps.setString(1, "新增名字");
ps.setString(2, "新增地址");
ps.setString(3, "新增城市");
ps.setString(4, "新增状态");
ps.setString(5, "新增zip");
ps.setString(6, "新增国家");
ps.execute();
System.out.println("插入数据成功");
}
catch(SQLException e){
e.printStackTrace();
}

executeUpdate

executeUpdateexecute方法类似,区别在于execute返回布尔值,如果是查询操作返回true,其他操作返回false。executeUpdate返回受影响的数据条数。

使用事务

使用事务的方法非常简单,只有两部。

  1. 关闭自动提交c.setAutoCommit(false)
  2. 使用c.commit()手动提交

特殊操作

获取自增值

创建语句时传入第二个参数Statement.RETURN_GENERATED_KEYS,然后使用ResultSet rs = ps.getGeneratedKeys()获取

try( 
Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/?characterEncoding=UTF-8","root", "kingyin123");
PreparedStatement ps = c.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
){
ps.setString(1, "新增名字1");
ps.setString(2, "新增地址");
ps.setString(3, "新增城市");
ps.setString(4, "新增状态");
ps.setString(5, "新增zip");
ps.setString(6, "新增国家");
ps.execute();
ResultSet rs = ps.getGeneratedKeys();
while(rs.next()){
System.out.format("插入id为%d",rs.getInt(1));
}
}
catch(SQLException e){
e.printStackTrace();
}

result:插入id为1009

获取元数据

利用DatabaseMetaData可以获取数据库元数据,比如数据库名称、数据库版本等。

好的实践方案

ORM:Object Relationship Database Mapping,对象和数据库之间的映射,一个对象代表一条数据库数据
DAO:Data Access Object,数据访问对象,利用ORM将数据封存在对象内部,只暴露给外部相应的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值