JDBC简介

JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。

JDBC编程步骤

(1)加载驱动程序:

  下载驱动包 : http://dev.mysql.com/downloads/connector/j/

解压,得到 jar文件。将该文件复制到Java工程目录Java Resources/Libraries/ 下,→ buildpath 。

(2)获得数据库连接

(3)创建Statement对象:

(4)向数据库发送SQL命令

(5)处理数据库的返回结果(ResultSet类)

 package com.baidu.emp.jdbcTest;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; import com.mysql.jdbc.Driver;
/**
* 开始使用jdbc连接数据库
* @author Admin
*
*/
public class Test001 { public static void main(String[] args) throws Exception { /**
* 加载驱动
*/
// 方法一:
/*
* import java.sql.DriverManager; import com.mysql.jdbc.Driver;
*/
// Driver driver = new Driver();
// DriverManager.registerDriver(driver); // 方法二:(推荐使用)
Class.forName("com.mysql.jdbc.Driver"); /**
* 创建链接
*/
String url = "jdbc:mysql://localhost:3306/testjdbc";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, user, password); // 创建statement对象
Statement statement = connection.createStatement(); /**
* 执行SQL,获取结果集
*/
String sql = "select * from test01";
ResultSet result = statement.executeQuery(sql); // 遍历结果集
while (result.next()) {
String name = result.getString("name");
int id = result.getInt("id");
System.out.println(name + "\t" + id);
} /**
* 关闭链接,释放资源
*/
result.close();
statement.close();
connection.close();
}
}

防止SQL注入改用prepareStatement

 package com.boya.emp.jdbcTest;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* SQL注入,使用prepareStatement对象进行预编译
* @author Admin
*
*/
public class Test002 { public static void main(String[] args) throws Exception { /**
* 加载驱动
*/
Class.forName("com.mysql.jdbc.Driver"); /**
* 创建链接
*/
String url = "jdbc:mysql://localhost:3306/testjdbc";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, user, password); // 写SQL
String sql = "select * from test01 where id = ?";
//创建statement对象,预编译
PreparedStatement statement = connection.prepareStatement(sql);
//设置参数
statement.setInt(1, 2);
/**
* 执行SQL,获取结果集
*/
ResultSet result = statement.executeQuery(); // 遍历结果集
while (result.next()) {
String name = result.getString("name");
int id = result.getInt("id");
System.out.println(name + "\t" + id);
} /**
* 关闭链接,释放资源
*/
result.close();
statement.close();
connection.close();
}
}

进行代码优化,设置配置文件,工具类,实现增删该查

增加配置文件方便修改数据库,用户登录。。。

jdbc.properties(配置文件名)

 driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testjdbc
userName=root
password=root

注意写配置文件时中间不可以有空格,引号之类的

工具类:增强了代码的复用性

 package com.baidu.emp.utils;

 import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; import org.junit.Test; public class JdbcUtils { static String driverClassName;
static String url;
static String user;
static String password; static {
// 创建配置文件对象
Properties properties = new Properties();
// 加载配置文件输入流
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
// 重新加载配置文件
try {
properties.load(inputStream);
// 获取配置文件的值
driverClassName = properties.getProperty("driverName");
url = properties.getProperty("url");
user = properties.getProperty("userName");
password = properties.getProperty("password");
Class.forName(driverClassName); } catch (Exception e) {
// 抛出异常
throw new RuntimeException(e);
}
} /**
* 获取连接
*/
@Test
public void testName() throws Exception { System.out.println(driverClassName);
}
public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// 抛出异常
throw new RuntimeException(e);
}
return connection;
} /**
* 关闭链接,释放资源
*/
public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) { try {
if (resultSet != null) {
resultSet.close();
}
resultSet = null; // 垃圾及时清除
//注意,不要弄成死循环
close(connection, statement);
} catch (SQLException e) {
throw new RuntimeException(e);
} } /**
* 增删改释放资源
*/
public static void close(Connection connection, PreparedStatement statement) { try {
if (connection != null) {
connection.close();
} connection = null;
if (statement != null) {
statement.close();
}
statement = null; } catch (SQLException e) {
throw new RuntimeException(e);
} } }

