[数据库操作]Java中的JDBC的使用方法.
前言:
想必大家在实际编码中都遇到过JDBC的操作, 这里仅做自己的一个总结, 有错误和不完整之处还请大家提出来.
1,JDBC其实一套规范(接口)
数据库厂商需要实现此接口(实现类)--数据库驱动
2,jdbc的作用:
可以和数据库创建链接
发送sql语句
接收返回值,处理结果
3,api详解(java.sql或者javaX.sql)
DriverManager 类:
管理一组 JDBC 驱动程序的基本服务。
常用方法:
registerDriver(Driver):注册驱动
查看 mysql的Driver的时候有下面一段代码:

发现在类加载的时候已经注册过驱动,我们以后只需要把Driver加载到内存即可
类.Class
对象.getClass()
Class.forName("全限定名(包名+类名)")
以后开发中我们通过Class.forName("com.mysql.jdbc.Driver")把驱动注册进去即可.
static Connection getConnection(String url, String user, String password) :获取链接
参数说明:
url:告诉jdbc去连接那个数据库
固定格式: 协议:子协议:子协议名称 参数
mysql: jdbc:mysql ://localhost:3306/databaseName
oracle: jdbc:oracle:thin :@localhost:1521:实例名
user:数据库的登录名
password:数据库的登录密码
Connection 接口:
创建语句执行者:
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");
常用方法:
Statement createStatement():创建Statement -语句执行者
PreparedStatement prepareStatement(String sql) :创建一个预编译的语句执行对象
CallableStatement prepareCall(String sql) :(了解) 创建一个 CallableStatement 对象来调用数据库存储过程。
Statement 接口(容易产生sql注入, 后期使用PreparedStatement. 后面会有blog说明这个问题)
sql语句执行者:
Statement st=conn.createStatement();
常用方法:
ResultSet executeQuery(String sql) :执行查询语句,返回一个集合 ☆
int executeUpdate(String sql) :执行更新 插入 删除语句,返回影响行数.☆
boolean execute(sql):执行给定的 SQL 语句,该语句可能返回多个结果。
若返回true ,执行是的查询语句
调用 getResultSet 获取查询结果
若返回false,执行的是更新 插入 删除语句
调用 getUpdateCount 获取影响的行数
ResultSet 接口
返回的查询结果:
String sql = "...";
ResultSet rs=st.executeQuery(sql);
常用方法:
boolean next() :判断是否有下一条记录,并且移动到下一行
获取内容:
getXXX(参数)
参数的写法:
1.字段名称 字符串
2.第几列 从1开始
getInt()
getString()
getObject()
4, 实例JDBCUtil类的书写
(1)配置文件 jdbc.properties
drivername=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ddatabaseName
user=root
password=1234
(2)JDBCUtil.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle; public class JDBCUtil {
//ctrl + shift + x 转成大写
//ctrl + shift + y 转成小写
static final String DRIVERNAME;
static final String URL;
static final String USERNAME;
static final String PASSWORD; static{ /*通过ResourceBundle 专门用来加载properties文件
ResourceBundle bundle=ResourceBundle.getBundle("文件名称"); 通过 bundle.getString(键的名字)
String value=bundle.getString("url");
*/ ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
DRIVERNAME=bundle.getString("drivername");
URL=bundle.getString("url");
USERNAME=bundle.getString("user");
PASSWORD=bundle.getString("password");
} static{
try {
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} //获取链接
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(URL,USERNAME,PASSWORD);
} //释放资源
public static void closeResource(Connection conn,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 (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}
(3)CRUDDemo, 使用PreparedStatement方式
public class PPCRUDDemo {
public static void main(String[] args) {
//插入
//insert("赵四","123","zhaosi@163.com");
//更新
//updateByName("赵四","尼古拉斯.赵四");
//获取
//getByName("尼古拉斯.赵四");
//删除
deleteByName("尼古拉斯.赵四");
}
private static void deleteByName(String string) {
//模版
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
//获取链接
conn=JDBCUtil.getConnection();
//编写sql
String sql="delete from user where username =?";
//获取预编译执行者
st=conn.prepareStatement(sql);
//设置参数
st.setString(1, string);
//执行sql
int i = st.executeUpdate();
//处理结果
if (i>0) {
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.closeResource(conn, st, rs);
}
}
private static void getByName(String string) {
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn=JDBCUtil.getConnection();
String sql="select * from user where username=? limit 1";
st=conn.prepareStatement(sql);
st.setString(1, string);
rs=st.executeQuery();
if (rs.next()) {
System.out.println(rs.getInt(1)+":"+rs.getString(2)+":"+rs.getObject(3)+":"+rs.getObject(4));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
JDBCUtil.closeResource(conn, st, rs);
}
}
private static void updateByName(String oldName, String newName) {
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn=JDBCUtil.getConnection();
String sql="update user set username = ? where username = ?";
st=conn.prepareStatement(sql);
st.setString(1, newName);
st.setString(2, oldName);
int i=st.executeUpdate();
//处理结果
if (i>0) {
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtil.closeResource(conn, st, rs);
}
}
private static void insert(String username, String password, String email) {
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
//获取链接
conn=JDBCUtil.getConnection();
//编写sql
String sql="insert into user values(null,?,?,?)";
//获取预编译语句执行者
st=conn.prepareStatement(sql);
//设置参数
st.setString(1, username);
st.setString(2, password);
st.setString(3, email);
//执行sql
int i=st.executeUpdate();
//处理结果
if (i>0) {
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtil.closeResource(conn, st, rs);
}
}
}
这里没有多么高深的东西, 熟能生巧, 暂时总结的就这么多.
[数据库操作]Java中的JDBC的使用方法.的更多相关文章
- 第67节:Java中的JDBC运用
第67节:Java中的JDBC运用 https://www.jianshu.com/p/628a9ba1b205
- Java中的equals和hashCode方法
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- 转:Java中的equals和hashCode方法详解
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
- 关于java中的hashcode和equals方法原理
关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...
- java中取得用户输入的方法
java中取得用户输入的方法 1.采用java.util.Scanner类 采用Scannerd的next()方法读取,测试代码如下: Scanner sc=new Scanner(System.in ...
- Java 中extends与implements使用方法
Java 中extends与implements使用方法 标签: javaclassinterfacestring语言c 2011-04-14 14:57 33314人阅读 评论(7) 收藏 举报 分 ...
- Java中各种(类、方法、属性)访问修饰符与修饰符的说明
类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...
随机推荐
- 根据excel表格中的内容更新Sql数据库
关于[无法创建链接服务器 "(null)" 的 OLE DB 访问接口 SQL Server 2008读取EXCEL数据时,可能会报这个错误:无法创建链接服务器 "(nu ...
- 判断Ie浏览器
ie8以下 if(!+[1,]) if(window.attachEvent){ alert("ie")}else if(window.addEventListener){aler ...
- Javascript函数、构造函数、原型、类和对象
函数 函数是JavaScript中特殊的对象,对函数执行typeof运算会返回字符串"function",因为函数也是对象,他们可以拥有属性和方法. 静态方法 函数在JS中定义了类 ...
- meta标签总结
1."format-detection" format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的, 那关于meta的forma ...
- JAVA学习<四>
一. 数组: Java 中操作数组只需要四个步骤: 1. 声明数组 语法: 数据类型[ ] 数组名: 或者 数据类型 数组名[ ]: 其中,数组名可以是任意合法的变量名. 2. 分配空间 简单地 ...
- iOS 地图
MapKit框架使用前提 导入框架 导入主头文件 #import <MapKit/MapKit.h> MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK MapKi ...
- python学习笔记-Day4(2)
正则表达式 语法: import re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0-9]代表匹配0至9的任意 ...
- mysql 日志
1.error_log 记录mysql的启动关闭的信息 记录mysql服务器运行错误的信息 记录mysql的表检查或修复信息 路径:my.cnf中通过--log-error=[file_name]配置 ...
- UVAL1277_Cops and Thieves
单源点汇点无向图,要阻隔某个点的流量,必须在一个点上消耗一定的价值,问你能否在消耗价值不超过k的前提下,阻隔源点到汇点的流量. 直接对于有权值的点拆点,拆后边容量即为点权.其余的点的容量无穷,最大流即 ...
- .NET Interop.SHDocVw和MSHTML引用如何操作
Interop.SHDocVw:引用Com:Microsoft HTML Object Library 和 Microsoft Internet Controls MSHTML:引用-->COM ...