JDBC基本应用
首先我们来看一下JDBC操作数据的核心:
Connection
应用程序与数据库之间的桥梁
数据库驱动程序是构建桥梁的基石和材料
DriverManager类是基石和材料的管理员
Statement
桥梁上的汽车。在应用程序和数据库之间运送SQL语句和运行结果
ResultSet
运行查询得到的数据集。由若干行和列组成的数据表,是数据库中数据表的子集,有游标
JDBC基本步骤:
1 注冊驱动
Class.forName(“com.mysql.jdbc.Driver”);
2 建立到数据库的连接
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?user=root&password=root");
3 创建statement
Statement stmt = con.createStatement();
4 运行SQL语句
int count= stmt.executeUpdate(“update student set age=25 where id=1”);
ResultSet rs= stmt.executeQuery(“select * from student”);
5 处理results
while(rs.next()){
rs.getString(2);
}
对数据进行加入、删除、改动等操作,SQL运行结束就已经完毕
对数据进行查询,查询结果存放在ResultSet对象中
ResultSet对象是满足查询条件的数据行。是数据库表数据的子集
ResultSet
使用游标指向数据行
游标最初定位在第一行之前
boolean rs.next();
当游标指向某行数据,我们就能够从当前行取出须要的数据
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVmljdG9yX0NpbmR5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在ResultSet对象中使用getXXX(索引或列名)方法获得数据
使用列名称或索引检索数据
rs.getString(2);
rs.getInt(“age”);
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVmljdG9yX0NpbmR5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
6 关闭JDBC对象
try {
if(rs!=null){ rs.close(); }
if(stmt!=null){ stmt.close(); }
if(conn!=null){ conn.close(); }
} catch (SQLException e) {
e.printStackTrace();
}
某些步骤的实现方式有多种。比方:注冊驱动……
注冊驱动的方式有多种
1)使用类装载器(Class.forName(“类名”))
Class.forName(“com.mysql.jdbc.Driver”);
2)使用newkeyword实例化驱动类
3)在属性文件里配置jdbc.drivers属性
4)省略驱动程序注冊步骤
使用JDBC4.0以上版本号
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
能够使用newkeyword对驱动进行显式的实例化
语法:
Driver drv = new DriverConstructor();
DriverManager.registerDriver(drv);
在配置文件里指定驱动类名
语法:
jdbc.drivers = driverName
演示样例:
//创建一个test.properties配置文件,在属性文件里写入属性并赋值
//然后在程序中读取配置文件
jdbc.drivers= com.mysql.jdbc.Driver
下面是具体代码:
package util; import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
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.sql.Statement;
import java.util.Properties; public class DBUtil {
public Connection getConn() throws IOException, ClassNotFoundException, SQLException{
//得到文件路径
File file=new File("jdbc.properties");
Connection conn=null;
//得到输入流
InputStream input = new BufferedInputStream(new FileInputStream(file));
//得到文件属性
Properties p=new Properties();
//从输入字符流读取属性列表
p.load(input);
//关闭输入流
input.close();
String className=p.getProperty("jdbc.drivers");
String url=p.getProperty("url");
String user=p.getProperty("username");
String password=p.getProperty("password");
//注冊载入驱动
Class.forName(className);
conn=DriverManager.getConnection(url, user, password);
return conn;
}
public void close(Connection conn,PreparedStatement pst,Statement st,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
获得连接的其它方法:
1)通过DriverManager类获得连接对象
方法
getConnection(String url)
getConnection(String url, String user, String passwd)
getConnection(String url, java.util.properties info)
演示样例
DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”,”root”);
Properties pro = new Properties();
pro.setProperty(“user”,”root”); //键是user,不是username
pro.setProperty(“password”,”root”);
Connection con = DriverManager.getConnection(
“jdbc:mysql://localhost:3306/test”, pro);
2)通过指定的驱动对象直接调用connect()方法
语法
Connection con = Driver.connect(urlString, properties)
演示样例
Driver drv = new com.mysql.jdbc.Driver();
Connection con = null;
Properties pro = new Properties();
pro.setProperty(“user”,”root”); //键是user,不是username
pro.setProperty(“password”,”root”);
try {
con = drv.connect(“jdbc:mysql://localhost:3306/test”, pro);
}catch(SQLException e){ e.printStackTrace(); }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Statement相关接口:
Statement:运行SQL语句,对数据库进行操作
executeQuery():查询数据
executeUpdate():加入数据。删除数据。改动数据
PreparedStatement:扩展Statement接口。对预编译的SQL语句进行处理,提高效率
CallableStatement:扩展PreparedStatement接口,运行数据库存储过程
1 Statement对象
创建Statement
Statement对象用来运行SQL语句,对数据进行操作
通过connection.createStatement()方法得到Statement对象
语法
Statement stm = connection.createStatement();
演示样例
Statement stm = null;
ResultSet rs = null;
try{
stm = connection.crateStatement();
rs = stm.executeQuery("select id, name, age from student");
}catch(SQLException e) {}
运行SQL语句
通过Statement对象将SQL语句原样传送到已经建立连接的数据库并运行
查询数据的SQL语句运行后得到的结果集以表数据的形式存储在java.sql.ResultSet对象中,通过ResultSet对象訪问查询结果
executeQuery(sqlString):运行查询相关的SQL语句,返回ResultSet对象
加入,删除,改动数据的SQL语句运行后返回整数。表示受到影响的行数
executeUpdate(sqlString):运行添加。改动,删除相关SQL语句或不返回不论什么内容的SQL语句
演示样例
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(“select * from student”);
Statement stm = con.createStatement();
int count= stm.executeUpdate(“update student set age=25 where id=1”);
2 PreparedStatement对象:
对SQL语句的编译结果在缓存中保留。提高多次运行的效率
statement每次运行sql语句,相关数据库都要先将sql语句进行编译。然后运行。
而preparedstatement则将sql语句编译的结果保留,能够多次运行。
语法
PreparedStatement pstm = connection.prepareStatement(sqlString);
演示样例
String sql = “select * from student where id=?”;
pstm = connection.prepareStatement(sql);
pstm.setInt(1, 1); //setString(),setFloat()
rs = pstm.executeQuery(); //executeUpdate()
……
pstm.setInt(1, 2);
rs = pstm.executeQuery();
3 CallableStatement对象:
1)运行数据库存储过程(数据库中定义的函数)
语法
CallableStatement cstm = connection.prepareCall(sqlString);
演示样例
CallabeStatement cstm = null;
try{
cstm = connection.prepareCall(“{call proc_insert_test(?,?)}”);
cstm.setString(1, “sunqi”);
cstm.setInt(2, 33);
cstm.executeUpdate();
}catch(SQLException e){}
2)存储过程返回值
CallabeStatement cstm = null;
try{
cstm = connection.prepareCall(“{call proc_select_test(?)}”);
cstm.setInt(1, 30);
rs = cstm.executeQuery();
}catch(SQLException e){}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
JDBC基本应用的更多相关文章
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- JDBC增加删除修改
一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...
- JDBC简介
jdbc连接数据库的四个对象 DriverManager 驱动类 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- FineReport如何用JDBC连接阿里云ADS数据库
在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...
- JDBC基础
今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...
- Spring学习记录(十四)---JDBC基本操作
先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...
随机推荐
- 自动交互脚本之expect使用记录
之前一直没怎么用这个命令,意外用了一下,还不错,那这个是干嘛的呢 我们或多或少会远程登录其他服务器,需要执行某项任务,通常需要手动接入,输入密码啊,等等 那我们如何有效的自动执行呢,expect可以解 ...
- 怎么在在php配置文件中打开php_fileinfo扩展
运行composer下载文件时的相关报错截图 处理方法: 在php配置文件中打开php_fileinfo扩展 你需要在查看是否有这个扩展包, 如果有, 那就在php.ini写 extension=ph ...
- Spring Data Redis入门示例:基于Jedis及底层API (二)
使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...
- 通过反编译小程序来学习前端:wxappUnpacker
小程序开发时,会有4种文件:.wxss .json .wxs .wxml. 正式上传到腾讯时,目录会被打包,使用时再发放给客户端. 这个文件包后缀是 .wxapkg.只要手机用过这个小程序,文件 ...
- C++ 之 string
C++ 的 string 类封装了很多对字符串的常用操作. string 类是模板类 basic_string类,以 char作为其元素类型的类. string 以单字节作为一个字符,如果处理多字符集 ...
- 大项目之网上书城(六)——个人页面和书页面Demo
目录 大项目之网上书城(六)--个人页面和书页面Demo 主要改动 1.user.jsp 代码 效果图 user.js 代码 3.shu.jsp 代码 效果图 4.其他小改动 LoginServlet ...
- 使用Java(Jedis)链接redis报java.net.ConnectException: Connection refused: connect的错误
redis环境:centos6 java代码运行环境:windows 第一种情况:未开启redis服务. redis-server /myredis/redis.conf (写你的redis配置文件的 ...
- php - namespace篇
之前没有系统学习过PHP语言,直接上手TP框架了,所以认为namespace和use是TP框架的一部分,最近学习语言模块的时候遇到了这个问题,所以汇总了一下. PHP中命名空间可以解决两类问题: 用户 ...
- 《机器学习实战》-逻辑(Logistic)回归
目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...
- PHP 真值与空值
本文参考 http://php.net/manual/en/types.comparisons.php. 1. isset bool isset ( mixed $var [, mixed $... ...