[数据库操作]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 可以被本项目的所 ...
随机推荐
- js 和 c# 方法互调
js访问c#代码 1 js <script type="javascript"><%=test()%></script> c# public ...
- NPOI 读写Excel
实例功能概述: 1.支持Excel2003以及2007 2.支持Excel读取到DataTable(TableToExcel) 3.支持DataTable导出到Excel(TableToExcel) ...
- windows 2008 server ftp 无法访问解决办法
安装一个WINDOWS自带的FTP服务器,整了接近一天的时间,按网上的教程,无论如何搭建.最终都是内部IP可以访问.外部IP无法访问. 1.防火墙全部关掉. 2.FTP所在目录给的是EVERYONE的 ...
- linux服务之X windows
gnome display manager :gdm window manager :metacity x-server x-client [root@localhost gdm]# xlsclien ...
- 嵌入式web服务器
要实现在PC上通过网页控制连接到嵌入式开发板的相机. 限于开发板的环境,不能选择appche等大型web服务器,选择了boa. 要想pc端跨平台,那就不能用ActiveX控件,如果仅在windows平 ...
- Java 基本数据类型长度
System.out.println(Integer.MAX_VALUE-(-Integer.MAX_VALUE)); //内存溢出System.out.println(Integer.MAX_VAL ...
- easyui combobox onSelect事件
easyui combobox 没有onchange事件,只有onSelect事件 1 $(function () { $('#Select6').combobox({ onSelect: funct ...
- POI 读取word (word 2003 和 word 2007) (转)
最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 9 ...
- #笔记#JavaScript进阶篇一
#JavaScript进阶篇 http://www.imooc.com/learn/10 #认识DOM #window对象 浏览器窗口可视区域监测—— 在不同浏览器(PC)都实用的 JavaScrip ...
- linux下使用SSL代理(SSLedge)
refer to: https://eurekavpt.com/page/ssledge-on-linux 启动非常简单./ssledge-term-x64 -f config -D 其中的confi ...