JDBC连接数据库(详细步骤)
JDBC连接数据库
总结了JDBC连接数据库具体步骤的的实现
JDBC连接数据库的步骤
- 注册驱动
- 获取连接
- 获取数据库操作对象
- 执行sql语句
- 处理查询结果集
- 释放资源
步骤的具体实现
注册驱动
注册驱动时,需要导入MySQL的驱动包mysql-connector-java-5.1.32.jar包,通过这个包才能时java程序能够连上数据库。如果导入后不能连接上数据库,可能是因为数据库的版本太高,需要新一级的驱动包mysql-connector-java-8.0.24.jar包。
具体实现
Class.forName(com.mysql.jdbc.Driver) //一般通过反射来注册驱动
获取连接
获取连接时,一般需要获得数据库的url,用户名,和密码然后通过Connection类获取连接
具体实现
// url表示数据的url地址 url: jdbc:mysql://访问的地址:3306/数据库名 3306是MySQL的默认端口
// user表示数据库的用户名 user: 用户名
// user表示数据库的密码 password: 密码
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url,user,password);
获取数据库操作对象
获取数据库操作对象可以通过Statement和PreparedStatement两种方式来获取数据库操作对象。
Statement: 操作数据库时是直接编译SQL语句,是一致拼接字符串的方式来拼接SQL语句,这种方式来操作数据库对象,容易造成SQL注入现象。
PreparedStatement: 操作数据库时,是先将SQL语句预编译一遍,然后将值注入进来,这样不易造成SQL注入。
虽然Statement易造成SQL注入现象,但是在有些需求时,还是会用到Statement操作数据库。例如查询出来的数据需要动态输入是否排序时就需要Statement实现
具体实现
Statement stmt = conn.createStatement(); // Statement方式获取数据库操作对象
PreparedStatement ps = conn.prepareStatement(sql); //PreparedStatement方式获取,预编译SQL语句
执行SQL语句
如果是执行增删改(DML)语句就需要使用**executeUpdate()方法,如果执行的是查询(DQL)语句就需要使用executeQuery()**方法,使用查询语句才会有结果集返回。
具体实现
String sql = "select e.ename,e.sal from emp e"; //DQL语句
stmt.executeQuery(sql); //Statement方式
ps.executeQuery(); //PreparedStatement方式 因为先执行了SQL语句所以在这就不用再传入sql了String sql = "update emp set sal = sal-1000 where empno=?"; // DQL语句 PreparedStatement方式
//PreparedStatement中下标没有0所以从1开始往后添加第一个要注入的值就是1第二给为2依次往后推
ps.setInt(1,7369); //将值注入进SQL语句中 因为已经执行过SQL语句了,这里只需将值传入就行String sql = "update emp set sal = sal-1000 where empno= "+num+""; // DQL语句 Statement方式
stmt.executeUpdate(sql);//注意ps和stmt是由上一步获取数据库连接对象获得的对象
要导入数据是什么类型就用set什么类型的方法
处理查询结果集
查询(DQL)语句才会有结果集,一般将结果集用ResultSet类封装
具体实现
String sql = "select ename,sal from emp";
ResultSet rs = stmt.executeQuery(sql); //接收返回的结果集
ResultSet rs = ps.executeQuery();
while(rs.next()){ //rs.next()表示将光标往下一行读取下面一行的数据//根据字段名来读取数据rs.getString("ename"); //获取查询出来的ename 数据拿到了后续要怎么操作就看自己的需求了,这里就不做演示rs.getDouble("sal"); //获取查询出来的sal//根据下标来读取数据rs.getString(1); //获取查询出来的enamers.getDouble(2);//获取查询出来的sal
}
释放资源
释放资源时,需要先进行判断是否存在这个资源,然后再将这个资源关闭,一般是从后往前关闭,先创建的后关闭。
具体实现
if (rs != null){try{rs.close();}catch (SQLException e){e.printStackTrace();}}if (stmt != null){try{stmt.close();}catch (SQLException e){e.printStackTrace();}}if (conn != null){try{conn.close();}catch (SQLException e){e.printStackTrace();}}
总结
一般来说,获取数据连接时数据库的url,用户名,密码,驱动类型一般写在db.properties配置文件中,因为这样以后数据库信息更改之后易于维护。并且将获取数据连接,释放资源一般封装在一个工具类DBUtlis类中,封装之后就不会经常性的写重复的代码,下面展示一个完整的JDBC连接操作。
db.properties配置文件的编写
db.properties配置文件需要写在resourses包中
driver=com.mysql.jdbc.Driver //驱动类型
url=jdbc:mysql://localhost:3306/test //url
user=root //数据库用户名
password=123456 //数据库密码
DBUtils文件的编写
// 数据库工具类
public class DBUtils {//工具类中的构造方法一般都是私有化的,为什么?//构造方法私有化是为了防止new对象private DBUtils(){}//类加载时绑定属性资源文件 通过次类来绑定db.properties文件以此来获取db.properties文件中的信息private static ResourceBundle bundle = ResourceBundle.getBundle("resources/db");//注册驱动static {try {Class.forName(bundle.getString("driver")); } catch (ClassNotFoundException e) {e.printStackTrace();}}//获取数据库连接对象public static Connection getConnection() throws SQLException {String url = bundle.getString("url"); //获取urlString user = bundle.getString("user"); //获取数据库用户名String password = bundle.getString("password"); //获取数据库密码Connection conn = DriverManager.getConnection(url,user,password);return conn;}//释放资源public static void close(Connection conn, Statement stmt, ResultSet rs){if (rs != null){try{rs.close();}catch (SQLException e){e.printStackTrace();}}if (stmt != null){try{stmt.close();}catch (SQLException e){e.printStackTrace();}}if (conn != null){try{conn.close();}catch (SQLException e){e.printStackTrace();}}}
}
测试类的编写
这里用PreparedStatementa来操作对象
// 测试DBUtils
public class JDBCTest05 {public static void main(String[] args) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = DBUtils.getConnection();String sql = "select ename,sal from emp where ename like ?";ps = conn.prepareStatement(sql);ps.setString(1,"%s%");rs = ps.executeQuery();while (rs.next()){System.out.println(rs.getString("ename")+","+rs.getDouble("sal"));}} catch (SQLException e) {e.printStackTrace();}finally {DBUtils.close(conn,ps,rs);}}
}
JDBC连接数据库(详细步骤)相关推荐
- JDBC连接数据库详细步骤
一.先创建一个项目 二.打开数据库并启动连接 (我是在IDEA中写的,提前导包) 三.不会导包就在Maven中导,在pom.xml中的dependencise放,版本号看自己要高版本还是低版本.放进去 ...
- JDBC 连接数据库的步骤
大家好,今天我和大家分享一下JDBC 连接数据库的步骤. JDBC 连接数据库的步骤: 1.加载数据库驱动 2.获取数据库的连接 3.获取用于执行sql命令的执行对象 4.执行 5.处理结果 6.回收 ...
- JDBC编程——JDBC连接数据库六步骤
JDBC编程的6步骤 实现数据库连接之前,我们要先理解一下URL(统一资源定位器): 是跟数据库进行连接的时候,用来连接到指定远程数据库标识符. 可以在该URL中指定连接用户名和密码,同时,对于不同的 ...
- jdbc连接数据库的步骤(转载)
http://hzy3774.iteye.com/blog/1689525 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java. ...
- JDBC连接数据库详细讲解及代码演示
目录 JDBC介绍 JDBC访问数据库编码步骤 1. 准备好相应的jar包 2. 创建lib目录 3. 导入下载好的jar包 4. 简单的CURD 5. PreparedStatment完成CURD ...
- centos7 关于php使用pdo扩展连接数据库详细步骤
1 yum install httpd.x86_64 (安装http.x86) 2 yum install php(安装php) 3 systemctl start httpd.service(重启h ...
- JDBC连接数据库的步骤
String user="root";String password="123";String url="jdbc:mysql://localhost ...
- Java中JDBC连接数据库(MySQL)
JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十一个功能都放 ...
- JDBC连接数据库过程
JDBC连接数据库过程 时间: 2009-03-03 20:43来源: 作者: 点击: <script src="http://www.topkc.cn/plus/count.php? ...
最新文章
- Mysql中查询速度的优化
- bzoj 2654 bzoj 3675 总结
- js 操作vuex数据_Vue.js中使用Vuex实现组件数据共享案例
- snapchat_我刚刚在Snapchat获得开发人员职位。
- 中国人终于开始排队了
- 【论文笔记】Factorizable Graph Convolutional Networks
- AddHandler php5-script .php\AddType text/html .php和AddType application/x-httpd-php .php的区别?...
- 接口自动化测试框架搭建(6、对接口进行mock的方法封装)--python+HTMLTestRunnerCN+request+unittest+mock+db
- 基于jAVAWeb停车场管理系统
- 打开PDF时显示please wait...怎么办?没有安装pdf阅读器经常出现的提示信息
- RK3399外设驱动之MIPI
- 【操作系统】进程间通信 — 消息队列
- grub4dos引导启动linux,grub4dos中怎么样调用syslinux引导
- win7系统下装ubantu
- 三件套都有什么_床上用品三件套,四件套,五件套,七件套分别包括的是哪些...
- 单词1(-cess -ceed -cede -gress -gred -grad)=to go、go
- 英特尔宣布推出新的“ Compute Stick”-一种笔式驱动器大小的PC
- docker 文件操作
- 软件项目管理(CMMI成熟度)实践——之决策分析(1)
- Cadence ETS v8.1 Linux\
热门文章
- Spark Machine Learning(SparkML):机器学习(部分二)
- 计算机学院学生划分哪些专业,计算机科学与工程学院2020年大类招生学生专业分流工作实施方案...
- 微信小程序 对象的深浅拷贝
- 单片机串口不够用怎么办?
- vue父页面实时给子页面传值
- vue子组件修改父组件上的属性
- Zero-DCE++运行问题
- 论文阅读—Adaptive Graph Encoder for Attributed Graph Embedding
- HTB Mailroom WriteUp
- Elasticsearch java api操作(一)(Java Low Level Rest Client)