测试增删改查:

 package com.baidu.emp.jdbcTest;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.baidu.emp.utils.JdbcUtils; /**
* 使用jdbcUtils连接数据库进行增删改查
*
* @author Admin
*
*/
public class Test003 { // 初始化值
Connection connection = null;
PreparedStatement statement = null;
ResultSet result = null; @Before
public void start() throws Exception {
// 创建链接
connection = JdbcUtils.getConnection();
System.out.println("创建链接");
} @After
public void end() throws Exception {
// 关闭链接
JdbcUtils.close(connection, statement, result);
System.out.println("关闭链接");
} /**
*插入数据
* @throws Exception
*/
@Test
public void add() throws Exception {
String sql = "insert into test01 values(null,?)";
statement = connection.prepareStatement(sql);
statement.setString(1, "李四");
int result = statement.executeUpdate();
if (result!=0) {
System.out.println("添加成功");
}
}
/**
* 删除数据
* @throws Exception
*/
@Test
public void del() throws Exception {
String sql = "delete from test01 where id =?";
statement = connection.prepareStatement(sql);
statement.setInt(1,3);
int result = statement.executeUpdate();
if (result!=0) {
System.out.println("删除成功");
}
}
/**
* 修改数据
* @throws Exception
*/
@Test
public void change() throws Exception {
String sql = "update test01 set name = ? where id = ?";
statement = connection.prepareStatement(sql);
statement.setString(1, "张飞");
statement.setInt(2, 2);
int result = statement.executeUpdate();
if (result!=0) {
System.out.println("修改成功");
}
} /**
* 查询全部数据
* @throws Exception
*/
@Test
public void findAll() throws Exception {
String sql = "select id , name from test01";
statement = connection.prepareStatement(sql);
result = statement.executeQuery();
if (result.next()) {
System.out.println("查询成功");
}
} /**
* 条件查询数据
* @throws Exception
*/
@Test
public void findOne() throws Exception {
String sql = "select id , name from test01 where id = ?";
statement = connection.prepareStatement(sql);
statement.setInt(1, 2);
result = statement.executeQuery();
if (result.next()) {
System.out.println("查询成功");
}
} }

希望能给大家一个参考,也希望大家多多支持我。

  

jdbc链接数据库的更多相关文章

  1. 4、原生jdbc链接数据库常用资源名

    原生jdbc链接数据库要素:#MySql:String url="jdbc:mysql://localhost:3306/数据库名";String name="root& ...

  2. jdbc链接数据库,获取表名,字段名和数据

    import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import  ...

  3. JDBC链接数据库步骤

    java中定义链接数据库的标准:JDBC 1.导包:不同数据库有不同的jdbc驱动包,而且jdbc驱动包和数据库版本必须对应 2.测试 3.写代码 try { 1.//加载JDBC驱动    Clas ...

  4. jdbc链接数据库的三种方式

    /** * jdbc连接数据库 * @author APPle * */ public class Demo1 { //连接数据库的URL private String url = "jdb ...

  5. 1019 JDBC链接数据库进行修删改查

    package com.liu.test01; import java.sql.Statement; import java.sql.Connection; import java.sql.Drive ...

  6. JDBC链接数据库。

    第一步,创建一个空包: 给包起个名字: 新建Modules: 给Modules起名: 创建libs文件: 点击file---->new---->project---->Directo ...

  7. 如何使用JDBC链接数据库

    1.加载数据库驱动 不同的数据库加载的驱动不一样 Class.forName(com.MySQL.jdbc.Driver) Class.forName(oracle.jdbc.driver.Oracl ...

  8. Java JDBC链接数据库

     1.注册驱动Class.forname("com.mysql.jdbc.Driver");//这是连接mysql数据库的驱动2.获取数据库连接java.sql.Connectio ...

  9. Java 项目JDBC 链接数据库中会出现的错误

    1.出现的地方 package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

随机推荐

  1. WebSocket(3)---实现一对一聊天功能

    实现一对一聊天功能 功能介绍:实现A和B单独聊天功能,即A发消息给B只能B接收,同样B向A发消息只能A接收. 本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocket]---实现游戏公告功能 ...

  2. AspNetCore Mvc 使用 PartialView

    控制器: public IActionResult queryMongoDb(string dbname) { List<MongoDbModel> mdList = new List&l ...

  3. Vue轻松入门,一起学起来!

    我们创建一个项目,这个项目我们细说Vue. 一.如何在项目中添加模块 我们通过npm 进行 安装 模块. 首先我们通过cmd.exe cd进入你的项目根目录,必须存在package.json文件,安装 ...

  4. RestTemplate的逆袭之路,从发送请求到负载均衡

    上篇文章我们详细的介绍了RestTemplate发送请求的问题,熟悉Spring的小伙伴可能会发现:RestTemplate不就是Spring提供的一个发送请求的工具吗?它什么时候具有了实现客户端负载 ...

  5. 如何把你的.net程序打包上传到nuget

    写在前面 每个.net开发者都经常用nuget管理自己的程序包,install一个json组件啊,一个工具类什么的,这些都是别人写好的.如果我也写好了一个自己感觉很拿的出手的组件,想轻松的使用nuge ...

  6. Python:正则表达式 re 模块

    正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分 ...

  7. Docker安装MySQL并配置my.cnf

    1.创建一个临时的mysql,以便复制出my.cnf等数据 $ docker run --restart=always -d -v /opt/data/mysql/:/var/lib/mysql -p ...

  8. LeetCode专题-Python实现之第21题:Merge Two Sorted Lists

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  9. PE知识复习之PE的RVA与FOA的转换

    PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...

  10. python中循环删除列表中元素时的坑!

    循环删除列表中元素时千万别用正序遍历,一定要用反序遍历! 废话不多说,先上案例代码: def test(data): for i in data: data.remove(i) return data ...