java基础(11) -JDBC
java基础(11) -JDBC
jdbc
1.装载驱动
载入跟数据库建立连接的驱动
/*
sql server:
String className ="com.microsoft.sqlserver.jdbc.SQLServerDriver";
mysql:
String className = "com.mysql.jdbc.Driver";
*/
Class.forName(className);
2.获取连接
获取数据库服务器的一个开放连接集
/*
sql server:
jdbcUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=jdbc_research";
mysql:
jdbcUrl = "jdbc:mysql://localhost:3306/jdbc_research?useUnicode=true&characterEncoding=UTF-8";
*/
Connection c = DriverManager.getConnection(jdbcUrl,username,password);
3.执行SQL & 获取结果
Statement--用于执行不带参数的简单SQL建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句
Statement stm = c.createStatement();
//创建语句
stm.execute("CREATE table jdbc_test(name CHAR(20))");
//增 删 改 查
stm.executeUpdate("INSERT INTO jdbc_test VALUES('TEST')");
stm.executeUpdate("DELETE jdbc_test");
stm.executeUpdate("UPDATE jdbc_test SET name='change' WHERE name = 'TEST'");
ResultSet rs =stm.executeQuery("SELECT * FROM jdbc_test");
if(rs.next())
System.out.println(rs.getString(1));//结果集从1开始
PreparedStatement--对象用于执行带或不带IN参数的预编译 SQL 语句
PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行.
//适合于带参数多次执行的数据库操作
PreparedStatement stm = c.prepareStatement("INSERT INTO jdbc_test VALUES(?)");
for (int i = 0; i < 10; i++) {
//参数索引从1开始
stm.setString(1,"test" + i);
stm.executeUpdate();
}
//批处理
PreparedStatement stm = c.prepareStatement("INSERT INTO jdbc_test VALUES(?)");
for (int i = 0; i < 10; i++) {
//参数索引从1开始
stm.setString(1,"Batch" + i);
stm.addBatch();
}
stm.executeBatch();
CallableStatement--对象用于执行对数据库已存在的存储过程的调用
java调用
//参数索引从1开始
String procedure = "{ call get_name_by_id(?,?,?) }";
//设置调用的存储过程
CallableStatement stm = c.prepareCall(procedure);
//注册输入参数的类型
stm.setInt(1, 2);
//注册输出的参数
stm.registerOutParameter(2, java.sql.Types.CHAR);
stm.registerOutParameter(3, java.sql.Types.INTEGER);
stm.execute();
//获取对应输出参数的值
String rs = stm.getString(2);
System.out.println("name:"+rs);
int rs2 = stm.getInt(3);
System.out.println("id:"+rs2);
SQL SERVER
CREATE table proc_test(name CHAR(20),id int,sex char(2));
INSERT INTO proc_test (name,id,sex) VALUES('test',1,'男');
INSERT INTO proc_test (name,id,sex) VALUES('test2',2,'女');
INSERT INTO proc_test (name,id,sex) VALUES('test3',3,'男');
INSERT INTO proc_test (name,id,sex) VALUES('test4',4,'女');
--CREATE
ALTER PROC get_name_by_id(@n INT,@rs CHAR(20) OUTPUT,@id INT OUTPUT)
AS
BEGIN
SELECT @rs=name, @id=id FROM proc_test WHERE id = @n
END
--SQL调用
DECLARE @r CHAR(20)
DECLARE @id INT
EXEC get_name_by_id 2,@r OUTPUT ,@id OUTPUT
SELECT @r AS name ,@id AS id
4.关闭资源
查询完成后要把资源回收(关闭连接)
c.close();
java基础(11) -JDBC的更多相关文章
- 【Java基础】JDBC简明教程
目录 1. 常用类 2. JDBC编程步骤 3. 事务处理 4. 数据库连接池 5. JDBC列子代码 6. 使用Apache的JDBC工具类 虽然在平时的开发过程中我们不会直接使JDBC的API来操 ...
- Java基础93 JDBC连接MySQL数据库
本文知识点(目录): 1.什么是jdbc 2.jdbc接口的核心API 3.使用JDBC技术连接MySQL数据库的方法 4.使用Statement执行sql语句(DDL.DML. ...
- java基础之JDBC八:Druid连接池的使用
基本使用代码: /** * Druid连接池及简单工具类的使用 */ public class Test{ public static void main(String[] args) { Conne ...
- java基础之JDBC二:原生代码基础应用
JDBC的基础应用CURD: 增删改 public void noQuery() { Connection conn = null; Statement stat = null; try { //注册 ...
- java基础之JDBC一:概述及步骤详解
1. JDBC的简介 概述: 就是Java用来操作不同数据库(DBMS)的类库(技术), 本质就是一些类和接口. /* 类: DriverManager 接口: Driver, Connection, ...
- 【java基础 11】java集合框架学习
导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...
- java基础(11):接口、多态
1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- Java基础11 对象引用
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/01/2992484.html 作者:Vamei 出处:http://www.cnblogs.com ...
随机推荐
- 用kotlin方式打开《第一行代码:Android》
参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android> 注2:本文不赘述android开发的基本理论,不介绍 ...
- 详谈JAVA中的file类与IO流
File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...
- EMC在线测试题目及答案 绿色为正确答案,红色为错误答案
1. 以下哪一项技术可以将IT的物理资源放在一个共享池中以及提升它们的利用率? 分区 虚拟化 协调 LUN 屏蔽 2. 哪一项是EMC的基于块-存储(block-based)的高端存储? Atmos ...
- cocoapods安装和使用常见问题及解决方案
cocopods安装后pod install出现以下错误 /usr/local/Cellar/ruby/2.4.1_1/lib/ruby/2.4.0/rubygems.rb:270:in find_s ...
- netsh & winsock & 对前端的影响
netsh 与 winsock 一个是window的脚本工具,另一个则是window是网络编程中要用到的网络接口,而非要说跟我小小的前端有什么影响,那还真有...,当然这个影响是很不好的,比如node ...
- 开涛spring3(6.7) - AOP 之 6.7 通知顺序
如果我们有多个通知想要在同一连接点执行,那执行顺序如何确定呢?Spring AOP使用AspectJ的优先级规则来确定通知执行顺序.总共有两种情况:同一切面中通知执行顺序.不同切面中的通知执行顺序. ...
- 解密Lazy<T>
1.Lazy<T>的使用 无意间看到一段代码,在创建对象的时候使用了Lazy,顾名思义Lazy肯定是延迟加载,那么它具体是如何创建对象,什么时候创建对象了? 先看这段示列代码: publi ...
- Windows 7 蓝屏代码大全 & 蓝屏全攻略
关于Windows 7.Vista等系统的蓝屏,之前软媒在Win7之家和Vista之家都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即 ...
- ASP.NET 开发者 开始学习ASP.NET Core 2吧
. NET Core 从2016年6月28日发布,过去了将近一年的时间,但是在工作中发现大家对.net core的接受程度并不高,这只是一个感觉,俗话说“没有调查就没有发言权”, 这两天通过微信小程 ...
- 连接Oracle数据库的时候报了“Got minus one from a read call”
(转) 出现这种问题基本上就以下几种原因,可以查一下系统日志看看:1:数据库连接满了,扩大数据库连接池2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可3:数据库负载均衡 ...